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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > AVR學習心得(四)

          AVR學習心得(四)

          作者: 時間:2016-11-10 來源:網(wǎng)絡 收藏
          AVR mega128簡單的串行通訊原理


          單片機同PC通訊是用的都是UART進行通訊,其實各種單片機的串行通訊原理是完全相同的,而不同的僅僅是器控制的寄存器不同。對于mega128來說比51功能強大些,完全不用占用任何別的資源。只要控制好相應的寄存器就好了。

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

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

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

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

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

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

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

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

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

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

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

          &8226; Bit 5:4 – UPMn1:0: 奇偶校驗模式
          這兩位設置奇偶校驗的模式并使能奇偶校驗。如果使能了奇偶校驗,那么在發(fā)送數(shù)據(jù),發(fā)送器都會自動產(chǎn)生并發(fā)送奇偶校驗位。對每一個接收到的數(shù)據(jù),接收器都會產(chǎn)生一奇偶值,并與UPMn0所設置的值進行比較。如果不匹配,那么就將UCSRnA中的UPEn置位。

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

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

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

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

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

          附:實驗程序

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

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

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

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

          }



          關鍵詞: AVR學習心

          評論


          技術專區(qū)

          關閉
          看屁屁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); })();