孫慧 湯宇
摘 要:本文從多機(jī)通信協(xié)議入手,重點(diǎn)研究了如何利用查詢法和中斷法實(shí)現(xiàn)主從式通信,并通過Proteus仿真軟件對兩種通信方法進(jìn)行了仿真驗(yàn)證。查詢法通信易于實(shí)現(xiàn),但占用單片機(jī)內(nèi)部資源較多。中斷法通信更穩(wěn)定可靠,可以大大提高單片機(jī)的工作效率。
關(guān)鍵詞:單片機(jī) 多機(jī)通信 查詢法 中斷法 Proteus仿真
單片機(jī)目前已廣泛應(yīng)用于家用電器、航空航天、儀器儀表及專用設(shè)備的智能化管理和過程控制等領(lǐng)域。隨著計算機(jī)技術(shù)的發(fā)展及工業(yè)自動化水平的提高,在許多場合單機(jī)控制已不能滿足現(xiàn)場要求,多機(jī)串行通信構(gòu)成的主從式通信方式,因其通信編程靈活、硬件簡潔,并遵循統(tǒng)一的標(biāo)準(zhǔn),在工業(yè)控制領(lǐng)域應(yīng)用前景廣闊,非常具有研究意義。
一、多機(jī)通信原理
51系列單片機(jī)的多機(jī)通信一般采用主從式通信方式。在這種方式中,只有一臺主機(jī),可以有多臺從機(jī)。主機(jī)發(fā)送的信息可以傳到各個從機(jī)或指定的從機(jī),各個從機(jī)發(fā)送的信息只能被主機(jī)接收,從機(jī)之間不能進(jìn)行通信。單片機(jī)多機(jī)通信示意圖如圖1所示。
圖1 單片機(jī)多機(jī)通信示意圖
二、多機(jī)通信過程
在多機(jī)通信時串口必須工作在方式2或方式3,根據(jù)通信要求設(shè)置單片機(jī)通信控制寄存器SCON中的每一位。
多機(jī)通信的過程如下。
第一,所有從機(jī)處于地址幀接收狀態(tài)(SM2=1)。
第二,主機(jī)先發(fā)送一個地址幀,其中前8位數(shù)據(jù)表示要尋址的從機(jī)地址,第9位為1(TB8=1)表示該幀為地址幀。
第三,所有從機(jī)接收到地址幀后,把接收到的地址與本機(jī)地址相比較。地址相符時將SM2清0,并發(fā)回從機(jī)地址作為應(yīng)答信號,由主機(jī)進(jìn)行確認(rèn)。地址不相符的從機(jī)不作任何處理,仍保持SM2=1。
第四,在主機(jī)確認(rèn)地址正確時,向?qū)ぶ返膹臋C(jī)發(fā)送相應(yīng)的數(shù)據(jù)信息。當(dāng)確認(rèn)地址錯誤時,不發(fā)送數(shù)據(jù)信息。
第五,地址相符的從機(jī)(SM2=0),可以接收到主機(jī)發(fā)來的數(shù)據(jù)信息。而對于地址不符的從機(jī)SM2=1,則不予理睬,這樣就實(shí)現(xiàn)了主機(jī)與地址相符的從機(jī)之間的雙機(jī)通信;
第六,被尋址的從機(jī)通信結(jié)束后,恢復(fù)為多機(jī)通信狀態(tài)(SM2=1)。
三、多機(jī)通信協(xié)議設(shè)計
本次設(shè)計為了驗(yàn)證多機(jī)通信的協(xié)議是否正確,在Proteus軟件中繪制了一個由1主機(jī)2從機(jī)構(gòu)成的多機(jī)通信系統(tǒng)。主機(jī)和從機(jī)芯片均采用AT89S51單片機(jī),主機(jī)通過按鍵發(fā)送信號,從機(jī)接收信號,通過從機(jī)連接的數(shù)碼管顯示變化,來表明一個主機(jī)和兩個及兩個以上從機(jī)通信的正確性,軟件部分主要包括通信模塊、按鍵掃描模塊、數(shù)碼管顯示模塊和中斷服務(wù)程序等,使用的通信模式主要是查詢法和中斷法兩種。
1.查詢法通信協(xié)議算法設(shè)計
查詢法即通過單片機(jī)程序的不斷掃描,循環(huán)查詢通信標(biāo)志位來判斷是否進(jìn)行通信以及和哪個從機(jī)通信的方式,從而完成主從式多機(jī)之間的數(shù)據(jù)交換任務(wù)。主機(jī)主要完成尋址及數(shù)據(jù)發(fā)送,查詢法通信主機(jī)設(shè)計流程圖如圖2所示。
圖2 主機(jī)通信設(shè)計流程圖
從機(jī)主要完成地址校驗(yàn)、數(shù)據(jù)接收和顯示任務(wù)。所有從機(jī)的通信程序相似,只是從機(jī)定義的通信地址不可相同,從機(jī)通信設(shè)計流程圖如圖3所示。
圖3 從機(jī)通信設(shè)計流程圖
2.中斷法通信協(xié)議算法設(shè)計
所有從機(jī)初始時均處于聽命狀態(tài),即SM2=1,以便接收主機(jī)發(fā)來的地址,當(dāng)接收到一幀信息的RB8為“1”時,表示主機(jī)發(fā)送來的是地址信息,所有的從機(jī)均發(fā)生接收中斷,進(jìn)入相應(yīng)的中斷服務(wù)程序,把接收到的地址和本機(jī)地址進(jìn)行比較。如果相符合就令其SM2=0,并向主機(jī)發(fā)回本機(jī)地址以作應(yīng)答,主機(jī)得到應(yīng)答信號并校驗(yàn)成功后,就與該從機(jī)聯(lián)通實(shí)現(xiàn)雙機(jī)通信,準(zhǔn)備接收主機(jī)發(fā)來的命令或數(shù)據(jù)信息,順利實(shí)現(xiàn)地址幀和數(shù)據(jù)幀的分離。而其他的未被尋址從機(jī)保持SM2=1并退出各自的中斷服務(wù)程序。被尋址從機(jī)在通信完成后重新使SM2=1,并退出中斷服務(wù)程序,等待下次通信。
主機(jī)的程序設(shè)計可分為兩部分:一是主程序,主要用于完成按鍵掃描;二是中斷服務(wù)程序,用于完成通信及數(shù)據(jù)的收發(fā)功能。中斷法通信實(shí)際是將圖2中的虛線框部分的掃描程序替換為如圖4所示的中斷服務(wù)程序去執(zhí)行。
圖4 主機(jī)中斷服務(wù)程序設(shè)計流程圖
從機(jī)程序設(shè)計主要分為兩部分,一是主程序,完成數(shù)碼管的顯示任務(wù);二是中斷服務(wù)程序,完成主機(jī)發(fā)送過來的地址校驗(yàn)和數(shù)據(jù)接收等任務(wù)。從機(jī)的中斷服務(wù)程序設(shè)計流程圖如圖5所示。
圖5 從機(jī)中斷服務(wù)程序設(shè)計流程圖
四、多機(jī)通信在Proteus中的仿真
按照上述兩種通訊協(xié)議算法的設(shè)計思路,使用單片機(jī)C語言進(jìn)行編程,采用Keil C51 uVesion3作為調(diào)試工具,用Proteus 作為仿真工具,與Keil C51 uVesion3聯(lián)合調(diào)試,最終成功實(shí)現(xiàn)了1主機(jī)2從機(jī)之間的通信,仿真運(yùn)行圖如圖6所示。
按下K1鍵,對1號從機(jī)的數(shù)碼管顯示值加1,按下K2鍵,對2號從機(jī)的數(shù)碼管顯示值加1。若主機(jī)尋址從機(jī)時發(fā)現(xiàn)地址錯誤,將不進(jìn)行任何操作,此時不會影響其他通信地址正確的從機(jī)的正常通信。
五、結(jié)束語
本設(shè)計的兩種通信方案,均通過了Proteus成功仿真,并在實(shí)際電路中也得到了驗(yàn)證,1臺主機(jī)最多可以同時與255臺從機(jī)進(jìn)行通信。中斷法通信方式因其程序結(jié)構(gòu)簡潔明了、運(yùn)行可靠、占用單片機(jī)內(nèi)部資源較小,因此較查詢法通信方式的應(yīng)用更為廣泛。