找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3107|回复: 4
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
ID:798835 发表于 2020-7-7 09:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大佬好,我是新人
最近学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触发了中断,应该重头再次运行。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:739545 发表于 2020-7-7 16:03 | 只看该作者
当TI=0的时候一直在while(!Ti中循环),当TI接受结束或者置1的时候,直接向下运行,把TI重新复位TI=1,在中断中运行的时候不会二次触发中断,除非有其他优先级更高的中断进行触发。
回复

使用道具 举报

板凳
ID:213173 发表于 2020-7-7 19:28 | 只看该作者
//收到上位机一个字节,MCU硬件自动置RI=1,产生中断请求。
void Usart() interrupt 4 //CPU响应中断请求进入中断
{
        u8 receiveData;       
        receiveData=SBUF;//读取SBUF寄存器收到的数据
        RI = 0;                     //软件清RI=0
        SBUF=receiveData;//向上位机发送收到的数据
        while(!TI);      //等待发送完成        硬件置TI=1
        TI=0;                          //软件清TI=0
}//收、发SBUF寄存器是相同地址的两个物理寄存器
回复

使用道具 举报

地板
ID:797834 发表于 2020-7-7 21:58 | 只看该作者
void Usart() interrupt 4
{
        u8 receiveData;

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

哥,你是电子194还是电子192的,大佬!期末指导指导小弟!哥!!!
回复

使用道具 举报

5#
ID:795361 发表于 2020-7-8 11:45 来自手机 | 只看该作者
这个肯定从进入中断开始程序执行,这个是接受到数据之后再发送接收到的数据程序
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表