在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

在串口通訊程序中處理數(shù)據(jù)包

在串口通訊程序中處理數(shù)據(jù)包

更新時(shí)間:2022-04-26 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

在串口通訊程序中,經(jīng)常要收到數(shù)據(jù)包,常有網(wǎng)友問及如何從這些數(shù)據(jù)包中提取需要的數(shù)據(jù),如何處理校驗(yàn)等,在這篇文章里我舉兩個(gè)例子予以說明,程序說明為VC++6.0。關(guān)于串口編程建立程序的細(xì)節(jié),請參閱我主頁上的其它文章。同時(shí),此文也適于其它通訊程序中艱數(shù)據(jù)報(bào)文的處理。

    首先,應(yīng)該指出的是,所有這些處理均在串口事件處理函數(shù)oncommunication()中進(jìn)行。每當(dāng)串口緩沖區(qū)中有一個(gè)或一個(gè)以上字符時(shí)觸發(fā)串口通訊事件,該事件就驅(qū)動(調(diào)用)串口事件通訊處理函數(shù)oncommunication(),在這里就可以對接收到的數(shù)據(jù)進(jìn)行處理,提取需要的數(shù)據(jù)。

舉兩個(gè)例子,一個(gè)是較為簡單的位數(shù)據(jù)格式的處理,另一個(gè)是NMEA無線通訊格式的處理,最后回答一位網(wǎng)友提出的問題,大家也可以探討一下。

1.問題:

一個(gè)數(shù)據(jù)包,其串頭為一個(gè)字符,字符值為7EH(16進(jìn)制)'~',其后緊跟一字符‘E’,然后是數(shù)據(jù)串,串尾也為字符值為7EH的一個(gè)字符:
即 ~Exxxxxx...~ 如何處理這些數(shù)據(jù)?
我們?nèi)砸源谡{(diào)試助手源程序及其詳細(xì)編程過程之一 中的OnComm()處理為例:
void CSCommTestDlg::OnComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //設(shè)置BYTE數(shù)組 An 8-bit integerthat is not signed.
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值為2表示接收緩沖區(qū)內(nèi)有字符
{ ////////以下你可以根據(jù)自己的通信協(xié)議加入處理代碼
variant_inp=m_ctrlComm.GetInput(); //讀緩沖區(qū)
safearray_inp=variant_inp; //VARIANT型變量轉(zhuǎn)換為ColeSafeArray型變量
len=safearray_inp.GetOneDimSize(); //得到有效數(shù)據(jù)長度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//轉(zhuǎn)換為BYTE型數(shù)組
for(k=0;k<len;k++) //將數(shù)組轉(zhuǎn)換為Cstring型變量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //將字符送入臨時(shí)變量strtemp存放
m_strRXData+=strtemp; //加入接收編輯框?qū)?yīng)字符串,在這兒,編輯框不是必須的,可做相應(yīng)處理
char ch=(char)bt;
if(ch=='E')
{
//在此處設(shè)置一個(gè)可以接收數(shù)據(jù)的全局標(biāo)志,說明接收到數(shù)據(jù)前的‘E’標(biāo)志了,下一步可以讀數(shù)據(jù)了,同時(shí)將m_strRXData清空
        flag=2;
         m_strRXData.Empty(); //下一次接收的便為有用的數(shù)據(jù)
}
if(ch==0x7e)
{
      flag=1; //下面可以提取數(shù)據(jù)了
}
if(flag==1) //標(biāo)志為1,
{
     ...//提取數(shù)據(jù)
        flag=0; //提取完后,置標(biāo)志為0
}

}
}
//UpdateData(FALSE); //更新編輯框內(nèi)容
}

2 NMEA無線通訊格式的處理

2.1 NMEA-0183報(bào)文格式

字符串(ASCII字符)格式如下:
$XXXX,XX,XX,XX,……*hh<CR><LF>
$:串頭
XXXX: 串頭
XX:數(shù)據(jù)字段,字母或數(shù)字
XX:數(shù)據(jù)字段,字母或數(shù)字
XX:數(shù)據(jù)字段,字母或數(shù)字
,:逗號
……
*:星號,串尾
hh:$與*之間所有字符代碼的校驗(yàn)和,(注意:校驗(yàn)和h為半Byte校驗(yàn),*后第1個(gè)h表示高4位校驗(yàn)和,第2個(gè)h表示低4位校驗(yàn)和。得到校驗(yàn)值后,再轉(zhuǎn)換成ASCII字符。)
<CR>:0DH,回車控制符
<LF>:0AH,換行控制符

2.2 校驗(yàn)處理

