国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

在串口通訊程序中處理數據包

在串口通訊程序中處理數據包

更新時間:2022-04-26 文章作者:未知 信息來源:網絡 閱讀次數:

在串口通訊程序中,經常要收到數據包,常有網友問及如何從這些數據包中提取需要的數據,如何處理校驗等,在這篇文章里我舉兩個例子予以說明,程序說明為VC++6.0。關于串口編程建立程序的細節,請參閱我主頁上的其它文章。同時,此文也適于其它通訊程序中艱數據報文的處理。

    首先,應該指出的是,所有這些處理均在串口事件處理函數oncommunication()中進行。每當串口緩沖區中有一個或一個以上字符時觸發串口通訊事件,該事件就驅動(調用)串口事件通訊處理函數oncommunication(),在這里就可以對接收到的數據進行處理,提取需要的數據。

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

1.問題:

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

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

2 NMEA無線通訊格式的處理

2.1 NMEA-0183報文格式

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

2.2 校驗處理

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


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


m_strReceived += (char)ch;
switch(ch)
{
case '$':
checksum=0; //開始計算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);//轉換

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

}

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



3 網友的問題

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

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

答:右移得到011C0FF后,可將其放在一個字符型變量CString m_strReceive中:
然后將其轉換:
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表示結束
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即為你要的數據

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

本類教程下載

