色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>嵌入式開發(fā)>單片機里的通信協(xié)議怎么理解?這樣看其實挺簡單資料下載

單片機里的通信協(xié)議怎么理解?這樣看其實挺簡單資料下載

2021-04-21 | pdf | 120.32KB | 次下載 | 2積分

資料介紹

本文我們所述的通信協(xié)議只是指建立再物理層之上的通信數(shù)據(jù)包格式。通常是我們自行約定的具有一定順序排列的數(shù)據(jù)集合,且每一部分都有特定的含義,我們把這些數(shù)據(jù)集合借助物理層通信方式進行發(fā)送和解析。 1、自定義數(shù)據(jù)通信協(xié)議 這里所說的數(shù)據(jù)協(xié)議是建立在物理層之上的通信數(shù)據(jù)包格式。所謂通信的物理層就是指我們通常所用到的RS232RS485紅外、光纖、無線等等通信方式。在這個層面上,底層軟件提供兩個基本的操作函數(shù):發(fā)送一個字節(jié)數(shù)據(jù)、接收一個字節(jié)數(shù)據(jù)。所有的數(shù)據(jù)協(xié)議全部建立在這兩個操作方法之上。 通信中的數(shù)據(jù)往往以數(shù)據(jù)包的形式進行傳送的,我們把這樣的一個數(shù)據(jù)包稱作為一幀數(shù)據(jù)。類似于網(wǎng)絡通信中的TCPIP協(xié)議一般,比較可靠的通信協(xié)議往往包含有以下幾個組成部分:幀頭、地址信息、數(shù)據(jù)類型、數(shù)據(jù)長度、數(shù)據(jù)塊、校驗碼、幀尾。 幀頭和幀尾用于數(shù)據(jù)包完整性的判別,通常選擇一定長度的固定字節(jié)組成,要求是在整個數(shù)據(jù)鏈中判別數(shù)據(jù)包的誤碼率越低越好。減小固定字節(jié)數(shù)據(jù)的匹配機會,也就是說使幀頭和幀尾的特征字節(jié)在整個數(shù)據(jù)鏈中能夠匹配的機會最小。通常有兩種做法,一、減小特征字節(jié)的匹配幾率。二、增加特征字節(jié)的長度。通常選取第一種方法的情況是整個數(shù)據(jù)鏈路中的數(shù)據(jù)不具有隨即性,數(shù)據(jù)可預測,可以通過人為選擇幀頭和幀尾的特征字來避開,從而減小特征字節(jié)的匹配幾率。使用第二種方法的情況更加通用,適合于數(shù)據(jù)隨即的場合。通過增加特征字節(jié)的長度減小匹配幾率,雖然不能夠完全的避免匹配的情況,但可以使匹配幾率大大減小,如果碰到匹配的情況也可以由校驗碼來進行檢測,因此這種情況在絕大多說情況下比較可靠。 地址信息主要用于多機通信中,通過地址信息的不同來識別不同的通信終端。在一對多的通信系統(tǒng)中,可以只包含目的地址信息。同時包含源地址和目的地址則適用于多對多的通信系統(tǒng)。 數(shù)據(jù)類型、數(shù)據(jù)長度和數(shù)據(jù)塊是主要的數(shù)據(jù)部分。數(shù)據(jù)類型可以標識后面緊接著的是命令還是數(shù)據(jù)。數(shù)據(jù)長度用于指示有效數(shù)據(jù)的個數(shù)。 校驗碼則用來檢驗數(shù)據(jù)的完整性和正確性。通常對數(shù)據(jù)類型、數(shù)據(jù)長度和數(shù)據(jù)塊三個部分進行相關的運算得到。最簡單的做法可是對數(shù)據(jù)段作累加和,復雜的也可以對數(shù)據(jù)進行CRC運算等等,可以根據(jù)運算速度、容錯度等要求來選取。 2、上位機和下位機中的數(shù)據(jù)發(fā)送 物理通信層中提供了兩個基本的操作函數(shù),發(fā)送一個字節(jié)數(shù)據(jù)則為數(shù)據(jù)發(fā)送的基礎。數(shù)據(jù)包的發(fā)送即把數(shù)據(jù)包中的左右字節(jié)按照順序一個一個的發(fā)送數(shù)據(jù)而已。當然發(fā)送的方法也有不同。 在單片機系統(tǒng)中,比較常用的方法是直接調(diào)用串口發(fā)送單個字節(jié)數(shù)據(jù)的函數(shù)。這種方法的缺點是需要處理器在發(fā)送過程中全程參與,優(yōu)點是所要發(fā)送的數(shù)據(jù)能夠立即的出現(xiàn)在通信線路上,能夠立即被接收端接收到。另外一種方法是采用中斷發(fā)送的方式,所有需要發(fā)送的數(shù)據(jù)被送入一個緩沖區(qū),利用發(fā)送中斷將緩沖區(qū)中的數(shù)據(jù)發(fā)送出去。這種方法的優(yōu)點是占用處理器資源小,但是可能出現(xiàn)需要發(fā)送的數(shù)據(jù)不能立即被發(fā)送的情況,不過這種時延相當?shù)男 τ?1系列單片機,比較傾向于采用直接發(fā)送的方式,采用中斷發(fā)送的方式比較占用RAM資源,而且對比直接發(fā)送來說也沒有太多的優(yōu)點。以下是51系列單片機中發(fā)送單個字節(jié)的函數(shù)。 void SendByte(unsigned char ch) { SBUF = ch; while(TI == 0); TI = 0; } 上位機中關于串口通信的方式也有多種,這種方式不是指數(shù)據(jù)有沒有緩沖的問題,而是操作串口的方式不同,因為PC上數(shù)據(jù)發(fā)送基本上都會被緩沖后再發(fā)送。對于編程來說操作串口有三種方式,一、使用windows系統(tǒng)中自帶的串口通信控件,這種方式使用起來比較簡單,需要注意的是接收時的阻塞處理和線程機制。二、使用系統(tǒng)的API直接進行串口數(shù)據(jù)的讀取,在windows和linux系統(tǒng)中,設備被虛擬為文件,只需要利用系統(tǒng)提供的API函數(shù)即可進行串口數(shù)據(jù)的發(fā)送和讀取。三、使用串口類進行串口操作。在此只介紹windows環(huán)境下利用串口類編程的方式。 CSerialPort是比較好用的串口類。它提供如下的串口操作方法: void WriteToPort(char* string, int len); 串口初始化成功后,調(diào)用此函數(shù)即可向串口發(fā)送數(shù)據(jù)。為了避免串口緩沖所帶來的延時,可以開啟串口的沖刷機制。 3、下位機中的數(shù)據(jù)接收和協(xié)議解析 下位機接收數(shù)據(jù)也有兩種方式,一、等待接收,處理器一直查詢串口狀態(tài),來判斷是否接收到數(shù)據(jù)。二、中斷接收。兩種方法的優(yōu)缺點在此前的一篇關于串口通信的文章中詳細討論過。得出的結(jié)論是采用中斷接收的方法比較好。 數(shù)據(jù)包的解析過程可以設置到不同的位置。如果協(xié)議比較簡單,整個系統(tǒng)只是處理一些簡單的命令,那么可以直接把數(shù)據(jù)包的解析過程放入到中斷處理函數(shù)中,當收到正確的數(shù)據(jù)包的時候,置位相應的標志,在主程序中再對命令進行處理。如果協(xié)議稍微復雜,比較好的方式是將接收的數(shù)據(jù)存放于緩沖區(qū)中,主程序讀取數(shù)據(jù)后進行解析。也有兩種方式交叉使用的,比如一對多的系統(tǒng)中,首先在接收中斷中解析“連接”命令,連接命令接收到后主程序進入設置狀態(tài),采用查詢的方式來解析其余的協(xié)議。 以下給出具體的實例。在這個系統(tǒng)中,串口的命令非常簡單。所有的協(xié)議全部在串口中斷中進行。數(shù)據(jù)包的格式如下: 0x55, 0xAA, 0x7E, 0x12, 0xF0, 0x02, 0x23, 0x45, SUM, XOR, 0x0D 其中0x55, 0xAA, 0x7E為數(shù)據(jù)幀的幀頭,0x0D為幀尾,0x12為設備的目的地址,0xF0為源地址,0x02為數(shù)據(jù)長度,后面接著兩個數(shù)據(jù)0x23, 0x45,從目的地址開始結(jié)算累加、異或校驗和,到數(shù)據(jù)的最后一位結(jié)束。 協(xié)議解析的目的,首先判斷數(shù)據(jù)包的完整性,正確性,然后提取數(shù)據(jù)類型,數(shù)據(jù)等數(shù)據(jù),存放起來用于主程序處理。代碼如下: if(state_machine == 0) // 協(xié)議解析狀態(tài)機 { if(rcvdat == 0x55) // 接收到幀頭第一個數(shù)據(jù) state_machine = 1; else state_machine = 0; // 狀態(tài)機復位 } else if(state_machine == 1) { if(rcvdat == 0xAA) // 接收到幀頭第二個數(shù)據(jù) state_machine = 2; else state_machine = 0; // 狀態(tài)機復位 } else if(state_machine == 2) { if(rcvdat == 0x7E) // 接收到幀頭第三個數(shù)據(jù) state_machine = 3; else state_machine = 0; // 狀態(tài)機復位 } else if(state_machine == 3) { sumchkm = rcvdat; // 開始計算累加、異或校驗和 xorchkm = rcvdat; if(rcvdat == m_SrcAdr) // 判斷目的地址是否正確 state_machine = 4; else state_machine = 0; } else if(state_machine == 4) { sumchkm += rcvdat; xorchkm ^= rcvdat; if(rcvdat == m_DstAdr) // 判斷源地址是否正確 state_machine = 5; else state_machine = 0; } else if(state_machine == 5) { lencnt = 0; // 接收數(shù)據(jù)計數(shù)器 rcvcount = rcvdat; // 接收數(shù)據(jù)長度 sumchkm += rcvdat;
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1TC358743XBG評估板參考手冊
  2. 1.36 MB  |  330次下載  |  免費
  3. 2開關電源基礎知識
  4. 5.73 MB  |  6次下載  |  免費
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設計
  8. 0.60 MB  |  3次下載  |  免費
  9. 5基于FPGA的光纖通信系統(tǒng)的設計與實現(xiàn)
  10. 0.61 MB  |  2次下載  |  免費
  11. 6基于FPGA的C8051F單片機開發(fā)板設計
  12. 0.70 MB  |  2次下載  |  免費
  13. 751單片機窗簾控制器仿真程序
  14. 1.93 MB  |  2次下載  |  免費
  15. 8基于51單片機的RGB調(diào)色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21548次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設計》 溫德爾著
  16. 0.00 MB  |  6653次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537796次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191185次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183278次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
