單片機雙機通信完成的只是點對點之間的數(shù)據(jù)傳輸,但是,在實際應用中,經(jīng)常會出現(xiàn)由多個單片機構(gòu)成的多機通信系統(tǒng)。
單片機多機通信是指由兩臺以上單片機組成的網(wǎng)絡(luò)結(jié)構(gòu),可以通過串行通信方式共同實現(xiàn)對某一過程的最終控制。多機通信的網(wǎng)絡(luò)拓撲形式較多,可分為星型、環(huán)型和主從式多機型等多種,其中以主從式多機型應用較多。主從式多機通信系統(tǒng)中,一般有一臺主機和多臺從機。主機發(fā)送的信息可以傳送到各個從機或指定從機,從機發(fā)送的信息只能被主機所接收,各從機之間不能直接通信,其結(jié)構(gòu)形式如下圖所示。
由圖可知,主機的RXD、TXD與所有從機的TXD、RXD端相連接,主機發(fā)送的信號可被各從機接收,而各從機發(fā)送的信息則只能由主機接收。
在多機通信系統(tǒng)中,首先要解決的是如何識別從機的問題,其次才是如何發(fā)送數(shù)據(jù)等。
識別從機一般都是通過地址來實現(xiàn),即給從機分別設(shè)定地址信息。MCS-51系列單片機串行通信中的SM2位(多機通信控制位)專門用來識別不同的從機。
MCS-51系列單片機串行口方式2、3很適合主從式的通信結(jié)構(gòu)。當串口以方式2或方式3工作時,發(fā)送和接收的每一幀數(shù)據(jù)都是11位(如下圖所示):1位起始位(0),8位數(shù)據(jù)位(低位在前),一位可設(shè)置的第9位數(shù)據(jù)和一位停止位。其中,第9位數(shù)據(jù)位可用于識別發(fā)送的前8位數(shù)據(jù)是地址幀還是數(shù)據(jù)幀,為1則為地址幀,為0則為數(shù)據(jù)幀,此位可通過對SCON寄存器的TB8位賦值來置位。當TB8為1時,單片機發(fā)出的一幀數(shù)據(jù)中的第9位為1,否則為0。
作為接收方的串行口同樣工作在方式2或方式3狀態(tài),它的SM2和RB8(接收到的第9位)的組合有如下的特性。
·若從機的控制位SM2設(shè)為1,則當接收數(shù)據(jù)的第9位是l時,即地址幀時,數(shù)據(jù)裝入SBUF,并置RI為l,向CPU發(fā)出中斷申請;當接收數(shù)據(jù)的第9位是0時,即數(shù)據(jù)幀時,不會產(chǎn)生中斷,信息被丟棄。
·若SM2設(shè)為0,則無論是地址幀還是數(shù)據(jù)幀都將產(chǎn)生RI=1中斷標志,8位數(shù)據(jù)均裝入SBUF。
利用這個特征,單片機在進行主從式多機通信時,系統(tǒng)初始化后,所有從機的SM2均置為1,并處于允許串行口中斷接收狀態(tài);主機要與某一從機通信時,首先向所有從機發(fā)出地址幀,由于各從機的SM2=1,并處于允許串行口中斷接收狀態(tài),各從機均接收該地址幀,從機接收到該地址幀后,申請中斷,轉(zhuǎn)向中斷服務程序,各從機在中斷服務程序里判斷本機地址是否與主機所發(fā)送的地址相同,若相同,該從機將SM2置為0,并向主機發(fā)送回應答信號。此時,只有主機和被呼叫的從機之間能交換數(shù)據(jù)。因為若從機的地址與主機發(fā)送的地址不同,則該從機繼續(xù)維持SM2為1,在主機后來發(fā)來的數(shù)據(jù)和命令時,其第9位數(shù)據(jù)位(RB8)為0,由于SM2為l,從機不會發(fā)生中斷。