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

標題: 關于51單片機串口中斷,為什么中斷函數中還要判斷RI==1 [打印本頁]

作者: dcq218    時間: 2022-2-9 21:16
標題: 關于51單片機串口中斷,為什么中斷函數中還要判斷RI==1
初學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;//軟件置零
        }
}

作者: 188610329    時間: 2022-2-9 22:33
除了 RI==1  ,
TI == 1  也能進入中斷,所以,不僅僅要判斷RI,還要判斷TI。
當然,你也可以認為 RI == 0 的時候,是因為TI ==1 進入的中斷。
作者: huashanhui20    時間: 2022-2-9 23:23
是的,在你這個程序里面也許可以省略,但是串口中斷可以是接收中斷也可以是發送中斷,所以要進行判斷
作者: dazhige    時間: 2022-2-10 00:20
interrupt 4是串行的中斷號,但是包含了發送TI和接收RI串行中斷,因此進入到中斷里面不一定是由接收RI引起的,因此需要判斷下,不過一般發送用子程序,是主動過程,接收進中斷,但是需要簡單判斷下。
作者: lkc8210    時間: 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
    }
}
作者: dcq218    時間: 2022-2-10 17:07
lkc8210 發表于 2022-2-10 00:43
//串口中斷---進入中斷的條件就是TI/RI置1(串口發送或接收完成TI和RI中斷),并且需要軟件置零
/*------- ...

懂了,謝謝大佬
作者: dcq218    時間: 2022-2-10 17:08
188610329 發表于 2022-2-9 22:33
除了 RI==1  ,
TI == 1  也能進入中斷,所以,不僅僅要判斷RI,還要判斷TI。
當然,你也可以認為 RI ==  ...

好滴,謝謝大佬
作者: dcq218    時間: 2022-2-10 17:08
huashanhui20 發表于 2022-2-9 23:23
是的,在你這個程序里面也許可以省略,但是串口中斷可以是接收中斷也可以是發送中斷,所以要進行判斷

謝謝大佬




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1