找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

小白求助 關(guān)于51單片機串口數(shù)據(jù)處理

查看數(shù): 1887 | 評論數(shù): 5 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時間: 2023-6-7 17:23

正文摘要:

判斷從串口接收到的兩個字節(jié),即4位16進制的數(shù)據(jù),如果第一個字節(jié)對了led1亮然后判斷第二個,第二個字節(jié)對了led3亮。 但是令我很好奇的是某些數(shù)據(jù)是對的,另一些卻不能正確判斷 如fafb, e1d1 ,等,燈可以正常亮起 ...

回復(fù)

ID:1082596 發(fā)表于 2023-6-7 21:54
劉宇杰找實訓 發(fā)表于 2023-6-7 21:04
串口中斷函數(shù)接收第一個字節(jié)之后,開啟定時器計數(shù)。接受下一個字節(jié)的時候清空定時器計數(shù)。如此,當沒有數(shù)據(jù) ...

謝謝解答
ID:1082659 發(fā)表于 2023-6-7 21:04
串口中斷函數(shù)接收第一個字節(jié)之后,開啟定時器計數(shù)。接受下一個字節(jié)的時候清空定時器計數(shù)。如此,當沒有數(shù)據(jù)接收后,計時器無法清零,當計時器計數(shù)超過設(shè)定的數(shù)值之后,觸發(fā)定時器溢出中斷,此時數(shù)據(jù)即接收完畢
ID:1082596 發(fā)表于 2023-6-7 20:06
xuyaqi 發(fā)表于 2023-6-7 18:27
在串口中斷里應(yīng)該只處理數(shù)據(jù)接收,LED處理放在main循環(huán)里,不要因為LED處理影響數(shù)據(jù)接收。

判斷和LED處理已放進主循環(huán),并且僅判斷一個字節(jié)。
仍只有部分數(shù)據(jù)led1可正常亮起,如ff.fb等
請問這是什么原因呢?我該如何解決嘞。求大佬指點
這是修改后的程序
void main()
{       
        UART_init(); //串口初始化
        while(1)
        {  
                if(num1==0x5A)
                {   led1=0;  //第一個字節(jié)對了之后led1亮
                }
                else led1=1;
       
        }       
}

void UART() interrupt 4
{         
        while(!RI);        //檢測是否接收完成
                RI = 0;       
                num1 = SBUF;
                       
}
ID:94031 發(fā)表于 2023-6-7 18:27
在串口中斷里應(yīng)該只處理數(shù)據(jù)接收,LED處理放在main循環(huán)里,不要因為LED處理影響數(shù)據(jù)接收。

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表