Abstract of that project: Using UART port we can establish serial communication between any devices. Here in my project Serial communication with Pic 16f877 using UART I will show you how easily we establish communication between two devices. In my project we know the pin no 25,26 in PIC16F877 are use as UART. The pin number 25 is use for receiving and 26 is used for transmitting.

Hardware needed: See the circuit diagram bellow we use MAX232,UART port, Pic16f877 and LCd (Lm106L) to make our project.

Serial communication with Pic 16f877 using UART











For Simulation: we use Mikcro C pro to write the embedded C program for PIC16F877. We used Proteus 7 Professional for simulation. And for simulation of our project Serial communication with Pic 16f877 using UART, we replace COMPIM and MAX232 with Virtual UART Terminal.

So see our replace circuit for simulation in Proteus in bellow.

Serial communication with Pic 16f877 using UART









Mikcro C Pro Code:

To interfacing UART with Pic we have to use some new command those are

UART1_Init(Baudrate):is Initialize UART module at specified baudrate.

 UART1_Data_Ready() : use to check data is receive or not.

 UART1_Write_Text(“Start”): use to write declared text on uart

 UART1_Write(): use for transmit uart data.

 UART1_Read(): use for read the uart data.

 Now see at below the programing code to understand use of above mention command.

See embedded Code

Embedded C Code
// Name : Serial Communication
// Purpose : To establish serial communication.
// Author : Subham Dutta
// Date : 25-09-13
// Website : www.nbcafe.in
unsigned int uart_rd;
sbit LCD_RS at RD2_bit;
sbit LCD_EN at RD3_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;
sbit LCD_RS_Direction at TRISD2_bit;
sbit LCD_EN_Direction at TRISD3_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;
void main() {
int i;
ANSEL = 0; // Configure AN pins as digital
ANSELH = 0;UART1_Init(9600); // Initialize UART module at 9600 bps
Delay_ms(100); // Wait for UART module to stabilizewhile (1) { // Endless loop
if (UART1_Data_Ready()) { // If data is received,
uart_rd = UART1_Read();
UART1_Write(uart_rd); // read the received data,
if (uart_rd == 8){


See the video that how it simulate in Proteus