PIC16F877 and UART mikroC example

In this example we will show a basic example of reading and writing text to the UART (serial) using a PIC. We will use this in later examples when we look at sensors and we will output via a serial port.

Our test setup is an Open16F877A development board from Waveshare, we will show an example in mikroC Pro for Pic and I am using a PicKit 3.5 programmer to upload the hex file

 

Parts List

Name link
Open16F877A kit Open16F877A Package B # PIC16F877A-I/P PIC16F877A PIC 8-bit RISC Evaluation Development Board +14 Accessory Modules

 

Layout

 

Trying to find some good parts but as stated i connect a PL2303 module from Waveshare to the USART connection of the Waveshare Open16f877a

The connection is as follows

  • VCCIO ↔ 3.3V or 5V output (the module is powered from USB, onboard jumper should be shorted to 3.3V or 5V)
  • GND ↔ GND
  • TXD ↔ MCU.RX (signal direction: MCU.RX << PL2303 << PC.TX)
  • RXD ↔ MCU.TX (signal direction: MCU.TX >> PL2303 >> PC.RX)

 

Code Examples

The following example is written in MikroC – we all also include another example which we haven’t tested

char uart_rd;
 
void main() {
  //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 stabilize
 
  UART1_Write_Text("Start");
  UART1_Write(13);
  UART1_Write(10);
  UART1_Write_Text("PIC UART example in MIKROC");
  UART1_Write(13);
  UART1_Write(10);
 
  while (1) {                     // Endless loop
    if (UART1_Data_Ready()) {     // If data is received,
      uart_rd = UART1_Read();     // read the received data,
      UART1_Write(uart_rd);       // and send data via UART
    }
  }
}

This is the example that comes from Waveshare – untested

/*
*
*
* File                : USART.c
* Hardware Environment:	OpenPIC16F877A && rs232 &&  5v voltage && 4M crystal oscillator
* Build Environment   : MPLAB IDE && sscom32
* Version             : V8.76
* By                  : Zhou Jie
*
*                                  (c) Copyright 2011-2016, WaveShare
*                                       http://www.waveShare.net
*                                          All Rights Reserved
*
*
*/
#include<pic.h>         
 __CONFIG(0xFF32);        
 
 
void main()
 {
  TRISC=0X0;                 
  SPBRG=0XC;                 
  TXSTA=0X24;               
  RCSTA=0X90;               
  RCIE=0X1;                  
  GIE=0X1;                   
  PEIE=0X1;                
  while(1)                 
   {;}
  }
 
 
void interrupt usart(void)
  {
   if(RCIE&&RCIF)           
     {
      TXREG=RCREG;          
     }
   }

Output

Open a terminal program like TeraTerm, choose the com port of the PL2303 and check for messages -if you type a key it should be repeated back to the terminal

You should see something like this

Download

 

Share