PIC微控制器(PIC16F877A)序列收發程式
阿新 • • 發佈:2019-01-22
#include<pic.h> #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; //傳送完成開啟接收中斷允許位 } } }