单片机/MCUwilliam hill官网
直播中

kmno4

12年用户 959经验值
私信 关注
[问答]

关于51单片机串口中断的问题

各位大佬好,我是新人
最近学51单片机有一个问题一直困惑着我,就是关于串口中断函数何时进入的问题,如下面代码

  • void Usart() interrupt 4
  • {
  •         u8 receiveData;

  •         receiveData=SBUF;
  •         RI = 0;
  •         SBUF=receiveData;
  •         while(!ti);
  •         TI=0;
  • }

[color=#336699 !important]复制代码

上面的串口中断函数应该是在RI或TI置一的时候进入,上面的中断函数初次进入是RI=1,但是运行到SBUF=receiveData的时候,此时TI应该置0,等待TI置1,那假如在这个程序中,TI在中断程序中变成1,那中断程序是直接运行到末尾还是重新从头运行,毕竟TI=1触发了中断,应该重头再次运行。

回帖(1)

刘埃生

2023-10-8 14:50:02
只能说你这个代码不严谨,一般来说串口中断代码应该先判断是RI的还是TI触发的中断,然后分别进行接收或发送,处理完成后要清相应的中断标志,如果在中断中产生了新的中断,并且已经清除了中断标志,那退出中断后,不会再入这次新产生的中断了。 
举报

更多回帖

发帖
×
20
完善资料,
赚取积分