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