由于數(shù)據(jù)是動態(tài)接收,所以數(shù)據(jù)的處理也是動態(tài)進(jìn)行,盡管有時(shí)會收到幾個(gè)字符才觸發(fā)一個(gè)串口事件,但字符的接收是一個(gè)一個(gè)接收的,因此就可以在程序中先判斷串頭$是否到達(dá),若串頭到達(dá),就可以開始計(jì)算校驗(yàn),直至串尾*到達(dá),這時(shí)*號后面的兩個(gè)字符就是校驗(yàn)碼,收到這兩個(gè)校驗(yàn)字符,就可以與自己計(jì)算的校驗(yàn)值比較,若不正確,就報(bào)錯,并繼續(xù)處理下面的數(shù)據(jù),若正確,則處理接收的字符,提取需要的數(shù)據(jù)。


2.3 程序
CString m_strReceived;
CString m_strChecksum;
int flag;
char ch為每次收到的字符


m_strReceived += (char)ch;
switch(ch)
{
case '$':
checksum=0; //開始計(jì)算CheckSum
flag=0;
break;
case '*':
flag=2;
c2=checksum & 0x0f; c1=((checksum >> 4) & 0x0f);
if (c1 < 10) c1+= '0'; else c1 += 'A' - 10;
if (c2 < 10) c2+= '0'; else c2 += 'A' - 10;
break;
case CR:
break;
case LF:
m_strReceived[port-1].Empty();
break;
default:
if(flag>0)
{
m_strChecksum += ch;
if(flag==1)
{
strCheck=strCheck+c1+c2;
if(strCheck!=m_strChecksum)
{
m_strReceived.Empty();
}
else
{
strInstruction=m_strReceived[port-1].Left(6);
if(strInstruction=="$QGOKU") //如果串頭正確
{
char *temp=(char*)((LPCTSTR)m_strReceived);//轉(zhuǎn)換

int speed=(atoi(temp+7));// 提取int 型數(shù)據(jù)
char splevel=*(temp+25); //提取 char 型數(shù)據(jù)

}

}
m_strChecksum.Empty();
}
flag--;
}
else
checksum=checksum^ch;
break;
}



3 網(wǎng)友的問題

另外,我回答了一位網(wǎng)友的問題,大家也可以探討一下:
問題如下3:

我用你的串口程序收來的十六進(jìn)制數(shù)據(jù)是這個(gè)樣的:
00 10 10 C0 00 F0 F0 AB AC AD
我現(xiàn)在要將高四位取出來,也就是
011C0FFAAA(這點(diǎn)我不會,但我用Left實(shí)現(xiàn)了,可得到的是字符,不是我要的數(shù)值)
我只要011C0FF.
我要把011C0FF進(jìn)行如下的處理
011轉(zhuǎn)化成十進(jìn)制
C不變
0FF也變成十進(jìn)制
后顯示,成 17 C 255

