武漢波仕電子公司 2011-3
8051單片機的串行通信里可以支持多處理器通信,本文討論的就是這方面的技巧。不過若連接的對象是PC機時,(9600bps,n,8,1)反而是最常用的通信格式,所以本文介紹的是要實現多個8051單片機與PC機的連接實例,因為PC機身我們身邊最常用且最方便取得外部設備,當然你也可以用兩塊8051單片機做串口通信實驗。
8051單片機串行傳輸模式2和模式3可以做多處理器通信,其中的重點正在SCON寄存器的SM2位和TB8及RB8位上,這幾位就決定了多處理器通信的核心。至于波特率的問題,只要發送與接收的雙方一致即可。圖1 是一個典型的多處理器通信的連接示意圖。

多處理器通信與RS-232的一對一通信的最大的差異就是多了一個地址傳輸碼。一對一通信時,我送數據就輪到你接收,而你送數據時就換成為我接收,完全沒有商量的余地。但是多處理器通信時,主CPU發出的信息如何正確地傳到某個從CPU呢?針對這個問題,在多處理器系統中每一個從CPU都有其特定的編號(也有人稱為ID),在數據傳輸前面個從CPU都處于待命的狀態,當主CPU指定到某個特定的從CPU時,改從CPU才開始接收或發送數據,而這項指定特定從CPU的操作,實際上就是送出地址ID值,每個從CPU上的程序收到地址后,會先判斷一下是否叫到要啟動,若屬實則開始執行啟動的所有程序。接下來我們用一步一步說明的方式,詳細介紹多處理器通信額程序。
在多處理器通信中我們一直提到“地址傳送”,在串行通信時,我們如何去辨別地址值(Adress)和數據(Data)呢?這正是8051串行模式2和模式3的魅力所在。當8051工作在以上兩個模式時,除了數據占8位外,傳輸時多了一個TB8位,接收時則多了一個RB8位。在多處理器通信時,當TB8=1代表正傳輸一個地址值,該地址值有8位寬,所以理論上可以連接256個CPU在同一個系統中。TB=0代表正在傳輸一個數據值,在此串行傳輸線上,每筆串行數據共有11個位,但其中以第10個位的狀態來區分地址或數據,接收端可以依此格式立刻判斷出其中的差異來。
在從CPU上通常以串行中斷的方式來對待進來的數據,若把SCON寄存器的SM2位設置成為1時,即允許8051的串行接口做多處理器的地址判斷,在這個模式下:
CPU只在接收地址值(其RB8=1)時才產生中斷要求。
在串行中斷的服務程序上,只要由SBUF內讀回地址值,再做一個判斷是否被調用。若YES時則跳去執行程序設置的操作,若NO時則不做任何操作,隨即結束此中斷服務程序回主程序,被指定到的從CPU先設置成為SM2,然后開始發送或者接收數據,而其他的從CPU并未啟動傳輸,所以此瞬間仍然是一對一的通信,當主CPU在最初的發送地址階段卻是一對多的通信。圖1的連接方式是否可以用RS-232呢?答案是否定的。
當主CPU傳送數據給各從CPU時,如果只有發送其他都是接收的情況下是可以使用RS-232的構架,可是當主CPU欲收數據而其中只有一個從CPU發送時,會造成數據電平沖突,使得主CPU無法由RXD腳上得到正確值。因此,在實際應用上改采用另外一種傳輸規格RS-422,這種傳輸方式只有傳輸的硬件上不同而已,軟件上的串行通信程序都無需做任何修改。波仕電子的H485C型號的轉換器可以實現單片機TTL電平的串口與RS-422之間的相互轉換。RS-422的傳輸線有4條(T+、T—、R+、R—),其連接方式如圖2。注意波仕電子的H485C轉換器還具有將PC機的RS-232轉換為RS-422/485的功能,所以如果上位機的接口上計算機的RS-232口,也一樣可以用H485C。

另外一種常用的多處理器傳輸的接口上RS-485接口,只要2根線就可以將多個CPU連接在一起,這種做法使得數據共享的可能性大為提高,請看圖3的RS-485連線圖。波仕電子的H485C型號的轉換器還可以實現單片機TTL電平的串口與RS-422之間的相互轉換,。當多處理器以RS-422接口連接時,一定有一個主CPU和多個從CPU,若想作從CPU之間的數據傳輸時,所傳輸的路徑是從CPU到主CPU ,然后由主CPU再送給另外一個從CPU。若采用圖3的RS-485構架時,只要傳輸線空閑,任意兩個CPU,無論主從,都可以相互傳輸數據,完全沒有主從之分。若以此構架再做發展時,就形成了現在我們常用的ARCNET或ETHERNET的LAN網絡了。

為什么要將8051的串行口抓換為RS-485呢?首先可以方便地實現多機通信。另外通信距離也有TTL的幾米延長到了1200米!雖然波仕的H485C也可以將PC機的RS-232口轉換為RS-485或者RS-422,但是現在許多新的計算機都已經沒有了RS-232串行口,且操作系統都是WINDOWS。那么就需要加USB到RS-485的轉換器。由于USB的驅動程序幾乎都是WINDOWS版的,所以你只能夠在WINDOWS下與從單片機進行通信。波仕的USB1485型號的轉換器提供了USB與RS-485或者RS-422的轉換。