主站蜘蛛池模板: 国产视频精品免费| 冰山高冷受被c到哭np双性| 日韩AV无码一区二区三区不卡毛片| 久久电影精品| 国产亚洲日韩在线播放不卡| 国产免费阿v精品视频网址| 国产成人无码精品久久久影院| 啊叫大点声欠CAO的SAO贷| caoporn超碰视频| 99麻豆精品国产人妻无码| 97在线视频免费观看97| 99re精品视频在线播放视频| 999国产高清在线精品| 99视频全部看免费观| a圾片目录大全| www.色片| 儿子操妈妈视频| 高中生高潮抽搐喷出白浆视频| 国产成人99久久亚洲综合精品| 豆奶视频在线高清观看| 国产成年网站v片在线观看| 国产成人高清在线观看播放| 国产精片久久久久久婷婷| 国产日韩欧美有码在线视频| 国产在线观看成人免费视频| 娇妻玩4P被三个男人伺候电影| 久久电影精品| 美女挑战50厘米长的黑人| 女厕所边摸边吃奶边做爽视频| 漂亮的av女演员| 色多多污污下载| 亚洲AV國產国产久青草| 亚洲日本va中文字幕久久| 国产成人精品永久免费视频| 国产精品一区二区免费| 好看的电影网站亚洲一区| 久久精品AV无码亚洲色欲| 免费高清在线影片一区| 秋霞网在线伦理影片| 无码一区国产欧美在线资源| 亚洲一卡久久4卡5卡6卡7卡|