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

標題: 請教關于單片機串口程序調試的問題 [打印本頁]

作者: Zzwh    時間: 2021-11-12 11:05
標題: 請教關于單片機串口程序調試的問題
程序小白請教大佬,串口發送指令只執行一次功能,后面發送的指令串口助手能正常發送接收,但功能沒出來,程序怎么修改?
主要是我想發送不同長度的指令,指令長度一樣的話程序是沒問題的

51hei截圖_20211112105611.png (16.36 KB, 下載次數: 28)

部分程序

部分程序

51hei截圖_20211112105659.png (8.82 KB, 下載次數: 32)

部分程序

部分程序

作者: 188610329    時間: 2021-11-12 14:30
首先需要確認,你的 i 是全局變量,
然后,
你即使 sflag == FALSE 也要 i=0
不然,只要有一個錯誤指令,后面你的指令位置都不會從0開始,永遠指令都是錯誤的。

通常有兩個方案,
1)按照波特率的 105倍計時,超過后,判斷超時(表示所有指令都已經接受完畢),開始驗證指令,驗證完畢后,不管指令對不對,都把 i=0 準備接受下一個指令。

2)利用 dat[j] = dat[j+1]; 進行移位,多次反復比較指令,那么就不在乎 i 有沒有歸零了。
作者: Zzwh    時間: 2021-11-12 14:56
188610329 發表于 2021-11-12 14:30
首先需要確認,你的 i 是全局變量,
然后,
你即使 sflag == FALSE 也要 i=0

利用 dat[j] = dat[j+1]; 具體怎么實現的呢?
作者: 188610329    時間: 2021-11-12 15:43
用for 循環 假定你的 dat 長度為64
for(j=0, j<63,j++)    //循環63次
{
    dat[j] = dat[j+1];
}
然后再去對比指令。
作者: Zzwh    時間: 2021-11-12 15:52
188610329 發表于 2021-11-12 15:43
用for 循環 假定你的 dat 長度為64
for(j=0, j

好的謝謝
作者: Y_G_G    時間: 2021-11-12 16:53
//串口接收上位機,可以用strstr函數查找,比如,上位機發送  數據:255
//單片機可以先查找"數據:",查找到之后再處理后面的255,這樣的代碼可以簡單明了很多
void Uart2_Isr() interrupt 8                                                                         //串口2中斷
{
        char *p,Uart_S[15];
        static unsigned char RX_Count;
        unsigned a;
        if(S2CON&0x02)
                {
                   S2CON&=~0x02;                                                                                //清除中斷發送標示位
                   Busy=0;                                                                                                   //
                   return;
                }
        //────────────────────────────────────────────────────────────────────────────       
        if(S2CON&0x01)
                {
                   S2CON&=~0x01;                                                                                //清除中斷接收標示位                                                 
                        Uart_S[RX_Count]=S2BUF;
                        RX_Count++;
                        p=strstr(Uart_S,"數據:");                                                                //查找指令結束符"數據:"
                        if(NULL!=p)                                                                                   //如果沒有查找到"數據:",指針返回值為空
                                 {  
                                 //指針返回值不為空,就表示串口接收到"數據:",處理.........
                                }               
                }
        //──────────────────────────────────────────────────────────────────────────────
}

作者: Zzwh    時間: 2021-11-13 09:11
Y_G_G 發表于 2021-11-12 16:53
//串口接收上位機,可以用strstr函數查找,比如,上位機發送  數據:255
//單片機可以先查找"數據:",查找到之 ...

學習了謝謝




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