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

標題: 單片機新手入門,不太明白串口!幫忙解答,謝謝 [打印本頁]

作者: SXP210624    時間: 2020-3-6 20:39
標題: 單片機新手入門,不太明白串口!幫忙解答,謝謝
晶振:11.0592M  波特率:9600B/s  波特率發生器:定時器1(8位自動裝載)  芯片:STC89C52
串口通信中斷程序:void SerialPort_breakoff() interrupt 4{
    uchar date = 0;
    date = SBUF;
    //while(!RI)
    RI = 0;      //接收完成時,由軟件復位
    SBUF = date;
    while(!TI);
    TI = 0;      //發送完成時,由軟件復位
}
若要把“//while(!RI)”改成while(!RI)。為什么PC發送一個數據后,無法發送第二個數據;并且同時PC的接收端多次重復第一個數據?



作者: huang123456789    時間: 2020-3-6 23:26
不停在復位
作者: csmyldl    時間: 2020-3-7 01:49
這要看你的主程序是如何編寫的,一個不完整的程序他人是無法給你正確的答案的
作者: wulin    時間: 2020-3-7 08:23
在這里while(!RI)就是一贅句,必須去掉。因為只有RI=1才能使CPU響應串口接收中斷,不需要再次判斷。可在接收中斷中直接軟件復位RI=0;。
如果非得畫蛇添足加while(!RI)則必須加分號while(!RI);,否則RI永遠無法清0。
不加分號語句含義就成
        while(!RI)//此時RI=1,!RI就是為假,無循環條件,不執行花括號內容,直接跳過。
        {
                RI = 0;  
        }   
所以接收中斷結束后RI還是1,就會重復進入接收中斷并重復回傳第一個數據。
作者: zhy123654    時間: 2020-3-7 08:29
你那個括號后面少了個冒號,所以就和下面那一句組成了一個無限循環,
作者: 想進步要學習    時間: 2020-3-7 09:02
while(!RI)      
RI=0;
//當RI=1時,跳出while循環。沒分號的話,上面RI=0是在while內的指令。

while(!RI);
RI=0;
是不一樣的
作者: yyh_sd    時間: 2020-3-7 09:29
這樣加個冒號,你的循環寫錯了,和下一行作為一個循環了   
while(!RI);
    RI = 0;      //接收完成時,由軟件復位
作者: TTQ001    時間: 2020-3-7 09:49
軟件復位, RI = 0;
循環條件不滿足, while(!RI) 以及以下程序行不執行, 直接跳過
作者: haierzaifei11    時間: 2020-3-7 09:52
組成了一個無限循環
作者: xianming    時間: 2020-3-7 15:43
while(!RI) 后面少了一個分號,c語言分號表示空語句,如果沒有分號,就會是下面一句在循環




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