久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1408|回復: 6
打印 上一主題 下一主題
收起左側

請教關于單片機串口程序調試的問題

[復制鏈接]
跳轉到指定樓層
樓主
程序小白請教大佬,串口發送指令只執行一次功能,后面發送的指令串口助手能正常發送接收,但功能沒出來,程序怎么修改?
主要是我想發送不同長度的指令,指令長度一樣的話程序是沒問題的

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

部分程序

部分程序

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

部分程序

部分程序
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

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

2)利用 dat[j] = dat[j+1]; 進行移位,多次反復比較指令,那么就不在乎 i 有沒有歸零了。
回復

使用道具 舉報

板凳
ID:963748 發表于 2021-11-12 14:56 | 只看該作者
188610329 發表于 2021-11-12 14:30
首先需要確認,你的 i 是全局變量,
然后,
你即使 sflag == FALSE 也要 i=0

利用 dat[j] = dat[j+1]; 具體怎么實現的呢?
回復

使用道具 舉報

地板
ID:624769 發表于 2021-11-12 15:43 | 只看該作者
用for 循環 假定你的 dat 長度為64
for(j=0, j<63,j++)    //循環63次
{
    dat[j] = dat[j+1];
}
然后再去對比指令。
回復

使用道具 舉報

5#
ID:963748 發表于 2021-11-12 15:52 | 只看該作者
188610329 發表于 2021-11-12 15:43
用for 循環 假定你的 dat 長度為64
for(j=0, j

好的謝謝
回復

使用道具 舉報

6#
ID:401564 發表于 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)                                                                                   //如果沒有查找到"數據:",指針返回值為空
                                 {  
                                 //指針返回值不為空,就表示串口接收到"數據:",處理.........
                                }               
                }
        //──────────────────────────────────────────────────────────────────────────────
}
回復

使用道具 舉報

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

學習了謝謝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美激情国产精品 | 日韩在线视频免费观看 | 国产精品久久久久久久久大全 | 九九久久久 | 91精品国产91久久久久久吃药 | 色婷婷影院 | 免费av直接看 | 美女天天操 | 你懂的在线视频播放 | 欧美综合在线视频 | 亚洲精品色| 精品日本久久久久久久久久 | 久久久久久久久91 | 在线一区视频 | 日韩av一区二区在线观看 | 亚洲精品高清视频在线观看 | 天天拍天天插 | 九九精品在线 | av一级久久| 欧美成人h版在线观看 | 国产精品成人国产乱一区 | 国产乱码高清区二区三区在线 | 亚洲一区中文字幕在线观看 | www.久久久久久久久久久久 | 欧美美女爱爱视频 | 成人在线视频网站 | 精品视频一区二区三区四区 | 亚洲二区在线观看 | 美女国产精品 | 久热精品在线观看视频 | 免费毛片网站在线观看 | 精品人伦一区二区三区蜜桃网站 | 欧美一级一 | 久久久精品国产 | 日本不卡在线视频 | 亚洲国产黄 | 欧美精品二区三区 | h漫在线观看 | 91久久综合亚洲鲁鲁五月天 | 国产在线精品一区二区三区 | 成人精品网 |