PIC16F877A – Serial communication(USART)
The USART module of PIC 16F877A uses pins RC6 & RC7 for transmission & reception respectively. The mini development board can communicate with PC/external modules through
- USB port via CP2102
- Serial port via MAX232
- RMC connector K15 in 5V level
- RMC connector K17 in 3.3V level
Besides, USART is also used for interfacing Zigbee & RFID reader.
Schematic
Note:
- 3V3 USART communication through K17 is possible only if the jumpers J13 and J14 (XBTX, XBRX) are shorted.
- For communicating through K15 & K17, remove jumpers J3 & J4
Sample Code
The sample code to check USART module is given below. Initially the letter ‘A’ gets transmitted. Then, upon receiving a character, the same gets retransmitted.
Value in SPBRG is calculated as follows
Baud Rate = Fosc / (16 (X + 1))
The desired baudrate is 9600 bps and crystal frequency, Fosc is 20 MHz. This gives X as 129 (81 in hexadecimal) which is loaded in SPBRG. Any change in crystal frequency/baudrate changes this value as per the above equation.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
/********************************************************************** HEADER FILE ***********************************************************************/ #include<pic.h> /********************************************************************** MAIN FUNCTION ***********************************************************************/ void main() { TRISC = 0x80; /* RC6(TX)-O/P, RC7(RX)-I/P */ SPBRG = 0x81; /* Serial Baud Rate Generator for 9600 */ TXSTA = 0X24; /* TXEN=1, SYNC=0, BRGH=1 */ RCSTA = 0X90; /* Reception Enable (SPEN=1,CREN=1) */ TXREG = 'A'; /* Load the character to be transmitted */ while(!TRMT); /* Wait here till transmission is complete */ while(1) { if(RCIF==1) { RCIF = 0; /* Clear Receive interrupt flag bit */ TXREG = RCREG; /* Retransmit the received character */ while(!TRMT); /* Wait here till transmission is complete */ } } } /************************ END OF PROGRAM ****************************/ |
Output
The following screenshots explain how to test the sample code using RealTerm (click to download).
- Step 1: Open RealTerm
- Step 2: RealTerm opens as shown below
- Step 3: Go to ‘Port’ option, set correct baudrate (which is set as 9600 in the sample code) and correct port
- Step 4: Click ‘Change’ (encircled in red) to apply the changes. Now check the status of Port. If it is closed, click ‘Open’ button (encircled in green) to open it.
- Step 5: To check reception, go to Send option, type the string in the space provided(encircled in green) and click Send ASCII button. The first “hello” in green colour is transmitted from PC & that in yellow colour is retransmitted by the controller
Topics related to PIC16F877A Development Board-Mini
- PIC16F877A Mini Development Board – Overview
- PIC16F877A Mini Development Board – Interfacing LED
- PIC16F877A Mini Development Board – Interfacing LCD
- PIC16F877A Mini Development Board – Serial communication(USART)
- PIC16F877A Mini Development Board – Interfacing Switch
- PIC16F877A Mini Development Board – Interfacing Buzzer
- PIC16F877A Mini Development Board – Interfacing POT(ADC)
- PIC16F877A Mini Development Board – Interfacing Temperature sensor
- PIC 16F877A Mini Development Board – Interfacing Servo Motor
- PIC 16F877A Mini Development Board – Interfacing μRFID Reader
Resources
- Datasheets
How to buy?
- Click here to buy rhydoLABZ PIC 16F877A Mini Development Board
- Click here to buy rhydoLABZ PIC 18F4520 Mini Development Board
- Click here to buy rhydoLABZ PIC 18F4550 Mini Development Board
- Click here to buy rhydoLABZ PIC 18F4580 Mini Development Board
SupportPlease share your ideas with us, visit our forum for discussion
Leave a Reply
You must be logged in to post a comment.