以太網多機通訊與一對一通信的最大差異就是,前者需要多傳輸一個地址碼。一對一通信時,主機發送數據后叢集接收,而叢集發送數據是就換成主機接收,無需地址碼。但是當一個主機與多個從機通信時,主機發出的信息如何正確的傳輸到某個從機呢?必須有地址嗎?
針對這個問題,在多計系統中,每一個從機都有其特定的編號(也有人稱為地址或者ID)。在傳輸數據前,各個從機都處于待機接受的狀態。當主機指定到某個特定的從機時,該從機才開始接收或發送數據,而這項指定特定地址從機的操作,實際上就是送出地址碼。每個從機的串口都會收到主機發出的地址碼,然后程序會先判斷一下是否與自己的地址相同,若相同則開始啟動執行程序。
在多機通訊中我們一直提到地址碼,那么在串行通信時,如何去辨別地址值(Address)和數據(Data)呢?這正是MCS-51串行模式2和模式3的魅力所在。當MCS-51工作在以上兩個模式時,除了數據占8位,傳輸時多了一個TB8位,接收時則多了一個RB8位。在多機通信時,當TB8=1代表證傳輸一個地址碼,該地址碼有8位寬,所以理論上講,在同一個系統中可以連接28=256個從機。TB=0代表正在傳輸一個數據值,在此串行傳輸線上,每次串行數據共有11個位,但其中以第10個位的狀態來區分地址或數據,接收端可以依次格式立刻判斷出其中的差異來。
在從機中,通常以串口中斷的方式來對待進來的數據,若把SCON寄存器的SM2位設置成為1時,即允許MCS-51的串行接口進行多從機的地址判斷,在這個模式下,從機只在接收地址值(其RB8=1)時才產生中斷請求。
在串行中斷的服務程序上,只要由SBUF內讀回地址值,就做一個判斷是否被調用。若為YES時則跳去執行程序設置的操作,若為NO時則不作任何操作,隨即結束此中斷服務程序并返回主程序,特定的從機先設置成SM2,然后開始發送或者接收數據,而其他的從機并未啟動傳輸,所以在此瞬間仍然是一對一通信,當主機在最初的發送地址階段卻是一對多的通信。
單片機的串口是TTL電平的,也就是0-5V,傳輸距離最遠只有5m。如果想要遠距離傳輸,還應將TTL電平轉換為RS485電平。MCS-51的多機通信協議未必適合于其他種類的單片機,甚至未必適合于計算機的串口,所以統一RS485多機通信的協議就顯得非常有必要。