AVR單片機(學習ing)-ATMEGA16的USART與PC機串行通信
3)USART控制和狀態(tài)寄存器B
• Bit 7 – RXCIE: 接收結束中斷使能
置位后使能RXC 中斷。當RXCIE 為1,全局中斷標志位SREG 置位, UCSRA 寄存器
的RXC 亦為1 時可以產生USART 接收結束中斷。
• Bit 6 – TXCIE: 發(fā)送結束中斷使能
置位后使能TXC 中斷。當TXCIE 為1,全局中斷標志位SREG 置位,UCSRA 寄存器的
TXC 亦為1 時可以產生USART 發(fā)送結束中斷。
• Bit 5 – UDRIE: USART 數(shù)據(jù)寄存器空中斷使能
置位后使能UDRE 中斷。當UDRIE 為1,全局中斷標志位SREG 置位,UCSRA 寄存器
的UDRE 亦為1 時可以產生USART 數(shù)據(jù)寄存器空中斷。
• Bit 4 – RXEN: 接收使能
置位后將啟動USART 接收器。RxD 引腳的通用端口功能被USART 功能所取代。禁止
接收器將刷新接收緩沖器,并使 FE、DOR 及PE 標志無效。
• Bit 3 – TXEN: 發(fā)送使能
置位后將啟動將啟動USART 發(fā)送器。TxD 引腳的通用端口功能被USART 功能所取代。
TXEN 清零后,只有等到所有的數(shù)據(jù)發(fā)送完成后發(fā)送器才能夠真正禁止,即發(fā)送移位寄存
器與發(fā)送緩沖寄存器中沒有要傳送的數(shù)據(jù)。發(fā)送器禁止后,TxD引腳恢復其通用I/O功能。
• Bit 2 – UCSZ2: 字符長度
UCSZ2與UCSRC寄存器的UCSZ1:0結合在一起可以設置數(shù)據(jù)幀所包含的數(shù)據(jù)位數(shù)(字符
長度)。
• Bit 1 – RXB8: 接收數(shù)據(jù)位 8
對9 位串行幀進行操作時,RXB8 是第9 個數(shù)據(jù)位。讀取UDR 包含的低位數(shù)據(jù)之前首先
要讀取RXB8。
• Bit 0 – TXB8: 發(fā)送數(shù)據(jù)位8
對9 位串行幀進行操作時,TXB8 是第9 個數(shù)據(jù)位。寫UDR 之前首先要對它進行寫操作。
4)USART控制和轉臺寄存器C
• Bit 7 – URSEL: 寄存器選擇
通過該位選擇訪問UCSRC 寄存器或UBRRH 寄存器。當讀UCSRC 時,該位為1 ;當
寫UCSRC 時, URSEL 為1。
• Bit 6 – UMSEL: USART 模式選擇
通過這一位來選擇同步或異步工作模式。
• Bit 5:4 – UPM1:0: 奇偶校驗模式
這兩位設置奇偶校驗的模式并使能奇偶校驗。如果使能了奇偶校驗,那么在發(fā)送數(shù)據(jù),發(fā)
送器都會自動產生并發(fā)送奇偶校驗位。對每一個接收到的數(shù)據(jù),接收器都會產生一奇偶
值,并與UPM0 所設置的值進行比較。如果不匹配,那么就將UCSRA 中的PE 置位。
• Bit 3 – USBS: 停止位選擇
通過這一位可以設置停止位的位數(shù)。接收器忽略這一位的設置。
• Bit 2:1 – UCSZ1:0: 字符長度
UCSZ1:0與UCSRB寄存器的 UCSZ2結合在一起可以設置數(shù)據(jù)幀包含的數(shù)據(jù)位數(shù)(字符長
度)。
• Bit 0 – UCPOL: 時鐘極性
這一位僅用于同步工作模式。使用異步模式時,將這一位清零。UCPOL 設置了輸出數(shù)據(jù)
的改變和輸入數(shù)據(jù)采樣,以及同步時鐘XCK 之間的關系。
5)USART波特率寄存器
• Bit 15 – URSEL: 寄存器選擇
通過該位選擇訪問UCSRC 寄存器或UBRRH 寄存器。當讀UBRRH 時,該位為0 ;當
寫UBRRH 時, URSEL 為0。
• Bit 14:12 – 保留位
這些位是為以后的使用而保留的。為了與以后的器件兼容,寫UBRRH 時將這些位清零。
• Bit 11:0 – UBRR11:0: USART 波特率寄存器
這個12 位的寄存器包含了USART 的波特率信息。其中UBRRH 包含了USART 波特率
高4 位,UBRRL 包含了低8 位。波特率的改變將造成正在進行的數(shù)據(jù)傳輸受到破壞。寫
UBRRL 將立即更新波特率分頻器。
不同晶振的波特率還是去看datasheet吧~~我看了看好多啊~~~
6、USART的初始化
進行通信之前首先要對USART 進行初始化。初始化過程通常包括波特率的設定,幀結構
的設定,以及根據(jù)需要使能接收器或發(fā)送器。對于中斷驅動的USART 操作,在初始化時
首先要清零全局中斷標志位( 全局中斷被屏蔽)。
重新改變USART 的設置應該在沒有數(shù)據(jù)傳輸?shù)那闆r下進行。TXC 標志位可以用來檢驗
一個數(shù)據(jù)幀的發(fā)送是否已經(jīng)完成, RXC 標志位可以用來檢驗接收緩沖器中是否還有數(shù)據(jù)
未讀出。在每次發(fā)送數(shù)據(jù)之前( 在寫發(fā)送數(shù)據(jù)寄存器UDR 前)TXC 標志位必須清零。
以下是USART 初始化程序示例。例程采用了輪詢( 中斷被禁用) 的異步操作,而且?guī)Y
構是固定的。波特率作為函數(shù)參數(shù)給出。在匯編程序里波特率參數(shù)保存于寄存器r17:r16。
當寫入UCSRC 寄存器時,由于UBRRH 與UCSRC 共用I/O 地址,URSEL 位(MSB) 必
須置位。
void USART_Init( unsigned int baud )
{
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
UCSRB = (1<
UCSRC = (1<
更高級的初始化程序可將幀格式作為參數(shù)、禁止中斷等等。然而許多應用程序使用固定的
波特率與控制寄存器。此時初始化代碼可以直接放在主程序中,或與其它I/O 模塊的初始
化代碼組合到一起。
評論