一種單片機多機通信系統(tǒng)的設(shè)計
摘要: 融合單片機技術(shù)和計算機網(wǎng)絡(luò)技術(shù),優(yōu)化數(shù)據(jù)包的格式和控制方式以及引入幀檢測序列,設(shè)計基于AT89S52的單片機網(wǎng)絡(luò)的單片機多機通信協(xié)議;系統(tǒng)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)采用總線型;網(wǎng)絡(luò)接口電路采用端口轉(zhuǎn)發(fā)的形式等進(jìn)行單片機多機通信系統(tǒng)的設(shè)計,系統(tǒng)易于擴展且提高了穩(wěn)定性。結(jié)果表明,此系統(tǒng)設(shè)計解決了8位單片機多機通信的問題,實現(xiàn)了客戶機與服戶機間的通信,以及客戶機與客戶機間的通信。
關(guān)鍵字:單片機;通信協(xié)議;數(shù)據(jù)包;幀;網(wǎng)絡(luò)接口
Abstract:By combining the technology of Single-chip Microcomputers and networks, optimizing the pattern and the controlling model of data packets, and introducing frame checking sequences, a protocol of multi-computer communication among Single-chip Microcomputers of the networks based on “AT89S52” is designed. A bus model is adopted by the networks topological structure of the system. To design the system of multi-computer communication among Single-chip Microcomputers, A port transmitting form is adopted by the networks interface circuit. The system is prone to be expanded and the stability of it is advanced. Results indicate that the design makes the problem of multi-computer communication among 8-bit Single-chip Microcomputers work out easily, realizes the communication between a client computer and its server, and realizes the interactive communication among the clients as well.
Keywords: Single-chip Computer;communication protocol; data packet; frame; network interface
1 引言
隨著單片機和計算機技術(shù)的不斷發(fā)展,單片機的應(yīng)用也從獨立的單機向網(wǎng)絡(luò)發(fā)展,由計算機和單片機構(gòu)成的多機網(wǎng)絡(luò)系統(tǒng)已成為單片機技術(shù)發(fā)展的一個方向。二者的結(jié)合,充分發(fā)揮了單片機在實時數(shù)據(jù)采集和數(shù)據(jù)管理上的優(yōu)點。單片機在計算機的網(wǎng)絡(luò)通訊與數(shù)據(jù)傳輸、工業(yè)自動化過程的實時控制和數(shù)據(jù)處理等都有廣泛地應(yīng)用,已滲透到我們生活的各個領(lǐng)域。許多應(yīng)用都涉及到單片機多機通信。然而,單片機對網(wǎng)絡(luò)數(shù)據(jù)的處理方式不同于通用計算機系統(tǒng),尤其是有的單片機只提供8位的數(shù)據(jù)收發(fā)接口,這在一定程度上阻礙了單片機在網(wǎng)絡(luò)方面的應(yīng)用。因此,采用單片機技術(shù)與計算機網(wǎng)絡(luò)技術(shù)相結(jié)合的辦法,對單片機多機通信系統(tǒng)進(jìn)行研究,在設(shè)計單片機網(wǎng)絡(luò)的通信協(xié)議的基礎(chǔ)上,系統(tǒng)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)采用總線型,網(wǎng)絡(luò)接口電路采用端口轉(zhuǎn)發(fā)的形式,實現(xiàn)了8位單片機多機通信。
2 系統(tǒng)網(wǎng)絡(luò)協(xié)議設(shè)計
擬定網(wǎng)絡(luò)容量為1臺服務(wù)機和62臺客戶機,客戶機之間可以相互通信。客戶機和服務(wù)機之間也可以相互通信。設(shè)計的協(xié)議參考了停止等待協(xié)議,數(shù)據(jù)包參考了IP數(shù)據(jù)包而設(shè)計。 經(jīng)過綜合分析和優(yōu)化處理,制定如下單片機多機通信協(xié)議。
(1)服務(wù)機協(xié)議
①服務(wù)機按1/384的間隔發(fā)送詢問數(shù)據(jù)包;
②將當(dāng)前詢問地址加1,判斷,如果大于63則置當(dāng)前詢問地址為1,如果小于1則置當(dāng)前詢問地址為62,轉(zhuǎn)下一步;
③向當(dāng)前詢問地址機器發(fā)送一詢問數(shù)據(jù)包;
④等待一個發(fā)送間隔時間;
⑤如果沒有收到確認(rèn)包則轉(zhuǎn)到將當(dāng)前數(shù)據(jù)包重發(fā),重發(fā)計數(shù)器加1,計數(shù)器大于2則轉(zhuǎn)向⑥;如果收到確認(rèn)包轉(zhuǎn)到⑦;
⑥設(shè)置發(fā)送失敗標(biāo)記,重發(fā)計數(shù)器清0,轉(zhuǎn)到②;
⑦設(shè)置發(fā)送成功標(biāo)記,重發(fā)計數(shù)器清0,轉(zhuǎn)到⑧;
⑧查看被詢問客戶機是否有數(shù)據(jù)要發(fā)送,有則分配總線使用權(quán)和時間片,轉(zhuǎn)到⑨,否則轉(zhuǎn)到②;
⑨等待被詢問客戶機的發(fā)送結(jié)束數(shù)據(jù)包,如果收到轉(zhuǎn)到②。在一個時間片(1/384s)內(nèi),沒有收到,視為超時。服務(wù)機收回總線使用權(quán),轉(zhuǎn)到②。
(2)客戶機協(xié)議
①接收屬于本機的數(shù)據(jù)包;
②如果是詢問數(shù)據(jù)包,檢查本機是否有數(shù)據(jù)要發(fā)送,如果有,則發(fā)送“有數(shù)據(jù)發(fā)送信息”到服務(wù)機,并捎帶確認(rèn)轉(zhuǎn)到③,否則發(fā)送“沒有數(shù)據(jù)發(fā)送信息”到服務(wù)機,并捎帶確認(rèn),轉(zhuǎn)到①;其它類型數(shù)據(jù)包不處理,轉(zhuǎn)到①;
③等待網(wǎng)絡(luò)資源分配數(shù)據(jù)包,收到則發(fā)送確認(rèn)包,轉(zhuǎn)到⑤;超時,停止等待轉(zhuǎn)到①;
④等待上一數(shù)據(jù)包的確認(rèn),收到則轉(zhuǎn)到⑤,否則轉(zhuǎn)到⑦;
⑤檢查是否還有數(shù)據(jù)要發(fā)送,有則發(fā)送數(shù)據(jù)包轉(zhuǎn)到⑥;否則發(fā)送“結(jié)束發(fā)送信息”到服務(wù)機,轉(zhuǎn)到①。
⑥檢查是否超時,如果超時結(jié)束發(fā)送轉(zhuǎn)到①,否則轉(zhuǎn)到④。
⑦重發(fā),是否超過兩次,是則當(dāng)前發(fā)送失敗,轉(zhuǎn)到⑤,否則轉(zhuǎn)到④。
因此,每發(fā)一數(shù)據(jù)包都會請求對方的確認(rèn),如果沒有確認(rèn),則會再重發(fā)一次,超過兩次則被視為對方不可達(dá),發(fā)送失??;并且在被詢問客戶機有數(shù)據(jù)發(fā)送時,如果總線空閑,服務(wù)機將分配其使用時間片,在這個時間片內(nèi),如果數(shù)據(jù)未發(fā)送完成,服務(wù)機將強行收回。能發(fā)送完成,客戶機要發(fā)送結(jié)束數(shù)據(jù)包,歸還總線使用權(quán)。
3 系統(tǒng)網(wǎng)絡(luò)拓?fù)湓O(shè)計
選用總線型網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),各站直接連在總線上,由服務(wù)機統(tǒng)一管理網(wǎng)絡(luò)總線,分配網(wǎng)絡(luò)資源。使用類似于令牌總線網(wǎng)的協(xié)議,由服務(wù)機輪詢每一客戶機是否有數(shù)據(jù)發(fā)送,如果有分配發(fā)送時間,移交總線使用權(quán),否則詢問下一客戶機;其中接口電路會將所接收到信號中繼,并轉(zhuǎn)發(fā)。因此網(wǎng)絡(luò)中任意一臺機器所發(fā)送的數(shù)據(jù)對其它機器都是可見的,并且在一定程度上保證了信號的可靠性。
系統(tǒng)網(wǎng)絡(luò)拓?fù)湓O(shè)計如下圖所示:
圖1系統(tǒng)網(wǎng)絡(luò)拓?fù)湓O(shè)計
4 網(wǎng)絡(luò)接口電路的功能與設(shè)計
(1)網(wǎng)絡(luò)接口電路的功能
網(wǎng)絡(luò)接口電路完成的主要功能如下:①完成網(wǎng)絡(luò)數(shù)據(jù)元的接收;②對接收到的數(shù)據(jù)元轉(zhuǎn)發(fā)給其它端口;③多端口機制,端口間相互轉(zhuǎn)發(fā);④提交收到的數(shù)據(jù)元;⑤中繼收到的數(shù)據(jù)元;⑥提供網(wǎng)絡(luò)狀態(tài)信號;⑦各端口之間同構(gòu),使用交叉線。
(2)網(wǎng)絡(luò)接口電路的設(shè)計
為實現(xiàn)上述功能要求,網(wǎng)絡(luò)接口電路設(shè)計時一共采用了四片74HC245芯片,共同承擔(dān)數(shù)據(jù)的收發(fā)工作,其中每一塊芯片對應(yīng)一個端口。在外表現(xiàn)為三個端口,這是因為有一個端口被本機占用,電路已布置在線路板上。各端口之間用交叉線連接,當(dāng)檢測到收線上有信號時,芯片開始啟動工作,將信號分成三路中繼出來,一路發(fā)給單片機,其它兩種發(fā)給另外的兩個端口。在收方的收收線上如果檢測到同樣的信號,則進(jìn)行同樣的操作。當(dāng)單片機向外界發(fā)送數(shù)據(jù)時,就啟動對應(yīng)于單片機收發(fā)端口上的芯片,將信號中繼后發(fā)送給另外的三個端口,并隨時檢測收線信號的變化,一旦檢測到電平信號由高倒低的變化一次,即說明有數(shù)據(jù)需要接收,接收完后將產(chǎn)生一中斷信號,啟動處理程序進(jìn)行處理。
網(wǎng)絡(luò)接口電路中設(shè)計了網(wǎng)絡(luò)狀態(tài)信號BUS,當(dāng)各芯片都沒有工作時,表示網(wǎng)絡(luò)中沒有數(shù)據(jù)傳輸,這時BUS經(jīng)非門電路取反變成低電平,與單片機二號中斷引腳相連,單片機可以通過這一引腳撐握網(wǎng)絡(luò)狀態(tài),實現(xiàn)數(shù)據(jù)包的發(fā)送。
網(wǎng)絡(luò)接口電路中還設(shè)計了指標(biāo)信號,當(dāng)收到數(shù)據(jù)時信號便置高,這時接在信號上的LED發(fā)光管將會發(fā)光,以表示收到數(shù)據(jù)。
5 客戶機與服務(wù)機電路設(shè)計
系統(tǒng)中有客戶機和服務(wù)機兩種不同的電路。將客戶機電路和服務(wù)機電路整合在一個電路板上,即兩種電路用同一塊電路板表現(xiàn)出來。
對于客戶機,客戶不需要部門控制電路,但其需要編址,故需要地址獲取電路。
對于服務(wù)機,它不需要編址,統(tǒng)一固定為65這一地址,故不需要地址獲取這一部分電路。服務(wù)機擔(dān)負(fù)著整個網(wǎng)絡(luò)的監(jiān)管與輪詢工作。
其它電路客戶機與服務(wù)機均同構(gòu),所以不需要做任何修改。
電路板上,采取不插器件的方式實現(xiàn)兩種不同構(gòu)的電路在同一電路板上實現(xiàn),大大地壓縮開發(fā)成本。
6 系統(tǒng)功能模塊圖
(1) 系統(tǒng)功能:
服務(wù)器部分
① 完成網(wǎng)絡(luò)的輪詢,每隔一定時間向網(wǎng)絡(luò)中的機器發(fā)出詢問數(shù)據(jù)包。
② 讀取ADC數(shù)據(jù),顯示當(dāng)前環(huán)境溫度
③ 控制一個調(diào)風(fēng)閥,顯示電機角度數(shù)據(jù)
④ 掃描鍵盤,提供按鍵控制
⑤ 從網(wǎng)絡(luò)中收集調(diào)風(fēng)閥信息,智能控制風(fēng)機的開啟
⑥ 控制本實驗室照明電路的開、關(guān)
⑦ 能夠接管網(wǎng)絡(luò)中任意一臺客戶機
客戶機部分
① 接收服務(wù)機的輪詢,發(fā)送確認(rèn)數(shù)據(jù)包
② 讀取ADC數(shù)據(jù),顯示當(dāng)前環(huán)境溫度
③ 控制一個調(diào)風(fēng)閥,顯示電機角度數(shù)據(jù)
④ 掃描鍵盤,提供按鍵控制
⑤ 讀取本機地址
⑥ 接收來自服務(wù)器的管理操作
(2)功能劃分:
軟件系統(tǒng)采用模塊化的方式,每個設(shè)備編寫一個驅(qū)動程序。驅(qū)動程序負(fù)責(zé)驅(qū)動其所控制的設(shè)備。并向其它程序提供接口,方便其它程序調(diào)用,控制設(shè)備。
各個驅(qū)動功能劃分如下:
① 數(shù)碼管驅(qū)動程序:驅(qū)動數(shù)據(jù)管顯示,按指定方式顯示數(shù)據(jù)。
② 鍵盤驅(qū)動程序:動態(tài)掃描鍵盤,判別按鍵,并避開電路毛刺。
③ 蜂鳴器驅(qū)動程序:驅(qū)動蜂鳴器安指定方式發(fā)聲。
④ ADC驅(qū)動程序:讀取模數(shù)轉(zhuǎn)換器數(shù)據(jù),并轉(zhuǎn)換為溫度數(shù)值。
⑤ 串口驅(qū)動程序:收發(fā)數(shù)據(jù)包,過濾非本機數(shù)據(jù)包
其中還有一個輪詢模塊,它在時鐘的驅(qū)動下按一定間隔時間向網(wǎng)絡(luò)中各臺客戶機發(fā)送詢問數(shù)據(jù)包。如果兩次沒有收到回應(yīng),則視發(fā)送數(shù)據(jù)包失敗。并能夠向被接管的客戶機發(fā)送管理數(shù)據(jù)包。同樣也需要確認(rèn),超過兩次則視為失敗。
系統(tǒng)功能模塊圖如圖2所示。
圖2 系統(tǒng)功能模塊圖
由圖可知,所有的驅(qū)動程序都掛靠在時鐘中斷上,由時鐘中斷按一定的頻率調(diào)用這些驅(qū)動程序。
7 小結(jié)
系統(tǒng)設(shè)計了一個基于網(wǎng)絡(luò)控制和管理的控制系統(tǒng)。它將計算機機網(wǎng)絡(luò)技術(shù)和單片機技術(shù)進(jìn)行融合,網(wǎng)絡(luò)協(xié)議設(shè)計參考計算機網(wǎng)絡(luò)中的停止等待協(xié)議和TCP/IP協(xié)議,但為了更好的適應(yīng)于單片機處理,優(yōu)化了數(shù)據(jù)包的格式和控制方式,大大提高了處理速度和效率。同時,引入幀檢測序列,提供數(shù)據(jù)包的檢測機制,提高了網(wǎng)絡(luò)的可靠性。系統(tǒng)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)采用總線型,網(wǎng)絡(luò)接口電路采用端口轉(zhuǎn)發(fā)的形式,便于擴展且提高了穩(wěn)定性。此系統(tǒng)設(shè)計功能齊全可以通過服務(wù)器控制整個網(wǎng)絡(luò)的所有客戶機,監(jiān)視所有客戶機運行情況;系統(tǒng)操作簡單,具有一定的經(jīng)濟意義和實用價值。
參考文獻(xiàn)
[1] (美)Christa Anderson.Mark Minasi.Mastering Local Area Networks [M] .出版社Sybex ,1999.
[2] 江曉安.董秀峰.模擬電子技術(shù)[M].西安電子科技大學(xué)出版社,2002.
[3] 張永瑞.楊林耀.張雅蘭.電路分析基礎(chǔ)[M].西安電子科技大學(xué)出版社,2001.
[4] Barry B.Brey.Programming the 80286,80386,80486,and Pentium-Based Personal Computer[M].電子工業(yè)出版社,1998.
[5] 湯子瀛.哲風(fēng)屏.湯小丹.計算機操作系統(tǒng)[M].西安電子科技大學(xué)出版社,1996.
[6] 江曉安.董秀峰.楊頌華.數(shù)字電子技術(shù)[M].西安電子科技大學(xué)出版社,2002.
[7] 周明德.微型計算機系統(tǒng)原理及應(yīng)用[M].清華大學(xué)出版社,1998.
[8] 林雪梅.彭佳紅.姚志成.單片機多機通信協(xié)議的設(shè)計[J] .微計算機信息,2006.2-2:24-26
[9] 張魯國.智能卡操作系統(tǒng)中存儲管理設(shè)計[J] .微計算機信息,2005,8-3:18-19