关于串行中断的解读

那一块不明白的可以下方留言,帮你解读

# include"reg51.h"
//CPU和片上外设--串行口之间的主从关系

typedef unsigned int u16;
sbit led=P1^0;

void serialportinit()
{
    TMOD=0X20;//选择定时器T1,采用工作方式2---8位自动重装载
	TH1=0XF3; // 根据选择的波特率---4800,按照公式进行计算(选择溢出率)
	TL1=0XF3; //根据自动重装载的工作原理,高8位的初值(不变)会赋给低8位
    		  //TCON是的中断标志位TF1硬件自动置1
	PCON=0X80;//SMOD置1功率倍增
	TR1=1; 	//前面只是为了启动定时器T1而已,没有让其申请中断
	SCON=0X50;//选择工作方式1---10位异步收发器,其中REN置1允许串行接收数据
	ES=1;
	EA=1;//串行通信中断
}
void main()
{
	serialportinit();/*执行到此,调用该函数,然后该函数满足中断条件,
	                进入中断服务函数
					  */
	while(1);		  
}
void serialport() interrupt 4 //中断号为1
{
	u16 receivedata;
	receivedata=SBUF;//将缓冲区的数据赋给软件变量
	RI=0;/*RI为接收数据中断标志位,RI置1时申请中断(内部硬件自动完成)
	      当RI置1说明这一帧数据cpu已经接收完成,因为是内部硬件完成,
		  所以需要软件将该位置0取消此次申请,这样才能等待下一次的接收
		  让cpu(SBUF)接收下一个数据
		  因为只有10位数据停止位过来时,硬件才能将RI置为1*/
	SBUF=receivedata;//这时候的SBUF是发送数据时的缓冲区
	while(!T1);/*判断如果该10位数据还在发送中,执行该死循环,如果
	           发送完成硬件将T1置1*/
	TI=0;//执行到该步就说明发送这一帧数据完成,软件置0
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SUR0608

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值