10KM遠(yuǎn)距多個(gè)單片機(jī)的主從方式串行通信分析
一、問題的提出
51系列單片機(jī)具有方便的串行通信功能,當(dāng)串行口以方式2或方式3工作時(shí),置SM2一l。此種情況下,僅當(dāng)串行口接收到的第9位數(shù)據(jù)RBS為1時(shí),才激活中斷標(biāo)志RI;否則不產(chǎn)生中斷,信息被丟失。利用串行口的這個(gè)特性,便可實(shí)現(xiàn)主機(jī)一分機(jī)的串行通信。
對(duì)于分機(jī)一主機(jī)的通信,可以采用每臺(tái)分機(jī)對(duì)主機(jī)的一對(duì)一通信。這種方式大大增加了主機(jī)的串行接口電路和傳輸電纜。如采用圖1- 47所示結(jié)構(gòu),分機(jī)O~N的輸出串接在一起,則會(huì)造成傳輸線2上信號(hào)紊亂,甚至?xí)龤Х謾C(jī)串行輸出口。
另外,采用TTL電平通信,傳輸距離只有幾米;如果采用RS一232C,傳輸距離也不過幾十米,達(dá)不到10 km范圍內(nèi)的傳輸要求。
為解決上述問題,我們提出一種總線式串行傳輸方式:利用三態(tài)門實(shí)現(xiàn)傳輸線2與未通信分機(jī)的隔離,傳輸線上輸送的串行信號(hào)為已調(diào)制的-12~+12 V方波信號(hào),發(fā)送機(jī)與接收機(jī)用電流環(huán)實(shí)現(xiàn)通信傳輸。
二、總線式串行傳輸方式
設(shè)定主、分機(jī)通信波特率為600 b/s,串行信號(hào)為:O電平調(diào)制成1 200Hz,l電平調(diào)制成2400 Hz的-12~+12 V方波信號(hào)。主、分機(jī)通信電路一致。
1.硬件電路
通信系統(tǒng)硬件電路如圖1- 48所示。圖中,A點(diǎn)邏輯為1時(shí),開通調(diào)制器,允許B點(diǎn)信號(hào)送傳輸線2;A點(diǎn)邏輯為0時(shí),鎖閉調(diào)制器,串行輸出口呈高阻狀態(tài)。
欲啟動(dòng)串行口占用傳輸線2時(shí),首先須檢查傳輸線狀態(tài),即讓PC0=1,PC1發(fā)一個(gè)負(fù)脈沖“U”清74LS74 Q端為0;等待時(shí)間t2后,檢查PC4。若PC4為高電平,則說明已有分機(jī)占用傳輸線2,此時(shí)不能向傳輸線2發(fā)送數(shù)據(jù)。即使發(fā)送數(shù)據(jù),由于Q=l,鎖閉串行口,數(shù)據(jù)也不能送到傳輸線2上。若PC4為低電平,則說明傳輸線2空閑,8031控制8255將PCo置o,開通調(diào)制器。由于U1端為低電平,此時(shí)傳輸線2上的信號(hào)不能引起74LS74 CP端由0到1的翻轉(zhuǎn),74LS74 Q端恒為低電平,該分機(jī)占用傳輸線2。
分機(jī)將數(shù)據(jù)發(fā)送完畢,則置PCo為1,鎖閉調(diào)制器。
2.通信軟件
當(dāng)主機(jī)通過傳輸線l向各分機(jī)發(fā)出呼喚時(shí),數(shù)據(jù)RB8=1;否則RB8=0。主機(jī)呼喚分機(jī)信號(hào)定義如下:
當(dāng)SD7 =1時(shí),主機(jī)對(duì)分機(jī)號(hào)為SD6~SD。的分機(jī)發(fā)出呼喚,接著下一字節(jié)(RB8 -O)向該分機(jī)發(fā)送命令(注冊、控制、咨詢等)。該分機(jī)接收完命令,即向主機(jī)發(fā)送數(shù)據(jù),回答主機(jī)。
當(dāng)SD7=0時(shí),主機(jī)對(duì)任何分機(jī)均無呼喚,SD6=SD。無效,各分機(jī)可以向主機(jī)發(fā)出呼叫,以實(shí)現(xiàn)分機(jī)一主機(jī)的呼叫。為防止同一瞬間兩臺(tái)以上分機(jī)同時(shí)向主機(jī)發(fā)出呼叫,各分機(jī)將此數(shù)據(jù)作為一個(gè)同步信號(hào),以接收到該字節(jié)的時(shí)間為起點(diǎn),根據(jù)分機(jī)號(hào)分別延時(shí)時(shí)間£.,再檢查傳輸線2,啟動(dòng)發(fā)送。
傳輸線2面向某分機(jī)開通,邏輯關(guān)系如下:
檢查傳輸線2狀態(tài),即PC,發(fā)“U”,延時(shí)t2(>111 200 s).使74LS74 Q端能準(zhǔn)確地反映傳輸線2的狀態(tài)。
檢查PC4,若為低電平,則可以啟動(dòng)發(fā)送;若為高電平,則說明傳輸線2上已有數(shù)據(jù)傳輸,不能啟動(dòng)發(fā)送,等待下一個(gè)同步信號(hào)到來時(shí)再試圖啟動(dòng)。
當(dāng)分機(jī)使用完串行口時(shí),即讓PC。=1,關(guān)閉調(diào)制器,使串行口輸出呈高阻狀態(tài)。
主、分機(jī)通信程序處理流程如圖1- 49和圖1- 50所示。圖1- 49中,t主為主機(jī)連續(xù)向分機(jī)發(fā)同步信號(hào)的延時(shí)等待時(shí)間,以等待分機(jī)對(duì)主機(jī)發(fā)出的上一個(gè)同步信號(hào)的響應(yīng)。
t主=ll/600+t2+[t+1]max+tD式中:tD為冗余時(shí)間。
本節(jié)提出的總線式串行通信方式適用于數(shù)據(jù)傳輸量不太大的分布式多機(jī)系統(tǒng)。一臺(tái)主機(jī)最多可連接27臺(tái)分機(jī)。在所需連接分機(jī)臺(tái)數(shù)不多的情況下,可以將主機(jī)呼喚分機(jī)信號(hào)的高位數(shù)據(jù)定義成一些常用命令,以減少主機(jī)一分機(jī)命令字節(jié)的傳輸,提高傳輸速率。
該傳輸方式經(jīng)在多機(jī)分布式警戒系統(tǒng)中試驗(yàn),證明切實(shí)可行。