欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3237|回復: 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;//軟件置零
        }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
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引起的,因此需要判斷下,不過一般發送用子程序,是主動過程,接收進中斷,但是需要簡單判斷下。
回復

使用道具 舉報

5#
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
    }
}
回復

使用道具 舉報

6#
ID:1004408 發表于 2022-2-10 17:07 | 只看該作者
lkc8210 發表于 2022-2-10 00:43
//串口中斷---進入中斷的條件就是TI/RI置1(串口發送或接收完成TI和RI中斷),并且需要軟件置零
/*------- ...

懂了,謝謝大佬
回復

使用道具 舉報

7#
ID:1004408 發表于 2022-2-10 17:08 | 只看該作者
188610329 發表于 2022-2-9 22:33
除了 RI==1  ,
TI == 1  也能進入中斷,所以,不僅僅要判斷RI,還要判斷TI。
當然,你也可以認為 RI ==  ...

好滴,謝謝大佬
回復

使用道具 舉報

8#
ID:1004408 發表于 2022-2-10 17:08 | 只看該作者
huashanhui20 發表于 2022-2-9 23:23
是的,在你這個程序里面也許可以省略,但是串口中斷可以是接收中斷也可以是發送中斷,所以要進行判斷

謝謝大佬
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表