SCI is an abbreviation 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 parity 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 low significant bit), and after the bits we place the Stop Bit of logic one. The duration of the stop bit 'T' depends on the transmission rate and is adjusted according to the needs of the transmission. For the transmission speed of 9600 baud, T is 104 uS.Pin designations on RS232 connector
|1. CD||(Carrier Detect)|
|2. RXD||(Receive Data)|
|3. TXD||(Transmit Data)|
|4. DTR||(Data terminal Ready)|
|6. DSR||(Data Set Ready)|
|7. RTS||(Request To Send)|
|8. CTS||(Clear To Send)|
|9. RI||(Ring Indicator)|
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 this task 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.
CONSTANT LF = .10 ;Line Feed CONSTANT CR = .13 ;Carriage Return CONSTANT TAB = .9 ;Tabulator CONSTANT BS = .8 ;Backspace RS232INIT MACRO BSF STATUS,RPO ;bank 1 BCF TXTRIS ;TX pin is output BCF STATUS ,RPO ;bank 0 BSF TXPORT ;Initial state on TX logical "1" SENDW ;sendw sends value of W register MOVWF TXD ;TX Data-register BCF TXPORT ;start bit CALL BITDELAY LOCAL I=0 WHILE I<8 ;8 times starting from LSB bit BTFSC TXD,I CALL SEND1 ;If i bit equals 1, call SEND1 BTFSS TXD,I CALL SENDO ;If i bit equals 0, call SENDO I=I+L ENDW BSF TXPORT ;stop bit CALL BITDELAY CALL BITDELAY ;Re-Synchronizati on RETURN SEND1 BSF TXPORT ;Set line to 1 CALL BITDELAY ;Delay for duration of sending 1 bit RETURN SENDO BCF TXPORT ;Set line to 0 CALL BITDELAY ;Delay for duration of sending 1 bit RETURN BITDELAY ;104us pause necessary for sending 1 bit MOVLW OXIE ;Total delay between 2 bits MOVWF RS232TEMP ;9600 baud ==> 104 us WAITLOOP DECFSZ RS232TEMP,F GOTO WAITLOOP RETURN RS232TEXT MACRO TEXT ;This macro prints the text from the ;parameter, of up to 16 characters LOCAL MESSAGE LOCAL START LOCAL EXIT LOCAL I=0 GOTO START RUKA DT TEXT DT .0 ;0 marks the end of the text START WHILE I<16 ;16 times.. MOVLW HIGH MESSAGE MOVWF PCLATH CALL RUKA+I ;Read and send i ASCII character ADDLW .0 BZ EXIT ;until 0, marking the end of the text CALL SENDW I=I+L ENDW ;END of the text EXIT ENDM RS232BYTE MACRO ARGL DIGBYTE ARGL MOVF DIGL,W ADDLW 0X30 ;Find the ASCII value of the number CALL SENDW ;Send the hundreds digit MOVF DIG2,W ADDLW 0X30 ;Find the ASCII value of the number CALL SENDW ;Send the tens digit MOVF DIG3,W ADDLW 0X30 ;Find the ASCII value of the number CALL SENDW ;Send the ones digit ENDM
Using the macro for serial communication:
|rs232init||Macro for initializing the pin for transmitting data (TX-pin).|
|Sendw||Sending ASCII value of data found in W register.|
|rs232text||Sending ASCII value of a specified text|
|rs232byte||Sending ASCII value of decimal digits of 8-bit variable|
|rs232byte TXdata ;Send '1', '2', '3'|
When rs232.inc file is used, it is necessary to declare variables Rstemp and TXD at the beginning of the main program.
As a demonstration of a serial communication, we have an example which sends text and the content of variable cnt. Text is sent via macro rs232text, while variable cnt is sent via macro rs232byte. This operation repeats itself after 500ms, with incrementing cnt in the process. This example can be easily modified to have button(s) for sending specified data.
User CommentsNo Posts found !
Login to Post a Comment.