找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2237|回复: 7
收起左侧

关于51单片机串口中断,为什么中断函数中还要判断RI==1

[复制链接]
ID:1004408 发表于 2022-2-9 21:16 | 显示全部楼层 |阅读模式
初学51,学到串口通信,了解了串口中断进入中断程序是接收到数据RI置1,但是既然只有RI置1才能进入中断,为什么中断函数中还要判断RI==1
既然存在,必有其合理之处,烦请各位大佬解释一下啊!谢谢!

单片机源程序如下:
#include <REGX52.H>
#include <intrins.h>

void UART_Init()
{
        SCON=0x50;//8位
        PCON &= 0x7F;//
        TMOD &= 0x0F;//高四位清零
        TMOD |= 0x20;//高四位赋值
        TH1=0xFD;
        TL1=0xFD;
        ET1=0;//禁止定时器1中断
        TR1=1;//开启计时
        
        EA=1;
        ES=1;//串口中断允许
        /*因为不知道什么时候会收到信息,但也不能一直等待
        所以就用了串口中断!
        */
}

void main()
{
        UART_Init();
        while(1)
        {
               
        }
}
void js() interrupt 4//串口中断---进入中断的条件就是TI/RI置1(串口发送或接收完成TI和RI中断),并且需要软件置零
{
//        P2=0x00;       //此时不管你发送什么,他都会亮,因为只要接收到信号,他就会进入中断
        if(RI==1)       //RI---receive就是收到数据
                {              
                P2=~SBUF;
                RI=0;//软件置零
        }
}
回复

使用道具 举报

ID:624769 发表于 2022-2-9 22:33 | 显示全部楼层
除了 RI==1  ,
TI == 1  也能进入中断,所以,不仅仅要判断RI,还要判断TI。
当然,你也可以认为 RI == 0 的时候,是因为TI ==1 进入的中断。
回复

使用道具 举报

ID:878061 发表于 2022-2-9 23:23 | 显示全部楼层
是的,在你这个程序里面也许可以省略,但是串口中断可以是接收中断也可以是发送中断,所以要进行判断
回复

使用道具 举报

ID:514254 发表于 2022-2-10 00:20 | 显示全部楼层
interrupt 4是串行的中断号,但是包含了发送TI和接收RI串行中断,因此进入到中断里面不一定是由接收RI引起的,因此需要判断下,不过一般发送用子程序,是主动过程,接收进中断,但是需要简单判断下。
回复

使用道具 举报

ID:161164 发表于 2022-2-10 00:43 | 显示全部楼层
//串口中断---进入中断的条件就是TI/RI置1(串口发送或接收完成TI和RI中断),并且需要软件置零
/*----------------------------
STC-ISP 范例
----------------------------*/
void Uart_Isr() interrupt 4
{
    if (RI)
    {
        RI = 0;             //Clear receive interrupt flag
        P0 = SBUF;          //P0 show UART data
    }
    if (TI)
    {
        TI = 0;             //Clear transmit interrupt flag
        busy = 0;           //Clear transmit busy flag
    }
}
回复

使用道具 举报

ID:1004408 发表于 2022-2-10 17:07 | 显示全部楼层
lkc8210 发表于 2022-2-10 00:43
//串口中断---进入中断的条件就是TI/RI置1(串口发送或接收完成TI和RI中断),并且需要软件置零
/*------- ...

懂了,谢谢大佬
回复

使用道具 举报

ID:1004408 发表于 2022-2-10 17:08 | 显示全部楼层
188610329 发表于 2022-2-9 22:33
除了 RI==1  ,
TI == 1  也能进入中断,所以,不仅仅要判断RI,还要判断TI。
当然,你也可以认为 RI ==  ...

好滴,谢谢大佬
回复

使用道具 举报

ID:1004408 发表于 2022-2-10 17:08 | 显示全部楼层
huashanhui20 发表于 2022-2-9 23:23
是的,在你这个程序里面也许可以省略,但是串口中断可以是接收中断也可以是发送中断,所以要进行判断

谢谢大佬
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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