下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、單片機(jī)通訊協(xié)議辦理此刻大多數(shù)的儀器設(shè)施都要求能過(guò)經(jīng)過(guò)上位機(jī)軟件來(lái)操作,這樣方便調(diào)試,利于操作。此中就波及到通訊的過(guò)程。在實(shí)質(zhì)制作的幾個(gè)設(shè)施中,筆者總結(jié)出了通訊程序的通用寫法,包含上位機(jī)端和下位機(jī)端等1自定義數(shù)據(jù)通訊協(xié)議這里所說(shuō)的數(shù)據(jù)協(xié)議是成立在物理層之上的通訊數(shù)據(jù)包格式。所謂通訊的物理層就是指我們平常所用到的RS232、RS485、紅外、光纖、無(wú)線等等通訊方式。在這個(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ù)長(zhǎng)度、數(shù)據(jù)塊、校驗(yàn)碼、幀尾。幀頭和幀尾用于數(shù)據(jù)包圓滿性的鑒別,平常選擇必定長(zhǎng)度的固定字節(jié)構(gòu)成,要求是在整個(gè)數(shù)據(jù)鏈中鑒別數(shù)據(jù)包的誤碼率越低越好。減小固定字節(jié)數(shù)據(jù)的般配機(jī)會(huì),也就是說(shuō)使幀頭和幀尾的特點(diǎn)字節(jié)在整個(gè)數(shù)據(jù)鏈中能夠般配的機(jī)會(huì)最小。平常有兩種做法,一、減小特點(diǎn)字節(jié)的般配幾率。二、增添特點(diǎn)字節(jié)的長(zhǎng)度。平常采納第一種方法的狀況是整個(gè)數(shù)據(jù)鏈路中的數(shù)據(jù)不擁有隨即性,數(shù)據(jù)可預(yù)測(cè),能夠經(jīng)過(guò)人為選擇幀頭和幀尾的特點(diǎn)字來(lái)避開(kāi),進(jìn)而減小特點(diǎn)字節(jié)的般配幾率。使用第二種方法的狀況更為通用,合適于數(shù)據(jù)隨即的場(chǎng)合。經(jīng)過(guò)增添特點(diǎn)字節(jié)的長(zhǎng)
3、度減小般配幾率,固然不可以夠夠圓滿的防范般配的狀況,但能夠使般配幾率大大減小,假如遇到般配的狀況也能夠由校驗(yàn)碼來(lái)進(jìn)行檢測(cè),所以這類狀況在絕大多討狀況下比較靠譜。地點(diǎn)信息主要用于多機(jī)通訊中,經(jīng)過(guò)地點(diǎn)信息的不同樣來(lái)鑒別不同樣的通訊終端。在一對(duì)多的通訊系統(tǒng)中,能夠只包含目的地點(diǎn)信息。同時(shí)包含源地點(diǎn)和目的地點(diǎn)則合用于多對(duì)多的通訊系統(tǒng)。數(shù)據(jù)種類、數(shù)據(jù)長(zhǎng)度和數(shù)據(jù)塊是主要的數(shù)據(jù)部分。數(shù)據(jù)種類能夠表記后邊緊接著的是命令仍是數(shù)據(jù)。數(shù)據(jù)長(zhǎng)度用于指示有效數(shù)據(jù)的個(gè)數(shù)。校驗(yàn)碼則用來(lái)查驗(yàn)數(shù)據(jù)的圓滿性和正確性。平常對(duì)數(shù)據(jù)種類、數(shù)據(jù)長(zhǎng)度和數(shù)據(jù)塊三個(gè)部分進(jìn)行有關(guān)的運(yùn)算獲得。最簡(jiǎn)單的做法但是對(duì)數(shù)據(jù)段作累加和,復(fù)雜的也能夠?qū)?shù)據(jù)進(jìn)
4、行CRC運(yùn)算等等,能夠依據(jù)運(yùn)算速度、容錯(cuò)度等要求來(lái)采納。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ā)送過(guò)程中全程參加,長(zhǎng)處是所要發(fā)送的數(shù)據(jù)能夠立刻的出此刻通訊線路上,能夠立刻被接收端接收到。其他一種方法是采納中止發(fā)送的方式,所有需要發(fā)送的數(shù)據(jù)被送入一個(gè)緩沖區(qū),利用發(fā)送中止將緩沖區(qū)中的數(shù)據(jù)發(fā)送出去。這類方法的長(zhǎng)處是占用辦理器資源小,但是可能出現(xiàn)需要發(fā)送
5、的數(shù)據(jù)不可以夠立刻被發(fā)送的狀況,但是這類時(shí)延相當(dāng)?shù)男 ?duì)于51系列單片機(jī),比較偏向于采納直接發(fā)送的方式,采納中止發(fā)送的方式比較占用RAM資源,并且比較直接發(fā)送來(lái)說(shuō)也沒(méi)有太多的長(zhǎng)處。以下是單個(gè)字節(jié)的函數(shù)。51系列單片機(jī)中發(fā)送voidSendByte(unsignedcharch)SBUF=ch;while(TI=0);TI=0;上位機(jī)中對(duì)于串口通訊的方式也有多種,這類方式不是指數(shù)占有沒(méi)有緩沖的問(wèn)題,而是操作串口的方式不同樣,由于PC上數(shù)據(jù)發(fā)送基本上都會(huì)被緩沖后再發(fā)送。對(duì)于編程來(lái)說(shuō)操作串口有三種方式,一、使用windows系統(tǒng)中自帶的串口通訊控件,這類方式使用起來(lái)比較簡(jiǎn)單,需要注意的是接收時(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ù)。為了防范串口緩沖所帶來(lái)的延時(shí),能夠開(kāi)啟串口的沖洗系統(tǒng)。3下位機(jī)中的數(shù)據(jù)接收和協(xié)議解析下位機(jī)接收數(shù)據(jù)也有兩種方式,一、等候接收,辦理器向來(lái)查問(wèn)串口狀態(tài),來(lái)判斷能
7、否接收到數(shù)據(jù)。二、中止接收。兩種方法的優(yōu)弊端在此前的一篇對(duì)于串口通訊的文章中詳盡討論過(guò)。得出的結(jié)論是采納中止接收的方法比較好。數(shù)據(jù)包的解析過(guò)程能夠設(shè)置到不同樣的地點(diǎn)。假如協(xié)議比較簡(jiǎn)單,整個(gè)系統(tǒng)但是辦理一些簡(jiǎn)單的命令,那么能夠直接把數(shù)據(jù)包的解析過(guò)程放入到中止辦理函數(shù)中,當(dāng)收到正確的數(shù)據(jù)包的時(shí)候,置位相應(yīng)的標(biāo)記,在主程序中再對(duì)命令進(jìn)行辦理。假如協(xié)議略微復(fù)雜,比較好的方式是將接收的數(shù)據(jù)寄存于緩沖區(qū)中,主程序讀取數(shù)據(jù)后進(jìn)行解析。也有兩種方式交叉使用的,比方一對(duì)多的系統(tǒng)中,第一在接收中止中解析“連結(jié)”命令,連結(jié)命令接收到后主程序進(jìn)入設(shè)置狀態(tài),采納查問(wèn)的方式來(lái)解析其他的協(xié)議。以下給出詳盡的實(shí)例。在這個(gè)系統(tǒng)
8、中,串口的命令特別簡(jiǎn)單。所有的協(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ù)長(zhǎng)度,后邊接著兩個(gè)數(shù)據(jù)0 x23,0 x45,從目的地點(diǎn)開(kāi)始結(jié)算累加、異或校驗(yàn)和,到數(shù)據(jù)的最后一位結(jié)束。協(xié)議解析的目的,第一判斷數(shù)據(jù)包的圓滿性,正確性,此后提取數(shù)據(jù)種類,數(shù)據(jù)等數(shù)據(jù),寄存起來(lái)用于主程序辦理。代碼以下: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;/開(kāi)始計(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ù)長(zhǎng)度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ī)此過(guò)程中,使用了一個(gè)變量state_machine作為協(xié)議狀態(tài)機(jī)的變換狀態(tài),用于確立目前字節(jié)處于一幀數(shù)據(jù)中的那個(gè)部位,同時(shí)在接收過(guò)程中自動(dòng)對(duì)接收數(shù)據(jù)進(jìn)行校驗(yàn)和辦理,在數(shù)據(jù)包接收完的同時(shí)也進(jìn)行了校驗(yàn)的比較。所以當(dāng)幀尾結(jié)束符接收到的時(shí)候,則表示一幀數(shù)據(jù)已經(jīng)接收完成,并且經(jīng)過(guò)了校驗(yàn),重點(diǎn)
13、數(shù)據(jù)也保留到了緩沖去中。主程序即可經(jīng)過(guò)retval的標(biāo)記位來(lái)進(jìn)行協(xié)議的解析辦理。接收過(guò)程中,只需哪一步收到的數(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ā),但是這類狀況筆者還沒(méi)有遇到。對(duì)于主程序中進(jìn)行協(xié)議辦理的過(guò)程與此近似,主程序循環(huán)中不停的讀取串口緩沖區(qū)的數(shù)據(jù),此數(shù)據(jù)即參加到主循環(huán)中的協(xié)議辦理過(guò)程中,代碼與上邊所述圓滿同樣。4上位機(jī)中的數(shù)據(jù)接收和命令辦理上位機(jī)中數(shù)據(jù)接收的過(guò)程與下位機(jī)能夠做到圓滿一致,但是針對(duì)不同樣的串口操作方法有所不同樣。對(duì)于阻賽式的串口讀函數(shù),比方直接進(jìn)行API操
14、作或者調(diào)用windows的串口通訊控件,最好能夠開(kāi)啟一個(gè)線程專門用于督查串口的數(shù)據(jù)接收,每接收到一個(gè)數(shù)據(jù)能夠向系統(tǒng)發(fā)送一個(gè)信息。筆者常用的CSerialPort類中就是這樣的辦理過(guò)程。CSerialPort翻開(kāi)串口后開(kāi)啟線程督查串口的數(shù)據(jù)接收,將接收的數(shù)據(jù)保留到緩沖區(qū),并向父進(jìn)度發(fā)送接收數(shù)據(jù)的信息,數(shù)據(jù)將隨信息一同發(fā)送到父進(jìn)度。父進(jìn)度中開(kāi)啟此信息的辦理函數(shù),從中獲得串口數(shù)據(jù)后就能夠把以上的代碼拷貝過(guò)來(lái)使用。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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 揚(yáng)州大學(xué)廣陵學(xué)院《輕稀貴金屬冶金學(xué)A》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年智能環(huán)保箱購(gòu)銷合同范本3篇
- 2025標(biāo)志標(biāo)線及交通安全設(shè)施承包合同
- 2024年03月全國(guó)中國(guó)農(nóng)業(yè)銀行研發(fā)中心春季校園招考筆試歷年參考題庫(kù)附帶答案詳解
- 2024年教育行業(yè)投資入股協(xié)議書3篇
- 2024年快遞物流貨物保險(xiǎn)合同定制版2篇
- 2024年新能源汽車物流運(yùn)輸合作協(xié)議范本3篇
- 2025二手電動(dòng)車轉(zhuǎn)讓合同
- 2025產(chǎn)品銷售合同書范本
- 2024年碳排放權(quán)交易與減排合作協(xié)議
- 德國(guó)福斯?jié)櫥拖盗挟a(chǎn)品總匯
- 品質(zhì)管控流程PPT課件.pptx
- 形式邏輯期末考試試卷
- 乒乓球比賽第二階段對(duì)陣圖表
- (高清版)通風(fēng)管道技術(shù)規(guī)程JGJ_T 141-2017
- 機(jī)制砂檢測(cè)報(bào)告
- 省教育廳檢查組接待方案
- 變壓器停、送電操作步驟與注意事項(xiàng)
- 氣動(dòng)潛孔錘施工方案
- 風(fēng)電項(xiàng)目監(jiān)理大綱附錄風(fēng)電工程設(shè)備監(jiān)理項(xiàng)目表
- 云南省教育科學(xué)規(guī)劃課題開(kāi)題報(bào)告 - 云南省教育科學(xué)研究院
評(píng)論
0/150
提交評(píng)論