從MCS51向AVR的快速轉(zhuǎn)換_第1頁
從MCS51向AVR的快速轉(zhuǎn)換_第2頁
從MCS51向AVR的快速轉(zhuǎn)換_第3頁
從MCS51向AVR的快速轉(zhuǎn)換_第4頁
從MCS51向AVR的快速轉(zhuǎn)換_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、從MCS51向AVR的快速轉(zhuǎn)換從MCS51 向AVR 的快速轉(zhuǎn)換 ATMEL 的AVR 系列單片機(jī)是一個優(yōu)秀的RISC 結(jié)構(gòu)單片機(jī)系列與MCS51 相 比其有以下一些典型特點(diǎn):AVR 的機(jī)器周期為1 個時鐘周期,絕大多數(shù)指令為單周期指令,因此每MHZ 時鐘有接近1MIPS 的性能。 程序存貯器與數(shù)據(jù)存貯器有分開的總線程序,可以高效地執(zhí)行8MHZ 頻率下工作的AVR 相當(dāng)于224MHZ 頻率下工作的MCS51 內(nèi)置可重復(fù)編程的FLASH 程序存貯器和EEPROM 數(shù)據(jù)存貯器支持對單片 機(jī)的在系統(tǒng)編程ISP 在生產(chǎn)中可以先裝配后編程從而縮短工藝流程和節(jié)約 購買萬用編程器的費(fèi)用并且可以方便地升級或修

2、改程序 內(nèi)置上電復(fù)位電路和看門狗定時器WatchDog 電路在提高產(chǎn)品可靠性的 同時降低了電路的成本 部分AVR 單片機(jī)與MCS51 系列單片機(jī)管腳兼容如AT90S1200/2313 對應(yīng) AT89C1051/2051 AT90S4414/8515 對應(yīng)AT89C51/52 因此可以做到一套PCB 板對應(yīng)兩套電路增加了用戶備貨的可選擇性和靈活性 定時/計數(shù)器的功能大大增強(qiáng)串口通信時波特率發(fā)生不占用定時器 注在本文中AVR 的C 語言是指ICCAVR6.0 標(biāo)準(zhǔn)版如需向其它版本的AVR C 語言如IAR A90 CodeVision AVR 轉(zhuǎn)換可與雙龍電子公司聯(lián)系 一AVR 和MCS51 存貯

3、器配置的對比 1 存貯器布置 MCS51 的存貯器從使用角度看分三個地址空間三個空間分別用MOV MOVX 和MOVC 指令訪問 而AVR 的存貯器在物理結(jié)構(gòu)上可分為五個部分AT90S8515 為例 1 程序空間000HFFFH 訪問時用LPM 指令訪問 2 片內(nèi)數(shù)據(jù)存貯器0060H025FH 訪問時用STS LDS 和ST LD 指令訪問 3 片外數(shù)據(jù)存貯器0260HFFFFH 訪問時用STS LDS 和ST LD 指令訪問 4 32 個通用寄存器R0R31 它們之間數(shù)據(jù)傳送可使用MOV 指令 5 I/O 寄存器00H3FH 使用IN OUT 指令訪問 看了以上介紹仔細(xì)的讀者可能發(fā)現(xiàn)有一部分

4、數(shù)據(jù)存貯器的地址0000H005FH 是空閑的,其實(shí)這部分地址空間并不空閑其被映射為通用寄存器 R0R31 和I/O 寄存器的數(shù)據(jù)空間地址具體為32 個通用寄存器直接映射到數(shù)據(jù)存貯器的0000H001FH, 64 個I/O 寄存器直接映射到數(shù)據(jù)存貯器空間的0020H005FH。這種映射關(guān)系大大增強(qiáng)了AVR 指令的靈活性,一方面對寄存器可以象SRAM 一樣地訪問,另一方面對寄存器的訪問時也可以使用X Y 和Z 寄存器作為索引從而大大提高了訪問寄存器的靈活性 2 堆棧工作方式 MCS51 的堆棧是一個由堆棧指針寄存器SP 單字節(jié)控制的向上生長型堆棧即將數(shù)據(jù)壓入堆棧時SP 增大 在AVR系列單片機(jī)的

