<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > AVR學(xué)習(xí)心得(四)

          AVR學(xué)習(xí)心得(四)

          作者: 時(shí)間:2016-11-10 來(lái)源:網(wǎng)絡(luò) 收藏
          AVR mega128簡(jiǎn)單的串行通訊原理


          單片機(jī)同PC通訊是用的都是UART進(jìn)行通訊,其實(shí)各種單片機(jī)的串行通訊原理是完全相同的,而不同的僅僅是器控制的寄存器不同。對(duì)于mega128來(lái)說(shuō)比51功能強(qiáng)大些,完全不用占用任何別的資源。只要控制好相應(yīng)的寄存器就好了。

          ATmega128具有兩個(gè)USART:USART0和USART1,這兩個(gè)USART的具體功能將在下面描述。USART0和USART1使用不同的IO寄存器注意:在ATmega103兼容模式中USART1.UBRR0H和UCRS0C無(wú)效.這意味ATmega128僅可以使用USART0以異步方式工作

          本文引用地址:http://www.ex-cimer.com/article/201611/317329.htm

          USARTn 數(shù)據(jù)寄存器-UDRn:接受和發(fā)送數(shù)據(jù)寄存器

          只有當(dāng)UCSRA寄存器的UDRE標(biāo)志置位后才可以對(duì)發(fā)送緩沖器進(jìn)行寫操作。如果UDRE沒(méi)有置位,那么寫入U(xiǎn)DR 的數(shù)據(jù)會(huì)被USART 發(fā)送器忽略。當(dāng)數(shù)據(jù)寫入發(fā)送緩沖器后,若移位寄存器為空,發(fā)送器將把數(shù)據(jù)加載到發(fā)送移位寄存器。然后數(shù)據(jù)串行地從TxD 引腳輸出。
          接收緩沖器包括一個(gè)兩級(jí)FIFO,一旦接收緩沖器被尋址FIFO 就會(huì)改變它的狀態(tài)。因此不要對(duì)這一存儲(chǔ)單元使用讀- 修改- 寫指令(SBI 和CBI)。使用位查詢指令(SBIC 和SBIS)時(shí)也要小心,因?yàn)檫@也有可能改變FIFO 的狀態(tài)。

          USARTn 控制和狀態(tài)寄存器A -UCSRnA:

          &8226;Bit 7 – RXCn: USART 接收結(jié)束
          接收緩沖器中有未讀出的數(shù)據(jù)時(shí)RXCn 置位,否則清零。接收器禁止時(shí),接收緩沖器被刷新,導(dǎo)致RXCn 清零。RXCn 標(biāo)志可用來(lái)產(chǎn)生接收結(jié)束中斷( 見(jiàn)對(duì)RXCIEn 位的描述)。
          &8226; Bit 6 – TXCn: USART 發(fā)送結(jié)束
          發(fā)送移位緩沖器中的數(shù)據(jù)被送出,且當(dāng)發(fā)送緩沖器 (UDRn) 為空時(shí)TXCn 置位。執(zhí)行發(fā)送結(jié)束中斷時(shí)TXCn 標(biāo)志自動(dòng)清零,也可以通過(guò)寫1 進(jìn)行清除操作。TXCn 標(biāo)志可用來(lái)產(chǎn)生發(fā)送結(jié)束中斷( 見(jiàn)對(duì)TXCIEn 位的描述)。
          &8226; Bit 5 – UDREn: USART 數(shù)據(jù)寄存器空
          UDREn 標(biāo)志指出發(fā)送緩沖器(UDRn) 是否準(zhǔn)備好接收新數(shù)據(jù)。UDREn 為1 說(shuō)明緩沖器為空,已準(zhǔn)備好進(jìn)行數(shù)據(jù)接收。UDREn 標(biāo)志可用來(lái)產(chǎn)生數(shù)據(jù)寄存器空中斷( 見(jiàn)對(duì)UDRIEn位的描述)。復(fù)位后UDREn 置位,表明發(fā)送器已經(jīng)就緒。
          &8226; Bit 4 – FEn: 幀錯(cuò)誤
          如果接收緩沖器接收到的下一個(gè)字符有幀錯(cuò)誤,即接收緩沖器中的下一個(gè)字符的第一個(gè)停止位為0,那么FEn 置位。這一位一直有效直到接收緩沖器(UDRn) 被讀取。當(dāng)接收到的停止位為1 時(shí), FEn 標(biāo)志為0。對(duì)UCSRnA 進(jìn)行寫入時(shí),這一位要寫0。
          &8226; Bit 3 – DORn: 數(shù)據(jù)過(guò)速
          數(shù)據(jù)過(guò)速時(shí)DORn 置位。當(dāng)接收緩沖器滿( 包含了兩個(gè)數(shù)據(jù)),接收移位寄存器又有數(shù)據(jù),若此時(shí)檢測(cè)到一個(gè)新的起始位,數(shù)據(jù)溢出就產(chǎn)生了。這一位一直有效直到接收緩沖器(UDRn) 被讀取。對(duì)UCSRnA 進(jìn)行寫入時(shí),這一位要寫0。
          &8226; Bit 2 – UPEn: 奇偶校驗(yàn)錯(cuò)誤

          當(dāng)奇偶校驗(yàn)使能(UPMn1 = 1),且接收緩沖器中所接收到的下一個(gè)字符有奇偶校驗(yàn)錯(cuò)誤時(shí)UPEn 置位。這一位一直有效直到接收緩沖器 (UDRn) 被讀取。對(duì)UCSRnA 進(jìn)行寫入時(shí),這一位要寫0。
          &8226; Bit 1 – U2Xn: 倍速發(fā)送
          這一位僅對(duì)異步操作有影響。使用同步操作時(shí)將此位清零。此位置1 可將波特率分頻因子從16 降到8,從而有效的將異步通信模式的傳輸速率加倍。
          &8226; Bit 0 – MPCMn: 多處理器通信模式
          設(shè)置此位將啟動(dòng)多處理器通信模式。MPCMn 置位后, USARTn 接收器接收到的那些不包含地址信息的輸入幀都將被忽略。發(fā)送器不受MPCMn 設(shè)置的影響。

          USARTn 控制和狀態(tài)寄存器B -UCSRnB:

          &8226; Bit 7 – RXCIEn: 接收結(jié)束中斷使能
          置位后使能RXCn 中斷。當(dāng)RXCIEn 為1,全局中斷標(biāo)志位SREG 置位,UCSRnA 寄存器的RXCn 亦為1 時(shí)可以產(chǎn)生USARTn 接收結(jié)束中斷。
          &8226; Bit 6 – TXCIE: 發(fā)送結(jié)束中斷使能
          置位后使能TXCn 中斷。當(dāng)TXCIEn 為1,全局中斷標(biāo)志位SREG 置位, UCSRnA 寄存器的TXCn 亦為1 時(shí)可以產(chǎn)生USARTn 發(fā)送結(jié)束中斷。
          &8226; Bit 5 – UDRIEn: USART 數(shù)據(jù)寄存器空中斷使能
          置位后使能UDREn 中斷。當(dāng)UDRIEn 為1,全局中斷標(biāo)志位SREG 置位, UCSRnA 寄存器的UDREn 亦為1 時(shí)可以產(chǎn)生USARTn 數(shù)據(jù)寄存器空中斷。
          &8226; Bit 4 – RXENn: 接收使能
          置位后將啟動(dòng)USARTn 接收器。RxDn 引腳的通用端口功能被USARTn 功能所取代。禁止接收器將刷新接收緩沖器,并使 FEn、DORn 及UPEn 標(biāo)志無(wú)效。
          &8226; Bit 3 – TXENn: 發(fā)送使能
          置位后將啟動(dòng)將啟動(dòng)USARTn 發(fā)送器。TxDn 引腳的通用端口功能被USARTn 功能所取代。TXENn 清零后,只有等到所有的數(shù)據(jù)發(fā)送完成后發(fā)送器才能夠真正禁止,即發(fā)送移位寄存器與發(fā)送緩沖寄存器中沒(méi)有要傳送的數(shù)據(jù)。發(fā)送器禁止后,TxDn 引腳恢復(fù)其通用I/O 功能。
          &8226; Bit 2 – UCSZn2: 字符長(zhǎng)度
          UCSZn2與UCSRnC寄存器的UCSZn1:0結(jié)合在一起可以設(shè)置數(shù)據(jù)幀所包含的數(shù)據(jù)位數(shù)(字符長(zhǎng)度)。
          &8226; Bit 1 – RXB8n: 接收數(shù)據(jù)位8
          對(duì)9 位串行幀進(jìn)行操作時(shí),RXB8n 是第9 個(gè)數(shù)據(jù)位。讀取UDRn 包含的低位數(shù)據(jù)之前首先要讀取RXB8n。
          &8226; Bit 0 – TXB8n: 發(fā)送數(shù)據(jù)位8
          對(duì)9位串行幀進(jìn)行操作時(shí),TXB8n是第9個(gè)數(shù)據(jù)位。寫UDRn之前首先要對(duì)它進(jìn)行寫操作。

          USARTn 控制和狀態(tài)寄存器C -UCSRnC:

          &8226; Bit 7 – 保留位
          該位保留。為與未來(lái)器件兼容,對(duì)UCSRnC 寫入時(shí)該位必須寫0 。
          &8226; Bit 6 – UMSELn: USART 模式選擇
          通過(guò)這一位來(lái)選擇同步或異步工作模式。

          &8226; Bit 5:4 – UPMn1: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)生一奇偶值,并與UPMn0所設(shè)置的值進(jìn)行比較。如果不匹配,那么就將UCSRnA中的UPEn置位。

          &8226; Bit 3 – USBSn: 停止位選擇
          通過(guò)這一位可以設(shè)置停止位的位數(shù)。接收器忽略這一位的設(shè)置。

          &8226; Bit 2:1 – UCSZn1:0: 字符長(zhǎng)度
          UCSZn1:0與UCSRnB寄存器的 UCSZn2結(jié)合在一起可以設(shè)置數(shù)據(jù)幀包含的數(shù)據(jù)位數(shù)(字符長(zhǎng)度)。

          Bit 0 – UCPOLn: 時(shí)鐘極性
          這一位僅用于同步工作模式。使用異步模式時(shí),將這一位清零。UCPOLn 設(shè)置了輸出數(shù)據(jù)的改變和輸入數(shù)據(jù)采樣,以及同步時(shí)鐘XCKn 之間的關(guān)系。

          USART 波特率寄存器-UBRRnL 和UBRRnH:

          &8226; Bit 15:12 – 保留
          這些位是為以后的使用而保留的。為了與以后的器件兼容,寫UBRRnH 時(shí)將這些位清零。
          &8226; Bit 11:0 – UBRRn11:0: USARTn 波特率寄存器
          這個(gè)12 位的寄存器包含了USARTn 的波特率信息。其中UBRRnH 包含了USARTn 波特率高4 位,UBRRnL 包含了低8 位。波特率的改變將造成正在進(jìn)行的數(shù)據(jù)傳輸受到破壞。寫UBRRnL 將立即更新波特率分頻器。

          附:實(shí)驗(yàn)程序

          /*****************************************************
          函 數(shù) 名:void uart_init(void)
          功 能:初始化串口
          說(shuō) 明:根據(jù)要求設(shè)置好波特率和數(shù)據(jù)位
          入口參數(shù):無(wú)
          返 回 值:無(wú)
          *****************************************************/
          void uart_init(void)
          {
          UBRR0H=0; /* 設(shè)置波特率9600,時(shí)鐘8MHz,查表UBRR=51 */
          UBRR0L=51; /* UBR=51 */
          UCSR0B=(1<

          UCSR0C=0x06; /* 設(shè)置數(shù)據(jù)格式,8位數(shù)據(jù)位,1位停止位 */
          }

          /*****************************************************
          函 數(shù) 名:void Uart_Transmit(unsigned char c)
          功 能:向串口發(fā)送一字符(查詢方式)
          說(shuō) 明:只有當(dāng)寄存器UCSRA的UDRE標(biāo)志置位后,才可以對(duì)發(fā)送緩沖進(jìn)行寫操作
          入口參數(shù):無(wú)
          返 回 值:無(wú)
          *****************************************************/
          void Uart_Transmit(unsigned char c)
          {
          while( !( UCSR0A & (1<
          UDR0=c; /* 發(fā)送數(shù)據(jù) */
          }

          /*****************************************************
          函 數(shù) 名:void Uart_Transmits(unsigned char *arr)
          功 能:向串口寫入字符串(查詢方式)
          說(shuō) 明:
          入口參數(shù):無(wú)
          返 回 值:無(wú)
          *****************************************************/
          void Uart_Transmits(unsigned char *arr)
          {
          do
          {
          Uart_Transmit(*arr);
          arr++;
          }while(*arr!=/0);

          }



          關(guān)鍵詞: AVR學(xué)習(xí)心

          評(píng)論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();