PIC单片机(PIC16F877A)串行收发程序
2019-04-15 11:47发布
生成海报
#include
#define uchar unsigned char
uchar rtemp,sflag;
void SerialInit(void)
{
TXSTA=0x24; //开启发射使能位、高波特率,TRMT初始值可0可1
RCSTA=0x90; //开启串口、连续接收、
SPBRG=0x19; //4M晶振,波特率9600,则SPBRG初值为25
RCIE=1; //开启串口接收完成中断
GIE=1; //开全局中断
PEIE=1; //开第一外设中断
}
void interrupt SerialService(void) //接收中断
{
if(RCIE&&RCIF)
{
RCIF=0; //清零接收完成标志位
rtemp=RCREG; //读接收缓冲区
sflag=1;
}
}
void main(void)
{
SerialInit();
while(1)
{
if(sflag==1)
{
RCIE=0; //发送前关闭接收中断允许位
sflag=0;
TXREG=rtemp; //数据送发送缓冲区
while(!TXIF); //等待发送完成,众想教程中查询的是TRMT,并且发完后未清零TRMT
TXIF=0; //清零发送完成标志位
RCIE=1; //发送完成开启接收中断允许位
}
}
}
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