5、堆棧同樣是受SP寄存器控制而堆棧的生長方向與MCS51是不相同的,其向下生長即將數(shù)據(jù)壓入堆棧時SP 減小另外要注意以下幾點(diǎn): 1 MCS51 的堆棧空間只能放置在片內(nèi)的SRAM 中而AVR 的堆??臻g既可以放置的片內(nèi)SRAM 中也可以放置在片外SRAM 中 2 AVR 的SP 寄存器對不支持外部SRAM 的單片機(jī)為一個字節(jié)長度對支持外部SRAM 的單片機(jī)為兩個字節(jié)長度SPL SPH 3 為了提高速度一般在初始化SP 時將其定位于內(nèi)部SRAM 的頂部如對8515 為025FH 4 AT90S1200 不支持軟件堆棧即由SP 控制堆棧其包含了一個三級深度的硬件堆棧 5 在對AVR 編程時一定要對S

6、P 進(jìn)行初始化否則很可能出現(xiàn)在AVR Studio中模擬調(diào)試正常而程序下載到芯片后程序卻不工作的現(xiàn)象 3 外部SRAM 的配置 在MCS51 中外部SRAM 是使用專用的MOVX 指令訪問的而在AVR 中訪問片內(nèi)或片外SRAM 使用相同的指令,當(dāng)訪問數(shù)據(jù)空間的地址超過片內(nèi)SRAM 范圍時會自動選擇片外的SRAM 空間,但為了正常工作還必須對寄存器MCUCR 的SRE D7 SRW D6 位進(jìn)行設(shè)置 SRE SRW SE SM ISC11 ISC10 ISC01 ISC00 MCUCR 寄存器 當(dāng)SRE=1 時使能外部SRAM 如匯編指令SBI MCUCR SRE SRE=0 時禁止外部SRAM

7、 如匯編指令CBI MCUCR SRE 當(dāng)SRW=1 時在訪問外部SRAM 中插入一個等待周期如匯編指令SBI MCUCR SRW 當(dāng)SRW=0 時在訪問外部SRAM 中不插入一個等待周期如匯編指令SBI MCUCR SRW 在C語言中可以直接用MCUCR|=0xC0 或MCUCR&=0x3F來配置外部SRAM 4 程序空間的訪問 MCS51 的程序存貯器是以字節(jié)為單位的地址也是按字節(jié)進(jìn)行尋址的,使用 MOVC 指令訪問程序ROM 和指令寄存器訪問程序ROM 沒有什么區(qū)別。 在AVR 中程序存貯器的總線為16 位即指令寄存器訪問程序ROM時是以字雙字節(jié)為單位的,即一個程序地址對應(yīng)兩個字節(jié)而AV

8、R 的數(shù)據(jù)存貯器的總線為8 位。當(dāng)用戶使用LPM 指令訪問程序ROM 時是以字節(jié)為單位進(jìn)行讀取的,此時Z 寄存器中的一個地址只對應(yīng)一個字節(jié),因此要注意這兩個地址的換算否則很容易產(chǎn)生錯誤。具體的換算是LPM 指令使用的Z寄存器中的地址應(yīng)該是程序地址的兩倍。如ldi ZH high(F_TABLE*2) ldi ZL low(F_TABLE*2) 初始化Z 指針 . lpm st Y+ R0 . F_TABLE .db 0,1 ;表的起點(diǎn)(20 bytes) . .db 18,19 二AVR 輸入/輸出端口的使用 MCS51 單片機(jī)的I/O 端口大部分是準(zhǔn)雙向口,在復(fù)位時全部輸出高電平,對端口的輸

9、入和輸出操作也是直接通過I/O 端口的地址進(jìn)行的,而AVR 的I/O 端口為標(biāo)準(zhǔn)雙向口,在復(fù)位時所有端口處于沒有上拉電阻的輸入狀態(tài),高阻態(tài)管腳電平完全由外部電路決定,這在強(qiáng)調(diào)復(fù)位狀態(tài)的場合是很有用的。AVR 的每一個端口對應(yīng)三個地址即DDRX、PORTX 和PINX X 針對不同的單片機(jī),可從AF 中分別取不同的符號。注意只有PINX 可取F ,DDRXn、PORTXn I/O 上拉。備注: 0 0 輸入關(guān)閉高阻態(tài) 0 1 輸入打開 提供弱上拉低電平必須由外電路位低此時輸出電流 1 0 輸出關(guān)閉推挽輸出0 1 1 輸出關(guān)閉推挽輸出1 表一端口功能配置表X=AE n=07 DDRX 為端口方向寄

10、存器當(dāng)DDRX 的某一位置1 時相應(yīng)端口的引腳作為輸出使用,當(dāng)DDRX 的某一位清0 時相應(yīng)端口的引腳作為輸入使用 PORTX 為端口數(shù)據(jù)寄存器當(dāng)引腳作為輸出使用時PORTX 的數(shù)據(jù)由相應(yīng)引腳輸出,當(dāng)引腳作為輸入使用時POTRX 的數(shù)據(jù)決定相應(yīng)端口的引腳是否打開弱上拉 具體可參考表一 PINX 為相應(yīng)端口的輸入引腳地址,如果希望讀取相應(yīng)引腳的邏輯電平值一定要讀取PINX 而不能讀取PORTX,這與MCS51 是有區(qū)別的。 注意:在使用AVR 單片機(jī)之前一定要根據(jù)引腳功能定義對相應(yīng)的端口初始化,否則端口很可能在用作輸出時不能正常工作如設(shè)置端口B的高四位為輸出。低四位為輸入 匯編語言ldi R16

11、 $F0 out DDRB R16 在C 語言中DDRB=0xF0 三AVR 和MCS51 定時器的對比 1 功能比較 在MCS51 中定時/計數(shù)器有兩種基本用法即以晶振頻率的十二分頻信號為輸入的定時器工作方式和以外部引腳INT0 INT1 上的信號為輸入的計數(shù)器工作方式 在AVR中有兩個定時器T0 和T1 AT90S1200 只有一個T0 T0 的功能與MCS51相似而T1 的功能很強(qiáng)除了普通的定時/計數(shù)功能外,還有一些增強(qiáng)的功能如比較匹配A 比較匹配B 由ICP 引腳或模擬比較器觸發(fā)的捕捉功能810 位的PWM 調(diào)制器 AVR 的定時/計數(shù)器用作定時器時其輸入信號為晶振頻率的某一個分頻信號

12、分頻比為1 8 64 256 1024 五種作為計數(shù)器使用時既可上升沿觸發(fā)也可下降沿觸發(fā) 2 T0 的使用 在AVR 中T0 為八位長度其由TCCR0 寄存器控制TCCR0 組成如下圖所示 X X X X X CS02 CS01 CS00 TCCR0 的作用如下表所示 CSX2 CSX1 CSX0 說明CSX2 CSX1 CSX0 說明 0 0 0 T0 停止工作1 0 0 CK/256 定時器 0 0 1 CK 定時器1 0 1 CK/1024 定時器 0 1 0 CK/8 定時器1 1 0 計數(shù)器(下降沿觸發(fā)) 0 1 1 CK/64 定時器1 1 1 計數(shù)器(上升沿觸發(fā)) 表二TCCR0

13、 功能表X=0 1 例1 定時器T0 用作定時器晶振頻率4M 定時時間10ms 可以這樣對T0 初始化 匯編語言LDI R16 $D9 OUT TCNT0 R16 定時常數(shù)到定時寄存器TCNT0 LDI R16 $05 OUT TCRR0 R16 1024 分頻比 C 語言TCNT0=0xD9 TCRR0=0x05 說明TCNT0 為定時計數(shù)寄存器 例2 定時器T0 用作計數(shù)器下降沿觸發(fā)可以這樣對T0 初始化 匯編語言LDI R16 00 OUT TCNT0 R16 TCNT0 清零 LDI R16 $06 OUT TCRR0 R16 計數(shù)器方式工作下降沿觸發(fā) C 語言TCNT0=0 TCRR

14、0=0x06 3 T1 的使用 在AVR 中T1 是16 位的其控制寄存器有TCCR1A 和TCCR1B 兩個TCCR1A 組成如下圖所示 COM1A1 COM1A0 COM1B1 COM1B0 X X PWM 11 PWM 10 各位的功能如表三所示 COM1X1 COM1X0 說明PWM11 PWM10 說明 0 0 與輸出OC1X 不連接0 0 禁止PWM 操作 0 1 OC1X 電平翻轉(zhuǎn)0 1 8 位PWM 1 0 OC1X 為低電平1 0 9 位PWM 1 1 OC1X 為高電平1 1 10 位PWM 表三TCCR1A 功能表 TCCR1B 的組成如下圖所示其中CS10CS12 的用

15、法同T0 見表二所示 ICNC1 ICES1 X X CTC1 CS12 CS11 CS10 ICNC1 置1 時使能輸入捕捉噪聲消除清0 時禁止輸入捕捉噪聲消除 ICES1 置1 時在ICP 的上升沿時發(fā)生定時器捕捉清0 時在ICP 的下降沿發(fā)生定時器捕捉 CTC1 置1 時當(dāng)比較匹配A發(fā)生時將TCNT1 清0 清0 時TCNT1 繼續(xù)計數(shù) 直至它被停止清除溢出為止注意只有比較匹配A有效另外在PWM方式下該位無效 例1 定時器1 用比較匹配A 方式在OC1A引腳輸出一個50HZ 的方波晶振頻率為4MHZ 可以這樣對T1 初始化 匯編語言LDI R16 $20 OUT DDRD R16 引腳O

16、C1A 輸出 LDI R16 $00 OUT TCNT1H R16 OUT TCNT1L R16 TCNT1 清0 LDI R16 $02 OUT OCR1AH R16 LDI R16 $71 OUT OCR1AL R16 送入對應(yīng)10ms 的比較常數(shù) LDI R16 $40 OUT TCCR1A R16 T1 和OC1A 相連比較匹配時OC1A 翻轉(zhuǎn) LDI R16 $0B OUT TCCR1B R16 T1 以定時器方式工作分頻比為64 比較匹配后自動清除TCNT1 C 語言DDRD=0x20 /引腳OC1A 輸出 TCNT1=0x00 /TCNT1 清0 OCR1A=0x271 /送入對

17、應(yīng)10ms 的比較常數(shù) TCCR1A=0x40 /T1 和OC1A 相連比較匹配時OC1A 翻轉(zhuǎn) TCCR1B=0x0B /T1 以定時器方式工作分頻比為64 比較匹配后 / 自動清除TCNT1 注意 1 由于T1 的TCNT1 OCR1A OCR1B 和ICR1 均為16 位的定時器為了正確地寫入和讀出在寫入數(shù)據(jù)時應(yīng)先寫入高位字節(jié)后寫入低位字節(jié)在讀取數(shù)據(jù)時應(yīng)先讀取低位字節(jié)后讀取高位字節(jié) 2 T1 的捕捉方式可用于ICP 引腳上頻率或周期的測量在使用時只需使能捕捉中斷即可對T1 的設(shè)置可參考定時的用法 四AVR 和MCS51 中斷系統(tǒng)的對比 MCS51 有六個中斷源5 個中斷入口地址分兩個優(yōu)先

18、級并且是通過IE 寄存器控制中斷的使能通過IP 控制中斷的優(yōu)先等級 而在AVR 中根據(jù)不同的單片機(jī)有不同數(shù)量的中斷源典型的AT90S8515 有12個中斷源,這12 個中斷源各自有自己的中斷向量入口地址如表四所示,AVR 通過寄存器GIMSK 和TIMSK 及SREG 來控制中斷使能,其中SREG 的D7 位I 是全局中斷使能標(biāo)志在AVR 中只有全局中斷控制位和某一特定中斷控制位同時使能中斷才會起作用GIMSK 和TIMSK 的功能見下圖 INT1 INT0 X X X X X X GIMSK TOIE1 OCIE1A OCIE1B X TICIE1 X TOIE0 X TIMSK INT0

19、INT1 外部中斷請求0 1 使能置1 時開放中斷清0 時禁止中斷外部中斷的觸發(fā)方式由MCUCR 的D0D3 位控制如表五所示 TOIE0 TOIE1 定時器0 1 的溢出中斷使能 OCIE1A B 定時器1 的比較匹配A B 中斷使能 TICIE1 定時器1 的輸入捕捉中斷使能 向量號入口地址中斷源說明 1 $000 RESET 硬件復(fù)位和看門狗復(fù)位 2 $001 INT0 外部中斷請求0 3 $002 INT1 外部中斷請求1 4 $003 TIMER1 CAPT 定時器1 捕捉中斷 5 $004 TIMER1 COMPA 定時器1 比較匹配A 中斷 6 $005 TIMER1 COMPB

20、 定時器1 比較匹配B 中斷 7 $006 TIMER1 OVF 定時器1 溢出中斷 8 $007 TIMER0 OVF 定時器0 溢出中斷 9 $008 SPI STC SPI 傳送完成 10 $009 UART RX 串行通信接收完成 11 $00A UART UDRE 串行通信數(shù)據(jù)寄存器空 12 $00B UART TX 串行通信發(fā)送完成 13 $00C ANA_COMP 模擬比較器中斷 表四中斷向量名稱與入口地址 ISCX1 ISCX0 說明ISCX1 ISCX0 說明 0 0 低電平觸發(fā)中斷1 0 下降沿觸發(fā)中斷 0 1 高電平觸發(fā)中斷1 1 上升沿觸發(fā)中斷 表五外部中斷觸發(fā)方式X=

21、0 1 在AVR 中沒有專門的中斷優(yōu)先級控制寄存器來區(qū)分中斷的優(yōu)先等級,用戶可在中斷服務(wù)程序中通過使能全局中斷I 來使系統(tǒng)響應(yīng),高優(yōu)先級的中斷具體的做法是當(dāng)AVR 單片機(jī)響應(yīng)任何一個中斷時硬件會禁止全局中斷I 從而禁止系統(tǒng)響應(yīng)其它中斷而當(dāng)從中斷服務(wù)程序中退出時硬件重新使能全局中斷I ,而當(dāng)我們在中斷服務(wù)程序中用SEI 指令打開全局中斷使能時系統(tǒng)在沒有退出中斷服務(wù)程序的情況下又恢復(fù)了對中斷的響應(yīng)能力,從而可以響應(yīng)高優(yōu)先級的中斷另外在同一優(yōu)級中入口地址較低的中斷優(yōu)先級較高 例:系統(tǒng)使能定時器1 溢出中斷和外部INT0 中斷其中INT0 的優(yōu)先級較高,此時可以這樣對MCU 初始化 匯編語言 LDI

22、R16 $40 OUT GIMSK R16 使能INT0 中斷 LDI R16 $80 OUT TIMSK R16 使能T1 溢出中斷 SEI 使能全局中斷 . . timer1_ovf T1 溢出中斷服務(wù)程序 SEI 在T1 溢出中斷服務(wù)程序中開放全局中斷 保證INT0 的優(yōu)先級 RETI 注意在AVR 的子程序中硬件不保護(hù)SREG 狀態(tài)寄存器應(yīng)根據(jù)實(shí)際情況由軟 件進(jìn)行保護(hù) C 語言#pragma interrupt_handler timer1 7 /聲明timer1( )為中斷處 /理函數(shù) #pragma interrupt_handler int0 2 /聲明_int0( )為中斷處理

23、 /函數(shù) void main (void) GIMSK=0x40 /使能INT0 中斷 TIMSK=0x80 /使能T1 溢出中斷 _SEI( ) /使能全局中斷 . void timer1(void)/T1 溢出中斷服務(wù)程序 _SEI( ) /在T1 溢出中斷服務(wù)程序中開放全局中斷 /保證INT0 的優(yōu)先級 . 在C 語言的中斷服務(wù)程序中斷處理函數(shù)中會自動保護(hù)中斷服務(wù)程序使用過的所有寄存器 五AVR 和MCS51 位操作功能的對比 MCS51 和AVR 都有較強(qiáng)的位操作功能在匯編語言寫的AVR 源程序中對端口的某一位置1 可用SBI 指令清0 可用CBI 指令 在C 語言程序中可用位運(yùn)算或在

24、線匯編完成上述功能如置PORTB 的D2 位 為1 清PORTB 的D6 位為0 PORTB|=(12) /D2 位置1 PORTB&=(16) /D6 位清0 或 ASM( SBI 0x18 2 ) /D2 位置1 ASM( CBI 0x18 6 ) /D6 位清0 六AVR 單片機(jī)內(nèi)置EEPROM 的使用 AVR是通過三個寄存器來訪問MCU內(nèi)置的EEPROM 的一個寄存器是EEAR存放訪問EEPROM 的地址其根據(jù)片內(nèi)EEPROM 的多少可能有不同的長度另一個是8 位的EEDR 用于存放訪問EEPROM 的數(shù)據(jù)第三個是EECR 用于控制對EEPROM 的讀寫EECR 的結(jié)構(gòu)如下圖所示 X

25、X X X X EEMWE EEWE EERE EEMWE EEPROM 主寫使能只有在其置1 后的4 個時鐘周期內(nèi)將EEWE置1才能完成EEPROM 寫入否則寫操作無效EEMWE被置1 后在4 個周期后由硬件自動清除 EEWE EEPROM 寫入使能 EERE EEPROM 讀取使能 例寫數(shù)據(jù)到片內(nèi)EEPROM 中子程序 匯編語言 .def EEdwr =r16 寫入EEPROM 的數(shù)據(jù) .def EEawr =r17 EEPROM 的地址低位 .def EEawrh =r18 EEPROM 的地址高位 EEWrite sbic EECR EEWE rjmp EEWrite 等待EEPROM

