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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機串口接收到的字符串怎么分開保存?新人求教!

[復制鏈接]
跳轉到指定樓層
樓主
ID:700420 發表于 2020-4-9 22:45 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
比如:SBUF中得到的數據是“TZF”,怎么才能分開保存,如A="T",B="Z" ,C="F".
請教各位好哥哥,謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:213173 發表于 2020-4-10 06:39 | 只看該作者
設置一個緩存數組和串口接收完成標志
unsigned char rec_buf[3];
bit flag=0;

void UARTInterrupt() interrupt 4
{
        static unsigned char num=0;        //靜態變量
        RI=0;                                                //接收中斷請求標志位清0
        rec_buf[num]=SBUF;                        //保存SBUF接收到的數據
        if(rec_buf[0]=='T')         //驗證數據頭正確繼續接收后續數據
        {                           //否則被下一個數據覆蓋并再次驗證
                num++;
                if(num>=3)                                //字符串長度
                {
                        flag=1;                                //接收完成標志置1
                        num=0;
                }
        }
}

再在主函數中驗證全部數據是否正確

        if(flag==1)
        {
                flag=0;
                if(rec_buf[0]=='T' && rec_buf[1]=='Z' && rec_buf[2]=='F')
                {
                        //OK,執行任務                       
                        for(i=0;i<3;i++)//緩存清0,為下次接收準備
                                rec_buf[i]=0;
                }
                else
                {
                        //ERROR 發送重傳數據請求
                        for(i=0;i<3;i++)//緩存清0,為下次接收準備
                                rec_buf[i]=0;
                }
        }
回復

使用道具 舉報

板凳
ID:65956 發表于 2020-4-10 08:21 | 只看該作者
有兩種方法,一是先定義一組緩存,接收時先一個個存入緩存中,接收完畢后再去取緩存一個個判斷是否是你接收的數據;二是接收一個判斷一個,但這樣是在中斷里執行的,要用最短的時間處理,否則容易產生沖突,但這個效率最快;
回復

使用道具 舉報

地板
ID:470332 發表于 2020-4-10 08:27 | 只看該作者
SBUF一次只能存一個字節,不存在“TZF”這種字符串,所以存數組啊
回復

使用道具 舉報

5#
ID:164602 發表于 2020-4-10 08:34 | 只看該作者
我是這樣做的:
                        k=SBUF;
                        if (k!='\n')
                        {
                                DD[i]=k;
                                i++;
                                if (i>9)
                                {
                                        i=0;
                                }
                        }
第一:我這段程序,是為了接收不確定長度的字符串而編寫的。串口發過來的字符串最后一定以回車為結束符,沒有檢測到回車符,則保存到數組變量中,如果檢測到回車符,則不再接收字符串,而去執行相關控制操作。
第二:如果你串口發送的字符串長度是固定的,就可以不檢測字符串的結束符,一個循環就可以保存依次的字符了。
第三:個人認為,如果你使用的是51單片機,那么你帖子中說的“比如:SBUF中得到的數據是“TZF””,是不對的。51單片機(入門級的哈,你玩很高級的不在此列)SBUF只是8位,一次本來就只能發送一個字符的,所以,收到一個就保存一個,就分開了嘛。
回復

使用道具 舉報

6#
ID:282850 發表于 2020-4-10 09:08 | 只看該作者
SBUF 每次傳輸一個字節+檢驗位,所以是一個字一個字傳送,不存在分開的說法。TZF是三個char,收數據時直接分別保存就行了。
回復

使用道具 舉報

7#
ID:477828 發表于 2020-4-10 09:25 | 只看該作者
數據用16進制。加一個數據頭和尾。判斷到數據頭后,開始接收數據到字符數組里面。判斷到數據尾就拿到全部數據了。想怎么操作就看你了!
回復

使用道具 舉報

8#
ID:675145 發表于 2020-4-29 09:28 | 只看該作者
wulin 發表于 2020-4-10 06:39
設置一個緩存數組和串口接收完成標志
unsigned char rec_buf[3];
bit flag=0;

老哥   我也是你這種接收方式,但是現在需要接收不定長度的數據,而且尾部數據不一樣,要怎么判斷什么時候接收完
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产视频一视频二 | 一区二区国产精品 | 欧美一区免费 | 精品一区二区三区免费视频 | 日本久久精品 | 成人午夜精品 | 欧美在线视频一区 | 国产成人网 | 久久久久久久久久久久久91 | 国产视频亚洲视频 | 欧美天堂 | 亚洲啪啪 | 日韩欧美精品一区 | 夜夜爽99久久国产综合精品女不卡 | 看黄在线 | 毛片在线免费 | 亚洲一区二区三区视频在线 | 欧美一区二区三区久久精品视 | 中文字幕亚洲视频 | 日本电影韩国电影免费观看 | av网站免费观看 | 免费国产成人av | 黄色三级免费网站 | 神马久久av | 久久99视频| 亚洲成人一区 | 精品视频一区二区三区 | 精久久久 | 欧美在线a | 中文字幕亚洲一区二区va在线 | 久久久精品| 久久国产精品一区二区三区 | 欧洲精品在线观看 | 国产精品永久免费 | 欧美黑人一级爽快片淫片高清 | 久草网址| 你懂的在线视频播放 | 男人的天堂久久 | 色.com | 午夜视频免费网站 | 男人的天堂在线视频 |