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; //发送完成开启接收中断允许位 } } }