答:右移得到011C0FF后,可將其放在一個(gè)字符型變量CString m_strReceive中:
然后將其轉(zhuǎn)換:
char *temp=(char*)((LPCTSTR)m_strReceive;

char tbuf[6]; //temporary viable
tbuf[0]=temp[1]; tbuf[1]=temp[2]; tbuf[2]=temp[3]; tbuf[3]=0; //011 最后為0表示結(jié)束
int data1=atoi(tbuf);
char chdata2==temp[4]; //C
tbuf[0]=temp[5]; tbuf[1]=temp[6]; tbuf[2]=temp[7]; tbuf[3]=0;
int data3=atoi(tbuf); //0FF

以上data1,chdata2,data3即為你要的數(shù)據(jù)

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 无码中文字幕色专区| 男人添女人荫蒂免费视频| 精品一区二区三区无码视频| 中文字幕永久有效| 日韩免费毛片视频| 国产一区二区视频播放| 欧美午夜性视频| 岛国大片在线播放| 噜噜噜久久亚洲精品国产品麻豆| 黄色三级中文字幕| 国产日韩av网站| 少妇高潮喷水在线观看| 人妻熟女一二三区夜夜爱| 波多野结衣乳巨码无在线| 91视频 -- 69xx| 成人性视频欧美一区二区三区| 男人天堂网视频| 国产精品一区二区小说| 久久久久久久久久久久久久久国产 | 欧美国产日韩激情| 国产69精品久久久久久久| 欧美 日韩 国产一区| 午夜免费一区二区| 999久久久精品视频| 久久久久福利视频| 3d动漫一区二区三区| 免费激情视频在线观看| 99九九精品视频| www.国产在线视频| 激情综合网俺也去| 日本不卡一区二区三区四区| 久久av综合网| 欧美大尺度做爰床戏| 99久久99久久精品| av视屏在线播放| 一二三四中文字幕| 日韩av在线中文| 全黄性性激高免费视频| 亚洲va在线va天堂va偷拍| 日韩一级片免费视频| 怡红院亚洲色图| 成人小视频在线看| 久久久久久久久久伊人| 日韩av手机版| 日韩精品xxxx| 青草全福视在线| 999久久久精品视频| 人妻少妇被粗大爽9797pw| 99久re热视频精品98| 国内自拍视频一区| 亚洲美免无码中文字幕在线| 亚洲36d大奶网| 日本一极黄色片| 亚洲中文字幕无码av永久| 色撸撸在线观看| 亚洲xxx在线观看| 日本a√在线观看| 国产高清精品在线观看| 六月婷婷激情综合| 亚洲图片 自拍偷拍| 激情视频免费网站| 亚州精品一二三区| 日本va中文字幕| 无码人妻h动漫| 国产91对白刺激露脸在线观看| www.日本在线视频| 可以看毛片的网址| 精品国产av无码一区二区三区| 日本精品免费视频| av动漫免费观看| 天堂av在线中文| 六月婷婷激情网| www.日本三级| 欧洲黄色一级视频| 久久综合久久色| 伊人国产在线视频| 在线免费黄色网| 激情成人开心网| 国产精品宾馆在线精品酒店| 69堂免费视频| 日韩一区二区三区不卡视频| 亚洲黄色av网址| 中文 日韩 欧美| 欧美黑人在线观看| 国模无码视频一区二区三区| 欧美 丝袜 自拍 制服 另类| 国产a级一级片| 不用播放器的免费av| 午夜啪啪福利视频| 日本不卡在线观看视频| 色天使在线观看| 欧美黄网在线观看| 粉嫩虎白女毛片人体| 91欧美一区二区三区| 国产免费黄色小视频| 伊人网在线综合| 97碰在线视频| 好男人www社区| 国产精品一二三在线观看| 99热自拍偷拍| 99亚洲精品视频| 国产熟女高潮视频| 中文字幕日韩精品无码内射| 少妇高清精品毛片在线视频| 六月婷婷激情网| 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 国产一级黄色录像片| 18岁视频在线观看| 国产欧美精品aaaaaa片| 国产成人黄色网址| 波多野结衣之无限发射| 一区二区三区日韩视频| 国产一级片黄色| 美脚丝袜脚交一区二区| 亚洲精品在线网址| 不卡影院一区二区| 国产精品久久久久7777| 国产在线观看中文字幕| 99精品免费在线观看| 2018国产在线| 欧美性猛交内射兽交老熟妇| 成人av毛片在线观看| 老头吃奶性行交视频| 成人免费毛片在线观看| 一二三在线视频| 亚洲综合激情五月| 最新免费av网址| 国产美女18xxxx免费视频| 毛片av免费在线观看| 欧美韩国日本在线| 欧洲黄色一级视频| 凹凸国产熟女精品视频| 人人妻人人添人人爽欧美一区| 日韩视频 中文字幕| 国产专区在线视频| 成年人视频网站免费| 男人天堂手机在线视频| 精品国产av无码一区二区三区| 欧美日韩dvd| 免费国产黄色网址| 国模吧无码一区二区三区| 国产二区视频在线播放| 毛片一区二区三区四区| 人妻无码视频一区二区三区 | 五月天视频在线观看| 久久婷婷中文字幕| 9999在线观看| 亚洲精品无码国产| 日韩中文字幕免费在线| www.com黄色片| 欧美少妇一区二区三区| 18禁裸男晨勃露j毛免费观看| 日本人妻伦在线中文字幕| 日韩国产一级片| www.日本xxxx| 无码人妻精品一区二区三区99v| 精品人妻大屁股白浆无码| 男人揉女人奶房视频60分| 制服丝袜综合网| 黄色网在线视频| 亚洲精品乱码久久久久久自慰| 在线观看av网页| 久久艹国产精品| 亚洲人视频在线| 蜜臀av色欲a片无码精品一区 | av不卡在线免费观看| 久久国产亚洲精品无码| 手机av在线网站| 狠狠干 狠狠操| youjizz.com亚洲| 色综合av综合无码综合网站| 日韩视频在线免费播放| www.四虎成人| 天堂8在线天堂资源bt| 艹b视频在线观看| 欧美不卡在线播放| 久久视频免费在线| 成人亚洲精品777777大片| 日本欧美黄色片| 精品一区二区成人免费视频 | 激情五月俺来也| 欧美日韩成人免费视频| av电影一区二区三区| 黄色在线视频网| 白嫩少妇丰满一区二区| 成人在线播放网址| 欧美日韩dvd| 国产av不卡一区二区| 91精品999| 国产一级做a爰片久久| 激情综合在线观看| 日本www在线播放| 欧美成人三级在线视频| 黄网站色视频免费观看| 91免费网站视频| 男人草女人视频| 免费cad大片在线观看| 老司机午夜网站| 人人妻人人澡人人爽欧美一区双| 最新黄色av网站|