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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4653|回復: 7
收起左側

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

[復制鏈接]
ID:700420 發表于 2020-4-9 22:45 | 顯示全部樓層 |閱讀模式
比如:SBUF中得到的數據是“TZF”,怎么才能分開保存,如A="T",B="Z" ,C="F".
請教各位好哥哥,謝謝!
回復

使用道具 舉報

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”這種字符串,所以存數組啊
回復

使用道具 舉報

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位,一次本來就只能發送一個字符的,所以,收到一個就保存一個,就分開了嘛。
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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 單片機教程網

快速回復 返回頂部 返回列表