<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > AVR串口多機通訊模式的問題

          AVR串口多機通訊模式的問題

          作者: 時間:2013-01-24 來源:網(wǎng)絡(luò) 收藏

          在多機通信過程中,所有設(shè)備的是并在通信線上的,其中只能有一個設(shè)備為主機,其他為從機,通信由主機發(fā)起。數(shù)據(jù)幀一般采用1位起始位、9 位數(shù)據(jù)位,其中第9位(RXB8)被用作為表征該幀是地址幀還是數(shù)據(jù)幀。當(dāng)幀類型表征位為“1”時,表示該幀數(shù)據(jù)為一個地址幀;當(dāng)幀類型表征位為“0” 時,表示這個幀為一個數(shù)據(jù)幀。

          中,通過設(shè)置從機的UCSRA寄存器中標(biāo)志位MPCM,可以使能USART接收器對接收的數(shù)據(jù)幀進行過濾的功能。如果使能了過濾功能,從機接收器對接收到的那些不是地址信息幀的數(shù)據(jù)幀將進行過濾,不將其放入接收緩沖器中,這在多機通信中有效的方便了從機MCU處理數(shù)據(jù)幀程序的編寫(同標(biāo)準(zhǔn)51結(jié)構(gòu)相比)。而發(fā)送器則不受MPCM位設(shè)置的影響。

          多機通信模式允許多個從機并在通信線路上,接收一個主機發(fā)出的數(shù)據(jù)。通過對接收到的地址幀中的地址進行解碼,確定哪個從機被主機尋址。如果某個從機被主機尋址,它將接收接下來主機發(fā)出的數(shù)據(jù)幀,而其它的從機將忽略數(shù)據(jù)幀,直到再次接收到一個地址幀。(從機地址是由各個從機自己的軟件決定的)。

          對于在多機通信系統(tǒng)中的主機MCU,可以設(shè)置使用9位數(shù)據(jù)幀結(jié)構(gòu)(UCSZ=7)。當(dāng)發(fā)送地址幀時,置第9位為“1”;發(fā)送數(shù)據(jù)幀時,置第9位為“0”。在這種情況下,從機也必須設(shè)置成接收9位數(shù)據(jù)幀結(jié)構(gòu)。

          多機通信方式的數(shù)據(jù)交換過程如下:

          1)設(shè)置所有從機工作在多機通信模式(MPCM=1)。

          2)通信開始是由主機先發(fā)送一個地址幀,如8位數(shù)據(jù)為0X01(1號從機地址),第9位=“1”,呼叫1號從機。

          3)所有從機都接收和讀取該主機發(fā)出的地址幀。在所有從機的MCU中,RXC標(biāo)志位被置位,表示接收到地址幀。

          4)每一個從機MCU讀UDR寄存器,并判斷自己是否被主機尋址。如果被尋址,清UCSAR寄存器中的MPCM位,等待接收數(shù)據(jù);否則保持MPCM為“1”,等待下一個地址幀的接收(該步應(yīng)由用戶軟件處理實現(xiàn)):

          A)作為1號從機的MCU處理過程為:收到地址幀后,判定讀取UDR數(shù)據(jù)0X01為自己的地址,將MPCM位置“0”,接收之后所有主機下發(fā)的數(shù)據(jù)幀,直到下一個地址幀為止。

          ? B)其它從機MCU的處理過程:收到地址幀后,判定讀取UDR數(shù)據(jù)0X01不是自己的地址,將MPCM位置“1”,這樣他們將忽略主機隨后發(fā)送的數(shù)據(jù)幀,直到主機再次發(fā)送地址幀。

          5)當(dāng)被尋址的從機MCU接收完最后一個數(shù)據(jù)幀后,將MPCM位置位,等待下一個地址幀的出現(xiàn)(該步也應(yīng)由用戶軟件處理實現(xiàn)),然后從步驟2開始重復(fù)。



          關(guān)鍵詞: AVR RS232接口 多機通訊模式

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();