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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值