新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ATmega161在嵌入式測控網(wǎng)絡(luò)中的應(yīng)用研究

ATmega161在嵌入式測控網(wǎng)絡(luò)中的應(yīng)用研究

作者: 時間:2012-03-06 來源:網(wǎng)絡(luò) 收藏

在實際的通信過程中,往往會出現(xiàn)數(shù)據(jù)丟失和數(shù)據(jù)傳輸錯誤等通信故障。為了防止數(shù)據(jù)丟失,系統(tǒng)采用了超時處理的方法。這樣,主站發(fā)送查詢命令后,如果在預(yù)定的時間內(nèi)沒有收到從站的響應(yīng)信號,可再次發(fā)送一幀查詢命令,以等待對方響應(yīng)。如果連續(xù)三次發(fā)送后,主站仍然沒有收到正確的響應(yīng),系統(tǒng)將退出并報警,同時開始輪詢下一從站。

針對數(shù)據(jù)出錯情況,每幀都增加了累加和校驗來對源地址、目的地址、控制字和信息段進行邏輯和運算,并將運算結(jié)果作為幀結(jié)束前的一個字符傳送到接收方,而接收方在接收完該幀信息后也將接收到的源地址、目的地址、控制字和信息段作邏輯和運算,如果運算結(jié)果和收到的運算結(jié)果不一致,則廢棄該幀數(shù)據(jù)。如果接收到通信協(xié)議規(guī)定之外的控制字、源地址或目的地址,系統(tǒng)也將廢棄該幀數(shù)據(jù)。

4.2 的雙UART寄存器設(shè)置

如前所述,帶有兩個全雙工的可編程通用異步收發(fā)器UART。用戶可通過設(shè)置表1中的9個寄存器來對兩個UART進行編程,表內(nèi)括號中的十六進制數(shù)為相應(yīng)的寄存器地址。

38.jpg

以UART0為例,UDR0是兩個物理分離的數(shù)據(jù)寄存器,它們具有相同的I/O地址,但在讀/寫時,它們將分別訪問不同的寄存器。在兩個狀態(tài)控制寄存器中,UCSR0A的格式為:

39.jpg

其中,RXC0為接收完成標(biāo)志,TXC0為發(fā)送完成標(biāo)志,UDRE0為數(shù)據(jù)寄存器空標(biāo)志,F(xiàn)E0為幀出錯標(biāo)志,OR0為超越出錯標(biāo)志,U2X0為雙倍傳輸速度標(biāo)志,MPCM0為多處理器通信標(biāo)志位。另一個狀態(tài)控制寄存器UCSR0B的格式為:

該格式中的RXCIE0為接收完成中斷觸發(fā)位,TXCIE0為發(fā)送中斷觸發(fā)位,UDRIE0為數(shù)據(jù)寄存器空中斷觸發(fā)位,RXEN0為接收允許,TXEN0為發(fā)送允許,CHR90為九位數(shù)據(jù)標(biāo)志位,RXB80為收到的數(shù)據(jù)第8位,TXB80為發(fā)送的數(shù)據(jù)第8位。

UBRRHI的低四位和UBRR0分別為波特率寄存器的高位和低位。波特率寄存器的計算公式為:40.jpg

式中,F(xiàn)ck為晶振頻率,BAUD為波特率,UBRR為寄存器中應(yīng)取的值。

UART1的設(shè)置編程與UARTO基本相同。

4.3部分源代碼

可以使用匯編語言或ANSIC語言編寫源代碼(編譯軟件均可從INTERNET上免費下載),編譯生成HEX目標(biāo)文件后,可以通過高速下載線經(jīng)由SPI接口將該目標(biāo)文件下載到的FLASH存儲器中。

下面是C語言源代碼的一部分:

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


評論


相關(guān)推薦

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

關(guān)閉