系統下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        青青青伊人色综合久久| 日韩你懂的在线观看| 色吊一区二区三区| 欧美国产日韩在线观看| 国产成人在线视频网站| 欧美国产日韩亚洲一区| 99这里只有久久精品视频| 亚洲视频免费看| 欧美日韩国产在线观看| 久草在线在线精品观看| 亚洲欧洲日韩一区二区三区| 欧美日韩高清一区二区三区| 精彩视频一区二区| 国产精品灌醉下药二区| 欧美日韩国产一区| 国内精品免费在线观看| 中文字幕一区在线观看| 欧美日韩你懂得| 国产激情一区二区三区| 亚洲综合小说图片| 国产三级一区二区| 欧美性猛片xxxx免费看久爱| 韩国在线一区二区| 一区二区三区在线免费| 亚洲蜜桃精久久久久久久| 色综合夜色一区| 不卡一区中文字幕| 中文字幕一区二区三区视频| 777午夜精品视频在线播放| 国产乱码精品一区二区三区av| 国产精品高潮久久久久无| 欧美一区二区三区视频免费播放 | 亚洲国产精华液网站w| 欧美综合在线视频| 国产乱码字幕精品高清av| 亚洲成a人v欧美综合天堂下载| 欧美videossexotv100| 在线影院国内精品| 国产传媒日韩欧美成人| 日韩不卡一二三区| 亚洲欧美日韩在线不卡| 国产午夜亚洲精品理论片色戒| 欧美日韩国产小视频| 懂色中文一区二区在线播放| 久久99国产精品久久99果冻传媒| 一区二区三区精密机械公司| 国产拍揄自揄精品视频麻豆| 91精品一区二区三区在线观看| 色妞www精品视频| 国产福利电影一区二区三区| 免费成人你懂的| 视频一区二区三区入口| 一区二区三区四区国产精品| 中文字幕色av一区二区三区| 国产午夜精品久久久久久免费视| 欧美一区二区三区人| 欧美精品第1页| 欧美高清性hdvideosex| 欧美性猛交xxxxxxxx| 国产精品久久久久影院老司| 久久久久一区二区三区四区| 2023国产精品| 久久精品视频网| 日本一区二区三区国色天香| 久久精品亚洲乱码伦伦中文| 久久久五月婷婷| 国产肉丝袜一区二区| 久久久国产综合精品女国产盗摄| 精品国产精品网麻豆系列| 精品国产免费久久| 亚洲国产成人一区二区三区| 国产精品久久久久一区 | 亚洲国产一二三| 一区二区三区四区不卡在线 | 日韩成人免费在线| 天堂久久一区二区三区| av在线一区二区| 成人免费精品视频| 日本高清成人免费播放| 欧美中文字幕亚洲一区二区va在线| 欧美图片一区二区三区| 欧美一级理论片| 精品国产伦一区二区三区观看体验| 久久亚洲影视婷婷| 亚洲欧美激情插| 日韩电影网1区2区| 国产iv一区二区三区| 色女孩综合影院| 日韩免费观看高清完整版在线观看| 26uuu亚洲婷婷狠狠天堂| 国产精品久久久久精k8 | av一区二区三区黑人| 91成人在线精品| 日韩三级av在线播放| 国产精品午夜在线观看| 亚洲成av人片在线观看| 国产毛片一区二区| 色欧美88888久久久久久影院| 欧美一区二区三区日韩视频| 国产精品丝袜一区| 亚洲bt欧美bt精品| 国产精品亚洲成人| 欧美日韩精品电影| 亚洲视频一区在线观看| 日本不卡高清视频| 97久久超碰国产精品| 91精品国产91久久久久久最新毛片| 26uuu亚洲综合色| 亚洲激情第一区| 国产成人免费在线观看不卡| 欧美人牲a欧美精品| 国产精品九色蝌蚪自拍| 老司机午夜精品| 国产欧美一区二区三区在线看蜜臀| 国产精品家庭影院| 久久精品99国产精品| 色一情一乱一乱一91av| 国产亚洲视频系列| 午夜精品久久久久久| 不卡的av电影在线观看| 欧美tk—视频vk| 亚洲国产精品久久久久婷婷884| 国产一区视频导航| 日韩一级大片在线观看| 性欧美疯狂xxxxbbbb| 欧美亚洲高清一区二区三区不卡| 国产精品成人网| av在线免费不卡| 日本一区二区成人| 国产成人精品亚洲午夜麻豆| 日韩欧美成人激情| 美女一区二区三区在线观看| 欧美男男青年gay1069videost| 亚洲欧美日韩久久| 99久久精品国产观看| 综合av第一页| 91浏览器入口在线观看| 亚洲精品免费视频| 欧美色网站导航| 视频在线观看一区二区三区| 欧美视频日韩视频| 日韩国产欧美在线视频| 欧美一区二区视频网站| 免费看日韩精品| 欧美电视剧免费观看| 狠狠色综合色综合网络| 国产无一区二区| 色天使久久综合网天天| 亚洲国产精品一区二区www| 欧美一区二区不卡视频| 国产一区二区不卡在线| 国产片一区二区三区| 暴力调教一区二区三区| 亚洲精品免费视频| 欧美欧美欧美欧美首页| 欧美麻豆精品久久久久久| 三级不卡在线观看| 久久综合九色综合97_久久久| 成人免费视频视频| 亚洲一区二区偷拍精品| 欧美一三区三区四区免费在线看| 美日韩一区二区三区| 国产欧美日韩久久| 欧美在线免费观看视频| 国产在线一区观看| 亚洲欧美日本在线| 欧美浪妇xxxx高跟鞋交| 国精品**一区二区三区在线蜜桃| 国产精品女同互慰在线看| 色欧美88888久久久久久影院| 天天综合网天天综合色| 国产喷白浆一区二区三区| 欧美日韩中文精品| 国产精品乡下勾搭老头1| 一区二区三区电影在线播| 日韩欧美高清在线| 欧美午夜精品理论片a级按摩| 精品一区二区三区欧美| 亚洲精品少妇30p| 欧美激情综合在线| 91精品久久久久久久91蜜桃| 成人高清免费观看| 久久精品噜噜噜成人88aⅴ| 亚洲欧美日本韩国| 国产日韩欧美精品一区| 欧美一区二区性放荡片| 色婷婷久久久久swag精品| 韩国精品久久久| 日韩av不卡一区二区| 亚洲精品国产无天堂网2021| 久久久亚洲国产美女国产盗摄 | 亚洲人成亚洲人成在线观看图片| 日韩视频免费观看高清完整版| 99久久精品国产网站| 国产一区二区在线电影| 三级不卡在线观看| 亚洲一区二区三区国产| 中文字幕在线一区免费| 久久男人中文字幕资源站| 日韩一区和二区|