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