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