ATmega161在嵌入式測控網(wǎng)絡(luò)中的應(yīng)用研究
在實(shí)際的通信過程中,往往會(huì)出現(xiàn)數(shù)據(jù)丟失和數(shù)據(jù)傳輸錯(cuò)誤等通信故障。為了防止數(shù)據(jù)丟失,系統(tǒng)采用了超時(shí)處理的方法。這樣,主站發(fā)送查詢命令后,如果在預(yù)定的時(shí)間內(nèi)沒有收到從站的響應(yīng)信號(hào),可再次發(fā)送一幀查詢命令,以等待對(duì)方響應(yīng)。如果連續(xù)三次發(fā)送后,主站仍然沒有收到正確的響應(yīng),系統(tǒng)將退出并報(bào)警,同時(shí)開始輪詢下一從站。
針對(duì)數(shù)據(jù)出錯(cuò)情況,每幀都增加了累加和校驗(yàn)來對(duì)源地址、目的地址、控制字和信息段進(jìn)行邏輯和運(yùn)算,并將運(yùn)算結(jié)果作為幀結(jié)束前的一個(gè)字符傳送到接收方,而接收方在接收完該幀信息后也將接收到的源地址、目的地址、控制字和信息段作邏輯和運(yùn)算,如果運(yùn)算結(jié)果和收到的運(yùn)算結(jié)果不一致,則廢棄該幀數(shù)據(jù)。如果接收到通信協(xié)議規(guī)定之外的控制字、源地址或目的地址,系統(tǒng)也將廢棄該幀數(shù)據(jù)。
4.2 ATmega161的雙UART寄存器設(shè)置
如前所述,ATmega161帶有兩個(gè)全雙工的可編程通用異步收發(fā)器UART。用戶可通過設(shè)置表1中的9個(gè)寄存器來對(duì)兩個(gè)UART進(jìn)行編程,表內(nèi)括號(hào)中的十六進(jìn)制數(shù)為相應(yīng)的寄存器地址。
以UART0為例,UDR0是兩個(gè)物理分離的數(shù)據(jù)寄存器,它們具有相同的I/O地址,但在讀/寫時(shí),它們將分別訪問不同的寄存器。在兩個(gè)狀態(tài)控制寄存器中,UCSR0A的格式為:
其中,RXC0為接收完成標(biāo)志,TXC0為發(fā)送完成標(biāo)志,UDRE0為數(shù)據(jù)寄存器空標(biāo)志,F(xiàn)E0為幀出錯(cuò)標(biāo)志,OR0為超越出錯(cuò)標(biāo)志,U2X0為雙倍傳輸速度標(biāo)志,MPCM0為多處理器通信標(biāo)志位。另一個(gè)狀態(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分別為波特率寄存器的高位和低位。波特率寄存器的計(jì)算公式為:
式中,F(xiàn)ck為晶振頻率,BAUD為波特率,UBRR為寄存器中應(yīng)取的值。
UART1的設(shè)置編程與UARTO基本相同。
4.3部分源代碼
可以使用匯編語言或ANSIC語言編寫源代碼(編譯軟件均可從INTERNET上免費(fèi)下載),編譯生成HEX目標(biāo)文件后,可以通過高速下載線經(jīng)由SPI接口將該目標(biāo)文件下載到ATmega161的FLASH存儲(chǔ)器中。
下面是C語言源代碼的一部分:
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論