单片机C51问题:在中断子程序中产生中断会怎么样,如下描述:

voidUsart()interrupt4{unsignedcharreceiveData;receiveData=SBUF;//出去接收到的数据RI=0;//清除接收中... void Usart() interrupt 4
{
unsigned char receiveData;

receiveData=SBUF;//出去接收到的数据
RI = 0;//清除接收中断标志位
SBUF=receiveData;//将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
}
上面是串口中断子程序,当接收到数据时,RI=1,进入该中断子程序,然后继续执行,当执行完SBUF=receiveData; 即发送完一帧数据,TI被置1,再次进入串口中断子程序,不是又再次回到该子程序的开始了,这样无穷的循环下去岂不是死循环?但是实际调试运行是可行的,怎么回事
展开
 我来答
沿悬崖行走
2016-04-26
知道答主
回答量:10
采纳率:0%
帮助的人:3.3万
展开全部

当出现以下任一情况,中断响应受阻,也就是不会进入中断程序

1)同级或高级的中断服务正在进行;

2)当前的机器周期还不是当前指令的最后一个周期,指令执行完之前,不会响应任何中断请求;

3)正在执行RETI或对IE、IP进行读写操作,至少要执行一条其它指令才会响应;

    在每个机器周期的s5p2期间,cpu对中断源依次采样,若遇到上述情况,会把中断请求锁存在各自的中断标志位中,等下一个机器周期再按顺序查询。也就是同级中断不会被打断,在这里TI已经被清零,这个中断退出后不会再响应了

    还有点小问题,中断程序一开始应该执行一个if(RI)条件判断,要不然可能会读入垃圾数据

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式