1. 程式人生 > >PIC微控制器(PIC16F877A)序列收發程式

PIC微控制器(PIC16F877A)序列收發程式

#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;		//傳送完成開啟接收中斷允許位
		}
	}
}