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