在线看毛片视频-国产免费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>
  • 乱子伦一区二区| 日本久久久精品视频| 亚洲高清在线免费观看| 免费观看国产精品视频| 欧美黄网在线观看| 日本国产中文字幕| 97久久国产亚洲精品超碰热| 日本一区二区免费高清视频| 亚洲va在线va天堂va偷拍| 久久婷五月综合| 天天插天天操天天射| 国产在线青青草| 欧美极品欧美精品欧美图片| 欧美精品第三页| 蜜臀视频一区二区三区| 国产三级三级看三级| 成人亚洲免费视频| 欧美少妇在线观看| 免费av手机在线观看| 日本三区在线观看| 亚洲这里只有精品| 久久久国产精华液999999 | 欧美精品一区二区三区免费播放| 岛国大片在线播放| 黄色片视频在线播放| 美女网站免费观看视频| 亚洲一级片av| 青青青青草视频| 亚洲少妇久久久| 欧美美女黄色网| 免费日韩中文字幕| 最新中文字幕久久| 尤物av无码色av无码| 成年网站在线播放| 日本国产中文字幕| 男人搞女人网站| 国产成人在线小视频| 亚洲人辣妹窥探嘘嘘| 中文字幕精品在线播放| 国内自拍在线观看| 欧美亚洲视频一区| 国产成人黄色片| 无码毛片aaa在线| 在线免费视频a| 91传媒免费视频| 中文字幕22页| 国产免费黄色av| 日本黄网站色大片免费观看| 精品视频无码一区二区三区| 欧美a级免费视频| 国产高清999| 孩娇小videos精品| 国产精品亚洲二区在线观看| 欧美视频在线第一页| 欧美国产在线一区| 欧美在线aaa| 国产精品久久久毛片| 日韩av一二三四| 中文字幕日本最新乱码视频| 国产日本在线播放| 波多野结衣 作品| 好吊色这里只有精品| 亚洲欧美日本一区二区三区| 天天操天天爽天天射| 国产aaa一级片| 国产成人精品视频ⅴa片软件竹菊| 精品国产av无码一区二区三区| 激情久久综合网| 国产精品久久久久久久av福利| 成人免费毛片网| 亚洲成熟丰满熟妇高潮xxxxx| 国产第一页视频| 日本欧美视频在线观看| 在线观看中文av| 久久精品国产露脸对白| 国产精品第12页| 无码日韩人妻精品久久蜜桃| 欧美在线观看www| 97超碰在线视| 久久福利一区二区| 四虎精品欧美一区二区免费| 成人手机在线播放| 日韩不卡一二区| 精品国产无码在线| 两性午夜免费视频| 激情视频小说图片| 黄色片免费在线观看视频| av免费网站观看| 看看黄色一级片| 老汉色影院首页| www.xxx麻豆| 国产美女主播在线播放| 女人帮男人橹视频播放| 久久精品国产sm调教网站演员| 免费高清一区二区三区| 免费久久久久久| 99中文字幕在线观看| www.成年人视频| 免费高清在线观看免费| 国产一级不卡毛片| 手机在线国产视频| 神马午夜伦理影院| 男人天堂av片| 日本女优爱爱视频| 极品粉嫩美女露脸啪啪| 7777在线视频| 欧美三级一级片| 自拍偷拍一区二区三区四区| 日韩亚洲在线视频| 人妻av无码专区| 天堂社区在线视频| 日本黄大片在线观看| 国产av熟女一区二区三区| 亚洲啊啊啊啊啊| 美女黄色片视频| 国产aaa免费视频| 国产又大又黄又粗又爽| 日本a级片在线播放| 一区二区三区韩国| 亚洲 高清 成人 动漫| 亚洲精品国产久| 国产无套内射久久久国产| 在线免费看v片| 成年人免费大片| 国产一区 在线播放| 鲁一鲁一鲁一鲁一色| 异国色恋浪漫潭| 亚洲乱码国产一区三区| 免费观看美女裸体网站| 亚洲一级片免费观看| 日韩中文字幕组| 久久视频免费在线| 天天在线免费视频| 亚洲国产成人va在线观看麻豆| 黄色av网址在线播放| 亚洲免费视频播放| а 天堂 在线| 在线不卡一区二区三区| 在线视频观看91| av在线无限看| 熟女性饥渴一区二区三区| 少妇高潮毛片色欲ava片| 日本中文字幕一级片| 久久久精品高清| 久久久成人精品一区二区三区 | 无需播放器的av| 日韩一级在线免费观看| 无罩大乳的熟妇正在播放| 欧美大黑帍在线播放| 视频区 图片区 小说区| 91热视频在线观看| 在线观看av日韩| 另类小说色综合| 奇米影音第四色| 久久久久久蜜桃一区二区| 欧美日韩在线成人| 亚洲免费看av| 欧美女同在线观看| 一级日本黄色片| 国产夫妻自拍一区| 人妻av中文系列| 成人亚洲视频在线观看| 日日干日日操日日射| 国产av不卡一区二区| 91热视频在线观看| 久久久999免费视频| 日韩中文字幕二区| 福利视频999| www.avtt| 五月天婷婷激情视频| 国产一级片91| aa在线免费观看| 成人黄色一级大片| 国产美女主播在线播放| 情侣黄网站免费看| 欧美成人乱码一二三四区免费| 国产911在线观看| 国产3p露脸普通话对白| 国产九九在线观看| 欧美黑人在线观看| 黑人糟蹋人妻hd中文字幕| 在线不卡一区二区三区| 国产高清www| 涩涩网站在线看| 和岳每晚弄的高潮嗷嗷叫视频| 男女曰b免费视频| 亚洲五码在线观看视频| 中文久久久久久| 99色这里只有精品| 亚洲第一页在线视频| 91n.com在线观看| 欧美成人免费在线观看视频| 国产女同无遮挡互慰高潮91| 国产素人在线观看| 日本aa在线观看| 久久天天东北熟女毛茸茸| 国产九九在线视频| 久草资源站在线观看| 国内少妇毛片视频| gogogo高清免费观看在线视频|