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