Serial Communication SCI is short for Serial Communication Interface and, as a special subsystem, it exists on most microcontrollers. When it is not available, as is the case with PIC16F84, it can be created in software. As with hardware communication, we use standard NRZ (Non Return to Zero) format also known as 8 (9)-N-1, or 8 or 9 data bits, without a pair bit and with one stop bit. Free line is defined as the status of logic one. Start of transmission - Start Bit, has the status of logic zero. The data bits follow the start bit (the first bit is the bit of the lowest value), and after the bits we place the Stop Bit of logic one. The duration of the stop bit 'T' depends on the speed of transmission and is adjusted according to the needs of the transmission. For the transmission speed of 9600 baud, T is 104 uS.
| 1. CD (Carrier Detect) 2. RXD (Receive Data) 3. TXD (Transmit Data) 4. DTR (Data terminal Ready) 5. GND (Ground) 6. DSR (Data Set Ready) 7. RTS (Request To Send) 8. CTS (Clear To Send) 9. RI (Ring Indicator)
Pin designations on RS232 connector In order to connect a microcontroller to a serial port on a PC computer, we need to adjust the level of the signals so communicating can take place. The signal level on a PC is -10V for logic zero, and +10V for logic one. Since the signal level on the microcontroller is +5V for logic one, and 0V for logic zero, we need an intermediary stage that will convert the levels. One chip specially designed for the job is MAX232. This chip receives signals from -10 to +10V and converts them into 0 and 5V. The circuit for this interface is shown in the diagram below: Connecting a microcontroller to a PC via a MAX232 line interface chip. File RS232.inc contains a group of macros used for serial communication. Using the macro: RS232init Macro for initializing RB0 pin and line for transmitting data (TX-pin). Example: RS232init SEND S_string Sending ASCII character. Argument is ASCII sign. Example: SEND 'g' SENDw Sending data found in W register. Example: movlw 't' SENDw RECEIVE macro in interrupt routine receives data for RS232 and stores it in RXD register Example: At the beginning of the main program, we need to declare variables RS_TEMP1, RE_TEMP2, TXD, RXD and TX pin on microcontroller. After resetting a microcontroller the program sends a greeting message to PC computer: $ PIV16F84 on line $, and is ready to receive data from RX line. We can send and receive data from PC computer from some communication program. When microcontroller receives data, it will send a message: Primljen karakter od PIC16F84: x (Character received from PIC16F84: x), thus confirming that reception was successful. Main program: