久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學習與研究
當前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

atmega16串口通信

作者:韓冰   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2013年11月29日   【字體:

ATmega16 單片機帶有一個全雙工的通用同步/異步串行收發(fā)模塊USART,該接口是一個高度靈活的串行通訊設(shè)備。其主要特點如下:

全雙工操作,可同時進行收發(fā)操作;

支持同步或異步操作;

支持5、6、7、8 和9 位數(shù)據(jù)位,1 位或者2 位停止位的串行數(shù)據(jù)幀結(jié)構(gòu);

三個完全獨立的中斷,TX 發(fā)送完成,TX 發(fā)送數(shù)據(jù)寄存器空,RX 接收完成;

支持多機通訊模式;

相關(guān)寄存器:

USART 數(shù)據(jù)寄存器—UDR;

USART 控制和狀態(tài)寄存器—UCSRA,UCSRB,UCSRC;

波特率寄存器—UBRRL 和UBRRH;

 

串口背景知識

(1)串行通訊簡介

串行同步通訊容易理解,約定一個同步時鐘,每一時刻傳輸線上的信息就是要傳送的信息單元。串行異步通訊是把 一個字符看作一個獨立的信息單元,每一個字符中的各位是以固定的時間傳送。因此,這種傳送方式在同一字節(jié)內(nèi)部是同步的,而字符間是異步的。在異步通信中收 發(fā)雙方取得同步的方法是采用在字符格式中設(shè)置起始位,而在字符結(jié)束時發(fā)送1~2 個停止位。當接收器檢測到起始位時,便能知道經(jīng)接著的是有效的字符位,于是開始接收字符,檢測到停止位時,就將接收到的有效字符裝載到接收緩沖器中。最簡單的串口通信使用3根線完成:(1)地線,(2)發(fā)送,(3)接收。由于串口通信是異步的,端口能夠在一根線上發(fā)送數(shù)據(jù)同時在另一根線上接收數(shù)據(jù)。其他線用于握手,但是不是必須的。串口通信最重要的參數(shù)是波特率、數(shù)據(jù)位、停止位和奇偶校驗。對于兩個進行通行的端口,這些參數(shù)必須匹配:


a,波特率:這是一個衡量通信速度的參數(shù)。它表示每秒鐘傳送的bit的個數(shù)。例如300波特表示每秒鐘發(fā)送300個bit。當我們提到時鐘周期時,我們就是指波特率例如如果協(xié)議需要4800波特率,那么時鐘是4800Hz。這意味著串口通信在數(shù)據(jù)線上的采樣率為4800Hz。通常電話線的波特率為14400,28800和36600。波特率可以遠遠大于這些值,但是波特率和距離成反比。高波特率常常用于放置的很近的儀器間的通信,典型的例子就是GPIB設(shè)備的通信。


b,數(shù)據(jù)位:這是衡量通信中實際數(shù)據(jù)位的參數(shù)。當計算機發(fā)送一個信息包,實際的數(shù)據(jù)不會是8位的,標準的值是5、7和8位。如何設(shè)置取決于你想傳送的信息。比如,標準的ASCII碼是0~127(7位)。擴展的ASCII碼是0~255(8位)。如果數(shù)據(jù)使用簡單的文本(標準 ASCII碼),那么每個數(shù)據(jù)包使用7位數(shù)據(jù)。每個包是指一個字節(jié),包括開始/停止位,數(shù)據(jù)位和奇偶校驗位。由于實際數(shù)據(jù)位取決于通信協(xié)議的選取,術(shù)語“包”指任何通信的情況。


c,停止位:用于表示單個包的最后一位。典型的值為1,1.5和2位。由于數(shù)據(jù)是在傳輸線上定時的,并且每一個設(shè)備有其自己的時鐘,很可能在通信中兩臺設(shè)備間出現(xiàn)了小小的不同步。因此停止位不僅僅是表示傳輸?shù)慕Y(jié)束,并且提供計算機校正時鐘同步的機會。適用于停止位的位數(shù)越多,不同時鐘同步的容忍程度越大,但是數(shù)據(jù)傳輸率同時也越慢。


d,奇偶校驗位:在串口通信中一種簡單的檢錯方式。有四種檢錯方式:偶、奇、高和低。當然沒有校驗位也是可以的。對于偶和奇校驗的情況,串口會設(shè)置校驗位(數(shù)據(jù)位后面的一位),用一個值確保傳輸?shù)臄?shù)據(jù)有偶個或者奇?zhèn)邏輯高位。例如,如果數(shù)據(jù)是011,那么對于偶校驗,校驗位為0,保證邏輯高的位數(shù)是偶數(shù)個。如果是奇校驗,校驗位位1,這樣就有3個邏輯高位。高位和低位不真正的檢查數(shù)據(jù),簡單置位邏輯高或者邏輯低校驗。這樣使得接收設(shè)備能夠知道一個位的狀態(tài),有機會判斷是否有噪聲干擾了通信或者是否傳輸和接收數(shù)據(jù)是否不同步

 

通常異步通信的格式如圖:

USART 接受以下30 種組合的數(shù)據(jù)幀格式:

• 1 個起始位

• 5、 6、 7、 8 或9 個數(shù)據(jù)位

• 無校驗位、奇校驗或偶校驗位

• 1或2 個停止位

數(shù)據(jù)幀以起始位開始;緊接著是數(shù)據(jù)字的最低位,數(shù)據(jù)字最多可以有9 個數(shù)據(jù)位,以數(shù)據(jù)的最高位結(jié)束。如果使能了校驗位,校驗位將緊接著數(shù)據(jù)位,最后是結(jié)束位。當一個完整的數(shù)據(jù)幀傳輸后,可以立即傳輸下一個新的數(shù)據(jù)幀,或使傳輸線處于空閑狀態(tài)。

數(shù)據(jù)幀的結(jié)構(gòu)由UCSRB 和 UCSRC 寄存器中的UCSZ2:0、 UPM1:0、USBS 設(shè)定。接收與發(fā)送使用相同的設(shè)置。設(shè)置的任何改變都可能破壞正在進行的數(shù)據(jù)傳送與接收。

(2)串口的組成

串口由陰陽兩種接口組成。最常使用的信號引腳是TD、RD 和SG,因此最簡單的串口調(diào)試只需要包含3 條引線就可以了。在RS232(一種串行工業(yè)總線標準)標準中,利用RD、TD 作為接收、發(fā)送信號線,加入地線,約定好通訊的波特率,實現(xiàn)串行信號傳輸。

(3)串口電平轉(zhuǎn)換電路

PC 的串口工作TTL 信號是12V 的,而在我們一般使用的電路板上,電源信號和TTL 電平是5V 的(在低功耗電路中是3.3V 的),為了將信號轉(zhuǎn)化為可用,需要做串口的電平轉(zhuǎn)換。這一部分電路已經(jīng)有相應的生產(chǎn)廠商做出了各種集成芯片,例如MAXIM 公司的MAX232/MAX233 芯片,就是實現(xiàn)5V 電路中和PC 實現(xiàn)串口通信的電平轉(zhuǎn)換芯片,而MAX3232/MAX3233 可以實現(xiàn)3.3V 的電平轉(zhuǎn)換。

 

 

串口寄存器介紹

USART I/O 數(shù)據(jù)寄存器- UDR

USART 發(fā)送數(shù)據(jù)緩沖寄存器和USART 接收數(shù)據(jù)緩沖寄存器共享相同的I/O 地址,稱為USART 數(shù)據(jù)寄存器或UDR。將數(shù)據(jù)寫入UDR 時實際操作的是發(fā)送數(shù)據(jù)緩沖器存器(TXB),讀UDR 時實際返回的是接收數(shù)據(jù)緩沖寄存器(RXB) 的內(nèi)容。在5、6、7 比特字長模式下,未使用的高位被發(fā)送器忽略,而接收器則將它們設(shè)置為0。只有當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)。

 

 

USART 控制和狀態(tài)寄存器A -UCSRA

• Bit 7 – RXC: USART 接收結(jié)束

接收緩沖器中有未讀出的數(shù)據(jù)時RXC 置位,否則清零。接收器禁止時,接收緩沖器被刷新,導致RXC 清零。RXC 標志可用來產(chǎn)生接收結(jié)束中斷( 見對RXCIE 位的描述)。

• Bit 6 – TXC: USART 發(fā)送結(jié)束

發(fā)送移位緩沖器中的數(shù)據(jù)被送出,且當發(fā)送緩沖器 (UDR) 為空時TXC 置位。執(zhí)行發(fā)送結(jié)束中斷時TXC 標志自動清零,也可以通過寫1 進行清除操作。TXC 標志可用來產(chǎn)生發(fā)送結(jié)束中斷( 見對TXCIE 位的描述)。

 

• Bit 5 – UDRE: USART 數(shù)據(jù)寄存器空

UDRE標志指出發(fā)送緩沖器(UDR)是否準備好接收新數(shù)據(jù)。UDRE為1說明緩沖器為空,已準備好進行數(shù)據(jù)接收。UDRE標志可用來產(chǎn)生數(shù)據(jù)寄存器空中斷(見對UDRIE位的描述)。復位后UDRE 置位,表明發(fā)送器已經(jīng)就緒。

• Bit 4 – FE: 幀錯誤

如果接收緩沖器接收到的下一個字符有幀錯誤,即接收緩沖器中的下一個字符的第一個停止位為0,那么FE 置位。這一位一直有效直到接收緩沖器(UDR) 被讀取。當接收到的停止位為1 時, FE 標志為0。對UCSRA 進行寫入時,這一位要寫0。

• Bit 3 – DOR: 數(shù)據(jù)溢出

數(shù)據(jù)溢出時DOR 置位。當接收緩沖器滿( 包含了兩個數(shù)據(jù)),接收移位寄存器又有數(shù)據(jù),若此時檢測到一個新的起始位,數(shù)據(jù)溢出就產(chǎn)生了。這一位一直有效直到接收緩沖器(UDR) 被讀取。對UCSRA 進行寫入時,這一位要寫0。

• Bit 2 – PE: 奇偶校驗錯誤

當奇偶校驗使能(UPM1 = 1),且接收緩沖器中所接收到的下一個字符有奇偶校驗錯誤時UPE 置位。這一位一直有效直到接收緩沖器 (UDR) 被讀取。對UCSRA 進行寫入時,這一位要寫0。

• Bit 1 – U2X: 倍速發(fā)送

這一位僅對異步操作有影響。使用同步操作時將此位清零。此位置1 可將波特率分頻因子從16 降到8,從而有效的將異步通信模式的傳輸速率加倍。

• Bit 0 – MPCM: 多處理器通信模式

設(shè)置此位將啟動多處理器通信模式。MPCM 置位后, USART 接收器接收到的那些不包含地址信息的輸入幀都將被忽略。發(fā)送器不受MPCM設(shè)置的影響。詳細信息請參考 P150“多處理器通訊模式” 。

 

 

USART 控制和狀態(tài)寄存器B -UCSRB

• Bit 7 – RXCIE: 接收結(jié)束中斷使能

置位后使能RXC 中斷。當RXCIE 為1,全局中斷標志位SREG 置位, UCSRA 寄存器的RXC 亦為1 時可以產(chǎn)生USART 接收結(jié)束中斷。

• Bit 6 – TXCIE: 發(fā)送結(jié)束中斷使能

置位后使能TXC 中斷。當TXCIE 為1,全局中斷標志位SREG 置位,UCSRA 寄存器的TXC 亦為1 時可以產(chǎn)生USART 發(fā)送結(jié)束中斷。

• Bit 5 – UDRIE: USART 數(shù)據(jù)寄存器空中斷使能

置位后使能UDRE 中斷。當UDRIE 為1,全局中斷標志位SREG 置位,UCSRA 寄存器的UDRE 亦為1 時可以產(chǎn)生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結(jié)合在一起可以設(shè)置數(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 之前首先要對它進行寫操作。

 

 

USART 控制和狀態(tài)寄存器C -UCSRC

• Bit 7 – URSEL: 寄存器選擇

通過該位選擇訪問UCSRC 寄存器或UBRRH 寄存器。當讀UCSRC 時,該位為1 ;當寫UCSRC 時, URSEL 為1。

• Bit 6 – UMSEL: USART 模式選擇

通過這一位來選擇同步或異步工作模式。

• Bit 5:4 – UPM1:0: 奇偶校驗模式

這兩位設(shè)置奇偶校驗的模式并使能奇偶校驗。如果使能了奇偶校驗,那么在發(fā)送數(shù)據(jù),發(fā)送器都會自動產(chǎn)生并發(fā)送奇偶校驗位。對每一個接收到的數(shù)據(jù),接收器都會產(chǎn)生一奇偶值,并與UPM0 所設(shè)置的值進行比較。如果不匹配,那么就將UCSRA 中的PE 置位。

• Bit 3 – USBS: 停止位選擇

通過這一位可以設(shè)置停止位的位數(shù)。接收器忽略這一位的設(shè)置。

• Bit 2:1 – UCSZ1:0: 字符長度

UCSZ1:0與UCSRB寄存器的 UCSZ2結(jié)合在一起可以設(shè)置數(shù)據(jù)幀包含的數(shù)據(jù)位數(shù)(字符長度)。

• Bit 0 – UCPOL: 時鐘極性

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

 

 

USART 波特率寄存器- UBRRL和UBRRH

UCSRC寄存器與UBRRH寄存器共用相同的I/O地址。

• 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 將立即更新波特率分頻器。

 

 

進行通信之前首先要對USART 進行初始化。初始化過程通常包括波特率的設(shè)定,幀結(jié)構(gòu)的設(shè)定,以及根據(jù)需要使能接收器或發(fā)送器。對于中斷驅(qū)動的USART 操作,在初始化時首先要清零全局中斷標志位( 全局中斷被屏蔽)

串口初始化:

使用串口->使能接收 ->使能發(fā)送->波特率(本例使用 9600)->奇偶校驗(disable)->數(shù)據(jù)位數(shù)(8bit)->中斷(RX Complete interrupt)

 

//ICC-AVR application builder : 2007-5-10 下午 08:51:56

// Target : M16

// Crystal: 11.059Mhz

 

//UART0 initialisation

// desired baud rate: 9600

// actual: baud rate:9600 (0.0%)

// char size: 8 bit

// parity: Disabled

void uart0_init(void)

{

 UCSRB = 0x00; //disable while setting baud rate

 UCSRA = 0x00;

 UCSRC = 0x86;

 UBRRL = 0x47; //set baud rate lo

 UBRRH = 0x00; //set baud rate hi

 UCSRB = 0x98;

}

//省略了端口初始化

//call this routine to initialise all peripherals

void init_devices(void)   

{

 //stop errant interrupts until set up

 CLI(); //disable all interrupts

 port_init();

 uart0_init();    //注意這句  調(diào)用串口初始化

 

 MCUCR = 0x00;

 GICR  = 0x00;

 TIMSK = 0x00; //timer interrupt sources

 SEI(); //re-enable interrupts

 //all peripherals are now initialised

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 欧美电影网 | 国产网站在线播放 | 国产午夜精品一区二区三区四区 | 羞羞的视频免费观看 | 91精品国产91久久久久久最新 | 日韩在线三级 | 国产亚洲精品久久久优势 | 国产精品免费看 | 欧美成人精品激情在线观看 | 91精品国产综合久久久久久丝袜 | 久久这里只有精品首页 | 日本在线免费视频 | 一区二区三区亚洲 | 干一干操一操 | 久久久精彩视频 | 黄色电影在线免费观看 | 高清久久久| 亚洲成人免费网址 | 99精品国自产在线 | 久久视频一区 | 在线免费激情视频 | 在线看片网站 | 国产精品视频免费观看 | 日韩中文字幕一区 | 欧美在线a| 日本在线你懂的 | 欧美视频一区二区三区 | caoporn国产精品免费公开 | 亚洲成av人片在线观看无码 | 欧美一级黄色免费看 | 国产高清亚洲 | 国产一区二区影院 | 成人免费在线播放视频 | 国产精品一区二区久久 | 日本中出视频 | 国产精品一区二区无线 | 成年人在线观看视频 | h视频在线播放 | 欧美一区二区三区一在线观看 | 日韩精品在线看 | 国产高清无av久久 |