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