下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、單片機(jī)通訊協(xié)議辦理此刻大多數(shù)的儀器設(shè)施都要求能過經(jīng)過上位機(jī)軟件來操作,這樣方便調(diào)試,利于操作。此中就波及到通訊的過程。在實(shí)質(zhì)制作的幾個(gè)設(shè)施中,筆者總結(jié)出了通訊程序的通用寫法,包含上位機(jī)端和下位機(jī)端等1自定義數(shù)據(jù)通訊協(xié)議這里所說的數(shù)據(jù)協(xié)議是成立在物理層之上的通訊數(shù)據(jù)包格式。所謂通訊的物理層就是指我們平常所用到的RS232、RS485、紅外、光纖、無線等等通訊方式。在這個(gè)層面上,基層軟件供給兩個(gè)基本的操作函數(shù):發(fā)送一個(gè)字節(jié)數(shù)據(jù)、接收一個(gè)字節(jié)數(shù)據(jù)。所有的數(shù)據(jù)協(xié)議所有成立在這兩個(gè)操作方法之上。通訊中的數(shù)據(jù)常常以數(shù)據(jù)包的形式進(jìn)行傳達(dá)的,我們把這樣的一個(gè)數(shù)據(jù)包稱作為一幀數(shù)據(jù)。近似于網(wǎng)絡(luò)通訊中的TCPIP協(xié)
2、議一般,比較靠譜的通訊協(xié)議常常包含有以下幾個(gè)構(gòu)成部分:幀頭、地點(diǎn)信息、數(shù)據(jù)種類、數(shù)據(jù)長度、數(shù)據(jù)塊、校驗(yàn)碼、幀尾。幀頭和幀尾用于數(shù)據(jù)包圓滿性的鑒別,平常選擇必定長度的固定字節(jié)構(gòu)成,要求是在整個(gè)數(shù)據(jù)鏈中鑒別數(shù)據(jù)包的誤碼率越低越好。減小固定字節(jié)數(shù)據(jù)的般配機(jī)會(huì),也就是說使幀頭和幀尾的特點(diǎn)字節(jié)在整個(gè)數(shù)據(jù)鏈中能夠般配的機(jī)會(huì)最小。平常有兩種做法,一、減小特點(diǎn)字節(jié)的般配幾率。二、增添特點(diǎn)字節(jié)的長度。平常采納第一種方法的狀況是整個(gè)數(shù)據(jù)鏈路中的數(shù)據(jù)不擁有隨即性,數(shù)據(jù)可預(yù)測,能夠經(jīng)過人為選擇幀頭和幀尾的特點(diǎn)字來避開,進(jìn)而減小特點(diǎn)字節(jié)的般配幾率。使用第二種方法的狀況更為通用,合適于數(shù)據(jù)隨即的場合。經(jīng)過增添特點(diǎn)字節(jié)的長
3、度減小般配幾率,固然不可以夠夠圓滿的防范般配的狀況,但能夠使般配幾率大大減小,假如遇到般配的狀況也能夠由校驗(yàn)碼來進(jìn)行檢測,所以這類狀況在絕大多討狀況下比較靠譜。地點(diǎn)信息主要用于多機(jī)通訊中,經(jīng)過地點(diǎn)信息的不同樣來鑒別不同樣的通訊終端。在一對多的通訊系統(tǒng)中,能夠只包含目的地點(diǎn)信息。同時(shí)包含源地點(diǎn)和目的地點(diǎn)則合用于多對多的通訊系統(tǒng)。數(shù)據(jù)種類、數(shù)據(jù)長度和數(shù)據(jù)塊是主要的數(shù)據(jù)部分。數(shù)據(jù)種類能夠表記后邊緊接著的是命令仍是數(shù)據(jù)。數(shù)據(jù)長度用于指示有效數(shù)據(jù)的個(gè)數(shù)。校驗(yàn)碼則用來查驗(yàn)數(shù)據(jù)的圓滿性和正確性。平常對數(shù)據(jù)種類、數(shù)據(jù)長度和數(shù)據(jù)塊三個(gè)部分進(jìn)行有關(guān)的運(yùn)算獲得。最簡單的做法但是對數(shù)據(jù)段作累加和,復(fù)雜的也能夠?qū)?shù)據(jù)進(jìn)
4、行CRC運(yùn)算等等,能夠依據(jù)運(yùn)算速度、容錯(cuò)度等要求來采納。2上位機(jī)和下位機(jī)中的數(shù)據(jù)發(fā)送物理通訊層中供給了兩個(gè)基本的操作函數(shù),發(fā)送一個(gè)字節(jié)數(shù)據(jù)則為數(shù)據(jù)發(fā)送的基礎(chǔ)。數(shù)據(jù)包的發(fā)送即把數(shù)據(jù)包中的左右字節(jié)依據(jù)次序一個(gè)一個(gè)的發(fā)送數(shù)據(jù)而已。自然發(fā)送的方法也有不同樣。在單片機(jī)系統(tǒng)中,比較常用的方法是直接調(diào)用串口發(fā)送單個(gè)字節(jié)數(shù)據(jù)的函數(shù)。這類方法的弊端是需要辦理器在發(fā)送過程中全程參加,長處是所要發(fā)送的數(shù)據(jù)能夠立刻的出此刻通訊線路上,能夠立刻被接收端接收到。其他一種方法是采納中止發(fā)送的方式,所有需要發(fā)送的數(shù)據(jù)被送入一個(gè)緩沖區(qū),利用發(fā)送中止將緩沖區(qū)中的數(shù)據(jù)發(fā)送出去。這類方法的長處是占用辦理器資源小,但是可能出現(xiàn)需要發(fā)送
5、的數(shù)據(jù)不可以夠立刻被發(fā)送的狀況,但是這類時(shí)延相當(dāng)?shù)男?。對?1系列單片機(jī),比較偏向于采納直接發(fā)送的方式,采納中止發(fā)送的方式比較占用RAM資源,并且比較直接發(fā)送來說也沒有太多的長處。以下是單個(gè)字節(jié)的函數(shù)。51系列單片機(jī)中發(fā)送voidSendByte(unsignedcharch)SBUF=ch;while(TI=0);TI=0;上位機(jī)中對于串口通訊的方式也有多種,這類方式不是指數(shù)占有沒有緩沖的問題,而是操作串口的方式不同樣,由于PC上數(shù)據(jù)發(fā)送基本上都會(huì)被緩沖后再發(fā)送。對于編程來說操作串口有三種方式,一、使用windows系統(tǒng)中自帶的串口通訊控件,這類方式使用起來比較簡單,需要注意的是接收時(shí)的擁堵
6、辦理和線程系統(tǒng)。二、使用系統(tǒng)的API直接進(jìn)行串口數(shù)據(jù)的讀取,在windows和linux系統(tǒng)中,設(shè)施被虛假為文件,只需要利用系統(tǒng)供給的API函數(shù)即可進(jìn)行串口數(shù)據(jù)的發(fā)送和讀取。三、使用串口類進(jìn)行串口操作。在此只介紹windows環(huán)境下利用串口類編程的方式。CSerialPort是比較好用的串口類。它供給予下的串口操作方法:voidWriteToPort(char*string,intlen);串口初始化成功后,調(diào)用此函數(shù)即可向串口發(fā)送數(shù)據(jù)。為了防范串口緩沖所帶來的延時(shí),能夠開啟串口的沖洗系統(tǒng)。3下位機(jī)中的數(shù)據(jù)接收和協(xié)議解析下位機(jī)接收數(shù)據(jù)也有兩種方式,一、等候接收,辦理器向來查問串口狀態(tài),來判斷能
7、否接收到數(shù)據(jù)。二、中止接收。兩種方法的優(yōu)弊端在此前的一篇對于串口通訊的文章中詳盡討論過。得出的結(jié)論是采納中止接收的方法比較好。數(shù)據(jù)包的解析過程能夠設(shè)置到不同樣的地點(diǎn)。假如協(xié)議比較簡單,整個(gè)系統(tǒng)但是辦理一些簡單的命令,那么能夠直接把數(shù)據(jù)包的解析過程放入到中止辦理函數(shù)中,當(dāng)收到正確的數(shù)據(jù)包的時(shí)候,置位相應(yīng)的標(biāo)記,在主程序中再對命令進(jìn)行辦理。假如協(xié)議略微復(fù)雜,比較好的方式是將接收的數(shù)據(jù)寄存于緩沖區(qū)中,主程序讀取數(shù)據(jù)后進(jìn)行解析。也有兩種方式交叉使用的,比方一對多的系統(tǒng)中,第一在接收中止中解析“連結(jié)”命令,連結(jié)命令接收到后主程序進(jìn)入設(shè)置狀態(tài),采納查問的方式來解析其他的協(xié)議。以下給出詳盡的實(shí)例。在這個(gè)系統(tǒng)
8、中,串口的命令特別簡單。所有的協(xié)議所有在串口中止中進(jìn)行。數(shù)據(jù)包的格式以下:0 x55,0 xAA,0 x7E,0 x12,0 xF0,0 x02,0 x23,0 x45,SUM,XOR,0 x0D此中0 x55,0 xAA,0 x7E為數(shù)據(jù)幀的幀頭,0 x0D為幀尾,0 x12為設(shè)施的目的地點(diǎn),0 xF0為源地點(diǎn),0 x02為數(shù)據(jù)長度,后邊接著兩個(gè)數(shù)據(jù)0 x23,0 x45,從目的地點(diǎn)開始結(jié)算累加、異或校驗(yàn)和,到數(shù)據(jù)的最后一位結(jié)束。協(xié)議解析的目的,第一判斷數(shù)據(jù)包的圓滿性,正確性,此后提取數(shù)據(jù)種類,數(shù)據(jù)等數(shù)據(jù),寄存起來用于主程序辦理。代碼以下:if(state_machine=0)/協(xié)議解析狀態(tài)
9、機(jī)if(rcvdat=0 x55)/接收到幀頭第一個(gè)數(shù)據(jù)state_machine=1;elsestate_machine=0;/狀態(tài)機(jī)復(fù)位elseif(state_machine=1)if(rcvdat=0 xAA)/接收到幀頭第二個(gè)數(shù)據(jù)state_machine=2;elsestate_machine=0;/狀態(tài)機(jī)復(fù)位elseif(state_machine=2)if(rcvdat=0 x7E)/接收到幀頭第三個(gè)數(shù)據(jù)state_machine=3;elsestate_machine=0;/狀態(tài)機(jī)復(fù)位elseif(state_machine=3)sumchkm=rcvdat;/開始計(jì)算累加、
10、異或校驗(yàn)和xorchkm=rcvdat;if(rcvdat=m_SrcAdr)/判斷目的地點(diǎn)能否正確state_machine=4;elsestate_machine=0;elseif(state_machine=4)sumchkm+=rcvdat;xorchkm=rcvdat;if(rcvdat=m_DstAdr)/判斷源地點(diǎn)能否正確state_machine=5;elsestate_machine=0;elseif(state_machine=5)lencnt=0;/接收數(shù)據(jù)計(jì)數(shù)器rcvcount=rcvdat;/接收數(shù)據(jù)長度sumchkm+=rcvdat;xorchkm=rcvdat;s
11、tate_machine=6;elseif(state_machine=6|state_machine=7)m_ucDatalencnt+=rcvdat;/數(shù)據(jù)保留sumchkm+=rcvdat;xorchkm=rcvdat;if(lencnt=rcvcount)/判斷數(shù)據(jù)能否接收完成state_machine=8;elsestate_machine=7;elseif(state_machine=8)if(sumchkm=rcvdat)/判斷累加和能否相等state_machine=9;elsestate_machine=0;elseif(state_machine=9)if(xorchkm=
12、rcvdat)/判斷異或校驗(yàn)和能否相等state_machine=10;elsestate_machine=0;elseif(state_machine=10)if(0 x0D=rcvdat)/判斷能否接收到幀尾結(jié)束符retval=0 xaa;/置標(biāo)記,表示一個(gè)數(shù)據(jù)包接收到state_machine=0;/復(fù)位狀態(tài)機(jī)此過程中,使用了一個(gè)變量state_machine作為協(xié)議狀態(tài)機(jī)的變換狀態(tài),用于確立目前字節(jié)處于一幀數(shù)據(jù)中的那個(gè)部位,同時(shí)在接收過程中自動(dòng)對接收數(shù)據(jù)進(jìn)行校驗(yàn)和辦理,在數(shù)據(jù)包接收完的同時(shí)也進(jìn)行了校驗(yàn)的比較。所以當(dāng)幀尾結(jié)束符接收到的時(shí)候,則表示一幀數(shù)據(jù)已經(jīng)接收完成,并且經(jīng)過了校驗(yàn),重點(diǎn)
13、數(shù)據(jù)也保留到了緩沖去中。主程序即可經(jīng)過retval的標(biāo)記位來進(jìn)行協(xié)議的解析辦理。接收過程中,只需哪一步收到的數(shù)據(jù)不是預(yù)期值,則直接將狀態(tài)機(jī)復(fù)位,用于下一幀數(shù)據(jù)的判斷,所以系統(tǒng)出現(xiàn)狀態(tài)死鎖的狀況特別少,系統(tǒng)比較堅(jiān)固,假如出現(xiàn)拋棄數(shù)據(jù)包的狀況也可由上位機(jī)進(jìn)行命令的補(bǔ)發(fā),但是這類狀況筆者還沒有遇到。對于主程序中進(jìn)行協(xié)議辦理的過程與此近似,主程序循環(huán)中不停的讀取串口緩沖區(qū)的數(shù)據(jù),此數(shù)據(jù)即參加到主循環(huán)中的協(xié)議辦理過程中,代碼與上邊所述圓滿同樣。4上位機(jī)中的數(shù)據(jù)接收和命令辦理上位機(jī)中數(shù)據(jù)接收的過程與下位機(jī)能夠做到圓滿一致,但是針對不同樣的串口操作方法有所不同樣。對于阻賽式的串口讀函數(shù),比方直接進(jìn)行API操
14、作或者調(diào)用windows的串口通訊控件,最好能夠開啟一個(gè)線程專門用于督查串口的數(shù)據(jù)接收,每接收到一個(gè)數(shù)據(jù)能夠向系統(tǒng)發(fā)送一個(gè)信息。筆者常用的CSerialPort類中就是這樣的辦理過程。CSerialPort翻開串口后開啟線程督查串口的數(shù)據(jù)接收,將接收的數(shù)據(jù)保留到緩沖區(qū),并向父進(jìn)度發(fā)送接收數(shù)據(jù)的信息,數(shù)據(jù)將隨信息一同發(fā)送到父進(jìn)度。父進(jìn)度中開啟此信息的辦理函數(shù),從中獲得串口數(shù)據(jù)后就能夠把以上的代碼拷貝過來使用。CSerialPort向父類發(fā)送的信息號(hào)以下:#defineWM_COMM_RXCHARWM_USER+7/Acharacterwasreceivedandplacedintheinputbuffer.所以需要手動(dòng)增添此信息的響應(yīng)函數(shù):afx_msgLONGOnCommunication(WPARAMch,LPARAMport);ON_MESSAGE(WM_COMM_RXCHAR,OnCommunication)響應(yīng)函數(shù)的詳盡代碼以下:LONGCWellInfoView:OnCommunication(WPARAMch,LPARAMport)intretval=0;rcvdat=(BYTE)ch;if(state_machine=0)/協(xié)議解析狀態(tài)機(jī)if(rcvdat=0 x55)/接收到幀頭第一個(gè)數(shù)據(jù)state_m
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年股票互換協(xié)議
- 2025年度綠色建筑節(jié)能改造工程承包合同模板2篇
- 2025年度電影院場地租賃合同及觀影安全保障與服務(wù)標(biāo)準(zhǔn)協(xié)議3篇
- 2024版移動(dòng)網(wǎng)絡(luò)業(yè)務(wù)伙伴合同版B版
- 2025年度婚禮場地借用與策劃服務(wù)合同3篇
- 2025年度訴訟保全擔(dān)保流程規(guī)范細(xì)則合同3篇
- 2025年度池塘休閑漁業(yè)項(xiàng)目租賃協(xié)議3篇
- 2025年水土保持監(jiān)測技術(shù)咨詢與旅游開發(fā)合同3篇
- 二零二五年空調(diào)清洗保養(yǎng)及節(jié)能效益分析合同3篇
- 2025年版健康養(yǎng)老服務(wù)合同4篇
- 建筑行業(yè)人才培養(yǎng)和發(fā)展方案
- 生活垃圾焚燒發(fā)電廠摻燒一般工業(yè)固廢和協(xié)同處置污泥項(xiàng)目環(huán)評資料環(huán)境影響
- 軟件開發(fā)年終工作總結(jié)課件
- 期末 (試題) -2024-2025學(xué)年人教PEP版(2024)英語三年級(jí)上冊
- 現(xiàn)場勘察制度
- 2024年山東省煙臺(tái)市中考英語試題含解析
- 專項(xiàng)14-因式分解-專題訓(xùn)練(50道)
- 四年級(jí)簡便運(yùn)算100道大全及答案
- 黔東南南苗族侗族自治州黃平縣2024年數(shù)學(xué)三年級(jí)第一學(xué)期期末考試試題含解析
- 科研倫理審查與違規(guī)處理考核試卷
- 安平縣2024年小升初必考題數(shù)學(xué)檢測卷含解析
評論
0/150
提交評論