26、 就緒 out EEARH Eeawrh out EEARL EEawr 送入EEPROM 地址 out EEDR EEdwr 送入寫入EEPROM 的地址 sbi EECR,EEMWE 設(shè)置EEPROM 主寫使能 sbi EECR,EEWE 設(shè)置EEPROM 寫使能 ret C 語言注意應(yīng)包含頭文件eeprom.h int EEPROMwrite( int location, unsigned char); int location 片內(nèi)EEPROM 的地址 unsigned char 寫入EEPROM 的數(shù)據(jù) 七AVR 單片機(jī)內(nèi)置看門狗電路WatchDog 的使用 AVR 系列單片機(jī)內(nèi)置看

27、門狗電路其由寄存器WDTCR控制WDTCR的結(jié)構(gòu)如下圖所示 X X X WDTOE WDE WDP2 WDP1 WDP0 WDTOE 看門狗關(guān)閉使能 只有在該位被置1 后的4 個時鐘周期內(nèi)將WDE 清0 才能關(guān)閉看門狗電路,否則看門狗電路不會被關(guān)閉WDTOE在被置1 后在4 個周期后由硬件自動清0 WDE 置1 時使能看狗電路清0 時關(guān)閉看門狗電路注意關(guān)閉看門狗電路應(yīng)在對WDTOE置1 后4 個時鐘周期內(nèi)進(jìn)行 WDP0WDP2 看門狗電路的分頻系數(shù)產(chǎn)生復(fù)位所需要的振蕩周期數(shù)其影響看門狗電路復(fù)位的時間如表六所示 WDP 2 WDP 1 WDP 0 分頻系數(shù)DC3V 時 產(chǎn)生復(fù)位所需時間 DC5V

28、 約1MHZ 產(chǎn)生復(fù)位所需時間 0 0 0 16K 47ms 15ms 0 0 1 32K 94ms 30ms 0 1 0 64K 0.19s 60ms 0 1 1 128K 0.38s 0.12s 1 0 0 256K 0.75s 0.24s 1 0 1 512K 1.5s 0.49s 1 1 0 1024K 3.0s 0.97s 1 1 1 2048K 6.0s 1.9s 注意:看門狗電路的振蕩器為內(nèi)部RC 振蕩器其振蕩頻率受電壓影響在DC5V 時約為1MHZ 在AVR 中有一條指令WDR 來清除看門狗定時器在C 語言中對應(yīng)為_WDR( ) 或WDR( )函數(shù) 八AVR 和MCS51 中串

29、口通信UART 功能的對比 在MCS51 中串口通信的波特率發(fā)生需要使用一個定時器而且支持的波特率也較低AVR 單片機(jī)可以有較高的波特率最高波特率可達(dá)115200 而且有專用的波特率發(fā)生器注意AT90S1200 沒有UART 只能用軟件模擬串口通信 在AVR 中用于UART 的寄存器主要有以下幾個接收和發(fā)送數(shù)據(jù)寄存器UDR 狀態(tài)寄存器USR 控制寄存器UCR 和波特率寄存器UBRR UDR 寄存器由兩個物理上分開的寄存器共享同一個地址寫入數(shù)據(jù)時是寫到發(fā)送寄存器讀出數(shù)據(jù)時是讀取接收寄存器 USR 如下圖所示其反映了UART 的狀態(tài) RXC TXC UDR FE OR X X X RXC UART

30、 接收完成 TXC UART 發(fā)送完成 UDR UART 數(shù)據(jù)寄存器空標(biāo)志 FE 幀出錯 OR 超越出錯 UCR 控制UART 的工作其組成如下圖所示 RXCIE TXCIE UDRIE RXEN TXEN CHR9 RXB8 TXB8 RXCIE 接收中斷使能 TXCIE 發(fā)送中斷使能 UDRIE UART 數(shù)據(jù)寄存器空中斷使能 RXEN 接收使能 TXEN 發(fā)送使能 CHR9 發(fā)送9 位字符 RXB8 接收到的第8 位字符 TXB8 發(fā)送的第8 位字符 UBRR 控制UART 的波特率其與波特率的計算公式為 BAUD=FCK/16(UBRR+1) 其中BAUD 表示波特率FCK 表示晶振頻率UBRR 表示UBRR 寄存器中的常數(shù) 注意波特率的計算值與標(biāo)準(zhǔn)波特率相差不能超過2% 否則會影響串行通信 例1 在8MHZ 晶振下以19200 波特率和PC 機(jī)通信可這樣對AVR初始化 匯編語言LDI R16 25 OUT UBRR R16 LDI R16 $18 OUT UCR R16 C 語言UBRR=25 UCR=0x18 例2 在8MHZ 晶振下以19200 波特率

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論