• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

关于51单片机串口中断的问题 RI TI寄存器设置

1209a6b76f22a509 2020-07-07 浏览量:1739
各位大佬好,我是新人
最近学51单片机有一个问题一直困惑着我,就是关于串口中断函数何时进入的问题,如下面代码
  1. void Usart() interrupt 4
  2. {
  3.         u8 receiveData;

  4.         receiveData=SBUF;
  5.         RI = 0;
  6.         SBUF=receiveData;
  7.         while(!TI); 
  8.         TI=0; 
  9. }
复制代码
上面的串口中断函数应该是在RI或TI置一的时候进入,上面的中断函数初次进入是RI=1,但是运行到SBUF=receiveData的时候,此时TI应该置0,等待TI置1,那假如在这个程序中,TI在中断程序中变成1,那中断程序是直接运行到末尾还是重新从头运行,毕竟TI=1触发了中断,应该重头再次运行。
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 只能说你这个代码不严谨,一般来说串口中断代码应该先判断是RI的还是TI触发的中断,然后分别进行接收或发送,处理完成后要清相应的中断标志,如果在中断中产生了新的中断,并且已经清除了中断标志,那退出中断后,不会再入这次新产生的中断了。
    • 发布于 2020-07-09
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:2
  • 这里涉及到了中断的嵌套了,中断嵌套时,会根据中断的优先级来判断,先运行高优先级的,运行完了再回到之间的中断函数中运行的。
    • 发布于2020-07-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 你在中断里面弄个while判断,这里有问题的
    • 发布于2020-07-22
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

关于51单片机串口中断的问题 RI TI寄存器设置