AVR串口多機(jī)通訊模式的問(wèn)題
在多機(jī)通信過(guò)程中,所有設(shè)備的RS232接口是并在通信線上的,其中只能有一個(gè)設(shè)備為主機(jī),其他為從機(jī),通信由主機(jī)發(fā)起。數(shù)據(jù)幀一般采用1位起始位、9 位數(shù)據(jù)位,其中第9位(RXB8)被用作為表征該幀是地址幀還是數(shù)據(jù)幀。當(dāng)幀類型表征位為“1”時(shí),表示該幀數(shù)據(jù)為一個(gè)地址幀;當(dāng)幀類型表征位為“0” 時(shí),表示這個(gè)幀為一個(gè)數(shù)據(jù)幀。
更多信息可以點(diǎn)擊:?jiǎn)纹瑱C(jī)常見問(wèn)題
在AVR中,通過(guò)設(shè)置從機(jī)的UCSRA寄存器中標(biāo)志位MPCM,可以使能USART接收器對(duì)接收的數(shù)據(jù)幀進(jìn)行過(guò)濾的功能。如果使能了過(guò)濾功能,從機(jī)接收器對(duì)接收到的那些不是地址信息幀的數(shù)據(jù)幀將進(jìn)行過(guò)濾,不將其放入接收緩沖器中,這在多機(jī)通信中有效的方便了從機(jī)MCU處理數(shù)據(jù)幀程序的編寫(同標(biāo)準(zhǔn)51結(jié)構(gòu)相比)。而發(fā)送器則不受MPCM位設(shè)置的影響。
多機(jī)通信模式允許多個(gè)從機(jī)并在通信線路上,接收一個(gè)主機(jī)發(fā)出的數(shù)據(jù)。通過(guò)對(duì)接收到的地址幀中的地址進(jìn)行解碼,確定哪個(gè)從機(jī)被主機(jī)尋址。如果某個(gè)從機(jī)被主機(jī)尋址,它將接收接下來(lái)主機(jī)發(fā)出的數(shù)據(jù)幀,而其它的從機(jī)將忽略數(shù)據(jù)幀,直到再次接收到一個(gè)地址幀。(從機(jī)地址是由各個(gè)從機(jī)自己的軟件決定的)。
對(duì)于在多機(jī)通信系統(tǒng)中的主機(jī)MCU,可以設(shè)置使用9位數(shù)據(jù)幀結(jié)構(gòu)(UCSZ=7)。當(dāng)發(fā)送地址幀時(shí),置第9位為“1”;發(fā)送數(shù)據(jù)幀時(shí),置第9位為“0”。在這種情況下,從機(jī)也必須設(shè)置成接收9位數(shù)據(jù)幀結(jié)構(gòu)。
多機(jī)通信方式的數(shù)據(jù)交換過(guò)程如下:
1)設(shè)置所有從機(jī)工作在多機(jī)通信模式(MPCM=1)。
2)通信開始是由主機(jī)先發(fā)送一個(gè)地址幀,如8位數(shù)據(jù)為0X01(1號(hào)從機(jī)地址),第9位=“1”,呼叫1號(hào)從機(jī)。
3)所有從機(jī)都接收和讀取該主機(jī)發(fā)出的地址幀。在所有從機(jī)的MCU中,RXC標(biāo)志位被置位,表示接收到地址幀。
4)每一個(gè)從機(jī)MCU讀UDR寄存器,并判斷自己是否被主機(jī)尋址。如果被尋址,清UCSAR寄存器中的MPCM位,等待接收數(shù)據(jù);否則保持MPCM為“1”,等待下一個(gè)地址幀的接收(該步應(yīng)由用戶軟件處理實(shí)現(xiàn)):
A)作為1號(hào)從機(jī)的MCU處理過(guò)程為:收到地址幀后,判定讀取UDR數(shù)據(jù)0X01為自己的地址,將MPCM位置“0”,接收之后所有主機(jī)下發(fā)的數(shù)據(jù)幀,直到下一個(gè)地址幀為止。
? B)其它從機(jī)MCU的處理過(guò)程:收到地址幀后,判定讀取UDR數(shù)據(jù)0X01不是自己的地址,將MPCM位置“1”,這樣他們將忽略主機(jī)隨后發(fā)送的數(shù)據(jù)幀,直到主機(jī)再次發(fā)送地址幀。
5)當(dāng)被尋址的從機(jī)MCU接收完最后一個(gè)數(shù)據(jù)幀后,將MPCM位置位,等待下一個(gè)地址幀的出現(xiàn)(該步也應(yīng)由用戶軟件處理實(shí)現(xiàn)),然后從步驟2開始重復(fù)。
【更多資源】
編輯:admin 最后修改時(shí)間:2018-05-19