閱讀器開發(fā)基礎(chǔ)_第1頁(yè)
閱讀器開發(fā)基礎(chǔ)_第2頁(yè)
閱讀器開發(fā)基礎(chǔ)_第3頁(yè)
閱讀器開發(fā)基礎(chǔ)_第4頁(yè)
閱讀器開發(fā)基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩114頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第3章 RFID閱讀器開發(fā)基礎(chǔ)目錄 3.1 閱讀器電路組成 3.2 AVR單片機(jī)概述 3.3 AVR時(shí)鐘與熔絲位 3.4 AVR通用IO口 3.5 AVR中斷 3.6 AVR定時(shí)器 3.7 AVR USART 3.8 AVR SPI 本章目標(biāo) 掌握閱讀器電路組成了解ATmega16的主要特性了解AVR熔絲位作用掌握AVR通用IO口的配置和使用掌握AVR中斷的配置和使用掌握AVR定時(shí)器的配置和使用掌握AVR USART的配置和使用掌握AVR SPI的配置 學(xué)習(xí)導(dǎo)航 任務(wù)描述 【描述】3.D. 1使用PC7管腳交替點(diǎn)亮和熄滅一只LED。【描述】3.D. 2在PD2管腳連接一個(gè)按鍵,使用外部中斷檢測(cè)

2、該按鍵并翻轉(zhuǎn)LED狀態(tài)?!久枋觥?.D. 3使用定時(shí)器1的溢出中斷,1秒定時(shí)驅(qū)動(dòng)LED閃爍。【描述】3.D. 4配置USART波特率為115200,使用中斷法對(duì)PC機(jī)發(fā)來(lái)數(shù)據(jù)進(jìn)行回顯,并驅(qū)動(dòng)LED狀態(tài)翻轉(zhuǎn)。 3.1 閱讀器電路組成 從電路上來(lái)看,閱讀器是一個(gè)嵌入式系統(tǒng),一般由MCU控制器、射頻收發(fā)、通信接口、天線以及其他外圍電路組成。其組成框圖如圖3- 1所示。本章將首先講解閱讀器電路組成,然后講解作為閱讀器核心MCU的AVR單片機(jī)及其外圍電路。具體收發(fā)通道等會(huì)根據(jù)不同頻段RFID系統(tǒng)的需求在后續(xù)章節(jié)具體分析和講解。 3.1 閱讀器電路組成-MCU及外圍電路 MCU是閱讀器的核心,配合外圍電路

3、完成收發(fā)控制、向應(yīng)答器發(fā)送命令與寫數(shù)據(jù)、應(yīng)答器數(shù)據(jù)讀取與處理、與應(yīng)用系統(tǒng)的高層進(jìn)行通信等任務(wù)。MCU及外圍電路的結(jié)構(gòu)框圖如圖3- 2所示。 本教材配套閱讀器的MCU為ATMEL公司出品的AVR單片機(jī),具體型號(hào)為Atmega16A。 3.1 閱讀器電路組成-收發(fā)通道 收發(fā)通道主要負(fù)責(zé)數(shù)據(jù)的鏈路和無(wú)線鏈路,由以下兩部分組成:發(fā)送通道,包括編碼、調(diào)制和功率放大電路,用于向應(yīng)答器傳送命令和寫數(shù)據(jù)。接收通道,包括解調(diào)、解碼電路,用于接收應(yīng)答器返回的應(yīng)答信息和數(shù)據(jù)。其收發(fā)通道的電路的結(jié)構(gòu)框圖如圖3- 3所示。另外需要注意的是在實(shí)際的電路設(shè)計(jì)中,根據(jù)應(yīng)答器的防碰撞能力的設(shè)置,還應(yīng)考慮防碰撞電路的設(shè)計(jì)。 3.

4、2 AVR單片機(jī)概述 1997年,由Atmel公司挪威設(shè)計(jì)中心的A先生和V先生,利用Atmel公司的Flash新技術(shù),共同研發(fā)出RISC精簡(jiǎn)指令集高速8位單片機(jī),簡(jiǎn)稱AVR。AVR的單片機(jī)可以廣泛應(yīng)用于計(jì)算機(jī)外部設(shè)備、工業(yè)實(shí)時(shí)控制、儀器儀表、通訊設(shè)備、家用電器等各個(gè)領(lǐng)域。 3.2 AVR單片機(jī)概述 -AVR主要功能特性 AVR單片機(jī)硬件結(jié)構(gòu)采取8位機(jī)與16位機(jī)的折中策略,即采用局部寄存器存堆和單體高速輸入/輸出的方案。提高了指令執(zhí)行速度,克服了瓶頸現(xiàn)象,增強(qiáng)了功能。同時(shí)又減少了對(duì)外設(shè)管理的開銷,相對(duì)簡(jiǎn)化了硬件結(jié)構(gòu),降低了成本。因而AVR單片機(jī)在軟/硬件開銷、速度、性能和成本諸多方面取得了優(yōu)化平

5、衡。 AVR單片機(jī)其他特點(diǎn)如下:哈佛結(jié)構(gòu),具備1MIPS / MHz的高速運(yùn)行處理能力。超功能精簡(jiǎn)指令集(RISC),具有32個(gè)通用工作寄存器。快速的存取寄存器組、單周期指令系統(tǒng),大大優(yōu)化了目標(biāo)代碼的大小、執(zhí)行效率,部分型號(hào)Flash非常大,特別適用于使用高級(jí)語(yǔ)言進(jìn)行開發(fā)。作輸出時(shí)可輸出40mA(單一輸出),作輸入時(shí)可設(shè)置為三態(tài)高阻抗輸入或帶上拉電阻輸入,具備10mA-20mA灌電流的能力。3.2 AVR單片機(jī)概述 -AVR主要功能特性 AVR單片機(jī)其他特點(diǎn)如下:片內(nèi)集成多種頻率的RC振蕩器、上電自動(dòng)復(fù)位、看門狗、啟動(dòng)延時(shí)等功能,外圍電路更加簡(jiǎn)單,系統(tǒng)更加穩(wěn)定可靠。大部分AVR片上資源豐富:帶

6、EEPROM、PWM、RTC、SPI、USART、TWI、ISP、AD、Analog Comparator、WDT等。大部分AVR除了有ISP功能外,還有IAP功能,方便升級(jí)或銷毀應(yīng)用程序。 3.2 AVR單片機(jī)概述 -AVR主要功能特性 3.2 AVR單片機(jī)概述 -ATmega16A ATmega16A是AVR系列單片機(jī)中的一個(gè)型號(hào),因其功能豐富、性價(jià)比高,被廣泛應(yīng)用。ATmega16A常用的有兩種封裝,分別為40引腳PDIP封裝和44引腳TQFP封裝。本教材配套讀寫器的ATmega16A采用44引腳TQFP封裝。其中40引腳PDIP封裝引腳圖如圖3- 4所示。 44引腳TQFP封裝引腳圖如

7、圖3- 5所示。 3.2 AVR單片機(jī)概述 -ATmega16A ATmega16A引腳功能較多,其具體說(shuō)明如表3- 1所示。 名稱功能VCC數(shù)字電路電源GND地端口A(PA7.PA0)A/D轉(zhuǎn)換器的模擬輸入端8位雙向I/O口,具有可編程的內(nèi)部上拉電阻。在復(fù)位過(guò)程中,即使系統(tǒng)時(shí)鐘還未起振,端口A處于高阻狀態(tài)端口B(PB7.PB0)8位雙向I/O口,具有可編程的內(nèi)部上拉電阻。在復(fù)位過(guò)程中,即使系統(tǒng)時(shí)鐘還未起振,端口B處于高阻狀態(tài)端口B可以用做其他不同的特殊功能端口C(PC7.PC0)8位雙向I/O口,具有可編程的內(nèi)部上拉電阻。在復(fù)位過(guò)程中,即使系統(tǒng)時(shí)鐘還未起振,端口C處于高阻狀態(tài)。如果JTAG接

8、口使能,即使復(fù)位出現(xiàn)引腳PC5(TDI)、PC3(TMS)與PC2(TCK)的上拉電阻被激活,端口C也可以用做其他不同的特殊功能端口D(PD7.PD0)8位雙向I/O口,具有可編程的內(nèi)部上拉電阻。在復(fù)位過(guò)程中,即使系統(tǒng)時(shí)鐘還未起振,端口D處于高阻狀態(tài),端口D可以用做其他不同的特殊功能RESET復(fù)位輸入引腳。持續(xù)時(shí)間超過(guò)最小門限時(shí)間的低電平將引起系統(tǒng)復(fù)位。持續(xù)時(shí)間小于門限間的脈沖不能保證可靠復(fù)位XTAL1反向振蕩放大器與片內(nèi)時(shí)鐘操作電路的輸入端XTAL2反向振蕩放大器的輸出端AVCCAVCC是端口A與A/D轉(zhuǎn)換器的電源。不使用ADC時(shí),該引腳應(yīng)直接與VCC連接。使用ADC時(shí)應(yīng)通過(guò)一個(gè)低通濾波器與

9、VCC連接AREFA/D 的模擬基準(zhǔn)輸入引腳3.2 AVR單片機(jī)概述 -ATmega16A 3.3 AVR時(shí)鐘與熔絲位 AVR單片機(jī)的運(yùn)行,需要有時(shí)鐘的驅(qū)動(dòng),而時(shí)鐘源的選擇需要設(shè)置相關(guān)熔絲位。 3.3 AVR時(shí)鐘與熔絲位 -AVR系統(tǒng)時(shí)鐘 AVR有一套時(shí)鐘系統(tǒng),也有多個(gè)時(shí)鐘源可作為系統(tǒng)時(shí)鐘,這些時(shí)鐘并不需要同時(shí)工作。為了降低功耗,可以通過(guò)使用不同的睡眠模式來(lái)禁止無(wú)需工作的模塊的時(shí)鐘,具體時(shí)鐘分布如圖3- 6所示。 上圖中涉及的時(shí)鐘功能如表3- 2所示。 時(shí)鐘名稱功能CPU時(shí)鐘CPU時(shí)鐘與操作AVR內(nèi)核的子系統(tǒng)相連,如通用寄存器、狀態(tài)寄存器及保存堆棧指針的數(shù)據(jù)存儲(chǔ)器。終止CPU時(shí)鐘將使內(nèi)核停止工

10、作和計(jì)算IO時(shí)鐘I/O時(shí)鐘用于主要的I/O模塊,如定時(shí)器/計(jì)數(shù)器、SPI和USART。I/O時(shí)鐘還用于外部中斷模塊。要注意的是有些外部中斷由異步邏輯檢測(cè),因此即使I/O時(shí)鐘停止了這些中斷仍然可以得到監(jiān)控Flash時(shí)鐘Flash 時(shí)鐘控制Flash接口的操作。此時(shí)鐘通常與CPU時(shí)鐘同時(shí)掛起或激活異步定時(shí)器時(shí)鐘異步定時(shí)器時(shí)鐘允許異步定時(shí)器/計(jì)數(shù)器與LCD控制器直接由外部32kHz時(shí)鐘晶體驅(qū)動(dòng)。使得此定時(shí)器/計(jì)數(shù)器即使在睡眠模式下仍然可以為系統(tǒng)提供一個(gè)實(shí)時(shí)時(shí)鐘ADC時(shí)鐘ADC具有專門的時(shí)鐘。這樣可以在ADC工作的時(shí)候停止CPU和I/O時(shí)鐘以降低數(shù)字電路產(chǎn)生的噪聲,從而提高ADC轉(zhuǎn)換精度3.3 AVR

11、時(shí)鐘與熔絲位 -AVR系統(tǒng)時(shí)鐘 AVR單片機(jī)的多種時(shí)鐘源通過(guò)一個(gè)時(shí)鐘多路選擇器,用來(lái)驅(qū)動(dòng)系統(tǒng)時(shí)鐘或作為其他功能,時(shí)鐘源的選擇需要通過(guò)對(duì)熔絲位進(jìn)行配置。被選擇的時(shí)鐘輸入到AVR時(shí)鐘發(fā)生器,再分配到相應(yīng)模塊。 3.3 AVR時(shí)鐘與熔絲位 -AVR系統(tǒng)時(shí)鐘 AVR有6個(gè)時(shí)鐘源如下所示:外部晶體/陶瓷振蕩器,常用作主時(shí)鐘源,這個(gè)振蕩器可以使用石英晶體也可以使用陶瓷諧振器。XTAL1和XTAL2分別為用作片內(nèi)振蕩器的反相放大器的輸入和輸出。外部低頻振蕩器,一般用來(lái)連接32.768kHz晶振。需要對(duì)熔絲位編程,使能XTAL1和XTAL2的內(nèi)部電容,從而除去外部電容。內(nèi)部電容的標(biāo)稱數(shù)為36pF。外部RC振蕩

12、器,對(duì)于時(shí)間不敏感的應(yīng)用可以使用外部RC振蕩器。頻率可以通過(guò)方程f=1/(3RC)進(jìn)行粗略的估算。電容至少需要22Pf。3.3 AVR時(shí)鐘與熔絲位 -AVR系統(tǒng)時(shí)鐘 AVR有6個(gè)時(shí)鐘源如下所示:標(biāo)定的內(nèi)部RC振蕩器,標(biāo)定的片內(nèi)RC振蕩器提供了固定的1.0、2.0、4.0或8.0MHz的時(shí)鐘。這個(gè)時(shí)鐘也可作為系統(tǒng)時(shí)鐘。選擇這個(gè)時(shí)鐘之后就無(wú)需外部器件了。外部時(shí)鐘,XTAL1連接外部來(lái)的時(shí)鐘信號(hào),作為系統(tǒng)時(shí)鐘驅(qū)動(dòng)整個(gè)CPU運(yùn)行。XTAL2可懸空。定時(shí)器振蕩器,對(duì)于擁有定時(shí)器/振蕩器引腳(TOSC1和TOSC2)的AVR微處理器,晶體可以直接與這兩個(gè)引腳相連,無(wú)需外部電容。此振蕩器針對(duì)32.768kH

13、z的中標(biāo)晶體做了優(yōu)化。 3.3 AVR時(shí)鐘與熔絲位 -AVR系統(tǒng)時(shí)鐘 缺省時(shí)鐘源 器件出廠時(shí),缺省設(shè)置的時(shí)鐘源是1MHz的內(nèi)部RC振蕩器,啟動(dòng)時(shí)間為最長(zhǎng)。這種設(shè)置保證用戶可以通過(guò)ISP或并行編程器得到所需的時(shí)鐘源。 3.3 AVR時(shí)鐘與熔絲位 -AVR系統(tǒng)時(shí)鐘 在AVR內(nèi)部有多組與器件配置和運(yùn)行環(huán)境相關(guān)的熔絲位,這些熔絲位非常重要,用戶可以通過(guò)設(shè)定和配置熔絲位,使AVR具備不同的特性,以更加適合實(shí)際的應(yīng)用。ATmega16A有兩個(gè)熔絲位字節(jié),分別為熔絲位高字節(jié)和熔絲位低字節(jié)。如果熔絲位被編程則讀返回值為”0”。其中高字節(jié)每個(gè)Bit的含義如表3- 3所示。 熔絲位高字節(jié)位號(hào)描述默認(rèn)值OCDEN7

14、使能OCD1(未編程,OCD禁用)JTAGEN6使能JTAG0(編程,JTAG使能)SPIEN5使能串行程序和數(shù)據(jù)下載0(編程,SPI編程使能)CKOPT4振蕩器選項(xiàng)1(未編程)EESAVE3執(zhí)行芯片擦除時(shí)EEPROM的內(nèi)容保留1(未編程,內(nèi)容不保留)BOOTSZ12選擇Boot區(qū)大小0(編程)BOOTSZ01選擇Boot區(qū)大小0(編程)BOOTRST0選擇復(fù)位向量1(未編程)3.3 AVR時(shí)鐘與熔絲位 AVR熔絲位 熔絲位低字節(jié)每個(gè)Bit的含義如表3- 4所示。 熔絲位低字節(jié)位號(hào)描述默認(rèn)值BODLEVEL7BOD觸發(fā)電平1(未編程)BODEN6BOD使能1(未編程,BOD禁用)SUT15選擇

15、啟動(dòng)時(shí)間1(未編程)SUT04選擇啟動(dòng)時(shí)間0(編程)CKSEL33選擇時(shí)鐘源0(編程)CKSEL22選擇時(shí)鐘源0(編程)CKSEL11選擇時(shí)鐘源0(編程)CKSEL00選擇時(shí)鐘源1(未編程)3.3 AVR時(shí)鐘與熔絲位 AVR熔絲位 在熔絲位中,與系統(tǒng)時(shí)鐘有關(guān)的有CKOPT和CKSEL3:0幾位,主要用來(lái)選擇振蕩器種類和工作頻率,具體配置如表3- 5所示。 CKOPTCKSEL3:0描述默認(rèn)值100011.0MHz內(nèi)部RC振蕩器100102.0MHz100114.0MHz101008.0MHz1101x0.40.9MHz僅適用于陶瓷振蕩器1110 x0.93.0MHz1222pF1111x3.0

16、8.0MHz1222pF0101x,110 x,111x大于等于1.0MHz1222pF3.3 AVR時(shí)鐘與熔絲位 AVR熔絲位 CKOPT的數(shù)值決定了振蕩器輸出幅度大小,不同振幅決定了其適應(yīng)場(chǎng)合的不同,具體含義如下所述:在CKOPT=0時(shí),振蕩器的輸出振幅較大,容易起振,適合在干擾大的場(chǎng)合以及使用晶體振蕩器超過(guò)8MHz的情況下使用。當(dāng)CKOPT=1時(shí),振蕩器的輸出振幅較小,這樣可以減少對(duì)電源的消耗,對(duì)外的電磁輻射也較小。注意 熔絲位的設(shè)置需要用特殊的軟件和方法,一旦配置,不建議輕易更改。如果修改不當(dāng),輕則造成運(yùn)行不正常,重則鎖死芯片。 3.3 AVR時(shí)鐘與熔絲位 AVR熔絲位 3.4 AVR

17、通用IO口 ATmega16A有4組通用IO端口,分別稱為PORTA、PORTB、PORTC和PORTD,簡(jiǎn)稱PA、PB、PC和PD。每組IO端口有8個(gè)IO管腳。這些管腳都是相互獨(dú)立,具有真正的讀-改-寫功能。AVR通用IO口的主要特點(diǎn)如下:雙向獨(dú)立位控的IO口。每一位都可以單獨(dú)進(jìn)行配置,互不影響。大電流驅(qū)動(dòng),每個(gè)IO口輸出采用推挽方式,最大20mA灌電流,可直接驅(qū)動(dòng)LED。IO端口可以復(fù)用,作為USART、SPI等外設(shè)接口。 3.4 AVR通用IO口 -通用IO口結(jié)構(gòu) AVR的通用IO口的結(jié)構(gòu)并不復(fù)雜,其結(jié)構(gòu)圖如圖3- 7所示。 每一組IO端口內(nèi)部配備3個(gè)8位寄存器,對(duì)應(yīng)著該組的8個(gè)引腳,它

18、們分別為:方向控制寄存器DDRx(x=A、B、C、D)。數(shù)據(jù)寄存器PORTx(x=A、B、C、D)。輸入引腳寄存器PINx(x=A、B、C、D)。 此外每個(gè)IO口內(nèi)部還有一個(gè)上拉電阻。方向控制寄存器DDRx,用于控制IO口的輸入輸出方向,即控制IO口的工作方式為輸入方式還是輸出方式。當(dāng)DDRx=1時(shí),IO口處于輸出工作方式,此時(shí)數(shù)據(jù)寄存器PORTx中的數(shù)據(jù)通過(guò)一個(gè)推挽電路輸出到外部引腳當(dāng)PORTx=1時(shí),IO引腳呈現(xiàn)高電平,同時(shí)可以提供輸出20mA的電流而當(dāng)PORTx=0時(shí),IO引腳呈現(xiàn)低電平,同時(shí)可以吸納20mA電流。因此,AVR的IO口在輸出方式下提供了比較大的驅(qū)動(dòng)能力,可以直接驅(qū)動(dòng)LED

19、燈小功率外圍器件。3.4 AVR通用IO口 -通用IO口結(jié)構(gòu) 當(dāng)DDRx=0時(shí),IO口處于輸入方式。此時(shí)引腳寄存器PINx中的數(shù)據(jù)就是外部引腳的實(shí)際電平,通過(guò)讀PINx寄存器可以獲得外部引腳上的真實(shí)電平。在輸入方式下,PORTx可以控制使用或者不使用內(nèi)部的上拉電阻。此外,在寄存器SFIOR中,有一位稱作PUD,它是AVR全部IO口內(nèi)部上拉電阻的總開關(guān)。當(dāng)PUD=1時(shí),AVR所有IO內(nèi)部上拉電阻都不起作用。當(dāng)PUD=0時(shí),各個(gè)IO口內(nèi)部的上拉電阻取決于PORTx的設(shè)置。 3.4 AVR通用IO口 -通用IO口結(jié)構(gòu) ATmega16A的4個(gè)端口都有各自對(duì)應(yīng)的3個(gè)IO口寄存器,分別為數(shù)據(jù)寄存器POR

20、T、數(shù)據(jù)方向寄存器DDR和輸入引腳PIN。它們占用了IO空間的12個(gè)地址,以PA口寄存器為例,數(shù)據(jù)寄存器PORTA具體定義如表3- 6所示。 Bit76543210名稱PORTA7PORTA6PORTA5PORTA4PORTA3PORTA2PORTA1PORTA0讀寫R/WR/WR/WR/WR/WR/WR/WR/W初始值000000003.4 AVR通用IO口 -通用IO口寄存器 數(shù)據(jù)方向寄存器DDRA具體定義如表3- 7所示。輸入引腳寄存器PINA具體定義如表3- 8所示。注意 并非所有寄存器都可讀寫,R代表只讀,W代表只寫,R/W代表可讀可寫。寄存器的初值也都并非確定的1或0,使用N/A表

21、示初始值不確定。 Bit76543210名稱DDRA7DDRA6DDRA5DDRA4DDRA3DDRA2DDRA1DDRA0讀寫R/WR/WR/WR/WR/WR/WR/WR/W初始值00000000Bit76543210名稱PINA7PINA6PINA5PINA4PINA3PINA2PINA1PINA0讀寫RRRRRRRR初始值N/AN/AN/AN/AN/AN/AN/AN/A3.4 AVR通用IO口 -通用IO口寄存器 通用IO口常用于MCU對(duì)外數(shù)據(jù)輸出和輸入,LED驅(qū)動(dòng)和按鍵檢測(cè)等。下述內(nèi)容用于實(shí)現(xiàn)任務(wù)描述3.D.1,使用PC7管腳交替點(diǎn)亮和熄滅一只LED。 3.4 AVR通用IO口 -通用

22、IO口程序設(shè)計(jì) 1. LED初始化基于模塊化和移植的考慮,可將IO口設(shè)置子程序單獨(dú)封裝成為一個(gè)子函數(shù),例如LED相關(guān)管腳的配置,可封裝成為子函數(shù)LED_Config(),具體源碼如下所示:【描述3.D.1】 LED_Config()/* LED初始化函數(shù) */void LED_Config(void)/PC7引腳連接一個(gè)LED,低電平點(diǎn)亮/設(shè)置PC7為輸出DDRC |= (1PC7);/設(shè)置PC7為高電平PORTC |= (1PC7);3.4 AVR通用IO口 -通用IO口程序設(shè)計(jì) 2. 主函數(shù)編寫主函數(shù)main()存放在main.c文件中,除了相關(guān)初始化函數(shù)和主循環(huán)外,還需要定義一些必需的宏

23、定義和頭文件等,詳細(xì)代碼清單如下所示:【描述3.D.1】 main.c/* 宏定義 */開啟iom16.h文件中的bit模式#define ENABLE_BIT_DEFINITIONS 1/* 頭文件 */IAR中已定義的ATmega16相關(guān)寄存器名稱#include /* 子函數(shù) */LED初始化函數(shù)void LED_Config(void);/* 主函數(shù) */void main(void)/LED初始化函數(shù)LED_Config(); while(1)/點(diǎn)亮LEDPORTC &= (1PC7);/熄滅LEDPORTC |= (1PC7);3.4 AVR通用IO口 -通用IO口程序設(shè)計(jì) 單步執(zhí)

24、行如下語(yǔ)句時(shí),會(huì)看到LED亮滅轉(zhuǎn)換。while(1)/點(diǎn)亮LEDPORTC &= (1PC7);/熄滅LEDPORTC |= (1PC7);3.4 AVR通用IO口 -通用IO口程序設(shè)計(jì) 3.4 AVR通用IO口 -IO端口第二功能 AVR的IO端口除了通用IO功能外,大多數(shù)端口引腳都具有第二功能,使能某些引腳的第二功能,不會(huì)影響到同一端口其他引腳作為通用IO口的功能。ATmega16A的IO端口第二功能如表3- 9所示。 端口第二功能功能說(shuō)明PA7ADC7ADC輸入通道7PA6ADC6ADC輸入通道6PA5ADC5ADC輸入通道5PA4ADC4ADC輸入通道4PA3ADC3ADC輸入通道3P

25、A2ADC2ADC輸入通道2PA1ADC1ADC輸入通道1PA0ADC0ADC輸入通道0PB7SCKSPI總線的串行時(shí)鐘PB6MISOSPI總線的主機(jī)輸入/從機(jī)輸出信號(hào)PB5MOSISPI總線的主機(jī)輸出/從機(jī)輸入信號(hào)PB4/SSSPI從機(jī)選擇引腳PB3AIN1/OC0模擬比較負(fù)輸入/T/C0輸出比較匹配輸出PB2AIN0/INT2模擬比較正輸入/外部中斷2輸入PB1T1T/C1外部計(jì)數(shù)器輸入端口第二功能功能說(shuō)明PC7TOSC2定時(shí)振蕩器引腳2PC6TOSC1定時(shí)振蕩器引腳1PC5TDIJTAG測(cè)試數(shù)據(jù)輸入PC4TDOJTAG測(cè)試數(shù)據(jù)輸出PC3TMSJTAG測(cè)試模式選擇PC2TCKJTAG測(cè)試時(shí)

26、鐘PC1SDA兩線串行總線數(shù)據(jù)輸入/輸出線PC0SCL兩線串行總線時(shí)鐘線PD7OC2T/C2輸出比較匹配輸出PD6ICP1T/C1輸入捕捉引腳PD5OC1AT/C1輸出比較A匹配輸出PD4OC1BT/C1輸出比較B匹配輸出PD3INT1外部中斷1的輸入PD2INT0外部中斷0的輸入PD1TXDUSART輸出引腳PD0RXDUSART輸入引腳3.5 AVR中斷 AVR單片機(jī)的中斷源種類多、門類全,便于設(shè)計(jì)實(shí)時(shí)、多功能、高效率的嵌入式應(yīng)用系統(tǒng)。但同時(shí)由于其功能更為強(qiáng)大,因此比一般8位單片機(jī)的中斷使用和控制也相對(duì)復(fù)雜些。 3.5 AVR中斷 -中斷向量 AVR單片機(jī)一般擁有數(shù)十個(gè)中斷源,每個(gè)中斷源都

27、有獨(dú)立的中斷向量。默認(rèn)情況下,程序存儲(chǔ)器的最低端,即從Flash地址的0 x0000開始用于放置中斷向量,稱作中斷向量區(qū)。ATmega16A共有21個(gè)中斷源。默認(rèn)狀態(tài)下,ATmega16A的中斷向量表如表3- 10所示。 向量號(hào)程序地址中斷源中斷定義10 x000RESET外部引腳電平引發(fā)的復(fù)位,上電復(fù)位,掉電檢測(cè)復(fù)位,看門狗復(fù)位,以及JTAG AVR復(fù)位20 x002INT0外部中斷請(qǐng)求030 x004INT1外部中斷請(qǐng)求140 x006TIMER2 COMP定時(shí)器/計(jì)數(shù)器2比較匹配50 x008TIMER2 OVF定時(shí)器/計(jì)數(shù)器2溢出60 x00ATIMER1 CAPT定時(shí)器/計(jì)數(shù)器1事件

28、捕捉70 x00CTIMER1 COMPA定時(shí)器/計(jì)數(shù)器1比較匹配 A80 x00ETIMER1 COMPB定時(shí)器/計(jì)數(shù)器1比較匹配B90 x010TIMER1 OVF定時(shí)器/計(jì)數(shù)器1溢出100 x012TIMER0 OVF定時(shí)器/計(jì)數(shù)器0溢出110 x014SPI,STCSPI串行傳輸結(jié)束向量號(hào)程序地址中斷源中斷定義120 x016USART,RXCUSART Rx 結(jié)束130 x018USART,UDREUSART數(shù)據(jù)寄存器空140 x01AUSART,TXCUSART,Tx 結(jié)束150 x01CADCADC轉(zhuǎn)換結(jié)束160 x01EEE_RDYEEPROM就緒170 x020ANA_COM

29、P模擬比較器180 x022TWI兩線串行接口190 x024INT2外部中斷請(qǐng)求2200 x026TIMER0 COMP定時(shí)器/計(jì)數(shù)器 0比較匹配210 x028SPM_RDY保存程序存儲(chǔ)器內(nèi)容就緒在這21個(gè)中斷中,包含1個(gè)非屏蔽中斷(RESET)、3個(gè)外部中斷(INT0、INT1、INT2)和17個(gè)內(nèi)部中斷。本節(jié)只簡(jiǎn)要介紹RESET和外部中斷。系統(tǒng)復(fù)位中斷RESET,也稱為系統(tǒng)復(fù)位源。RESET是一個(gè)特殊的中斷源,是AVR中唯一不可屏蔽的中斷。當(dāng)ATmega16A由于各種原因被復(fù)位后,程序?qū)⑻綇?fù)位向量(默認(rèn)為0 x0000)處,在該地址處通常放置一條跳轉(zhuǎn)指令,跳轉(zhuǎn)到主程序繼續(xù)執(zhí)行。INT

30、0、INT1和INT2是三個(gè)外部中斷源,它們分別由芯片外部引腳PD2、PD3和PB2上的電平變化或狀態(tài)觸發(fā)。通過(guò)對(duì)控制寄存器MCUCR和控制與狀態(tài)寄存器MCUCSR的配置定義觸發(fā)方式。 3.5 AVR中斷 -中斷向量 AVR單片機(jī)的中斷,有優(yōu)先級(jí)和屏蔽等功能和控制手段,也支持中斷的嵌套??梢造`活的進(jìn)行配置和使用。1. 中斷優(yōu)先級(jí)在AVR單片機(jī)中,一個(gè)中斷在中斷向量區(qū)的位置決定了它的優(yōu)先級(jí),位于低地址的中斷優(yōu)先級(jí)高于位于高地址的中斷。因此,對(duì)于ATmega16A來(lái)說(shuō),復(fù)位中斷RESET具有最高優(yōu)先級(jí),外部中斷INT0次之,而SPM_RDY的中斷優(yōu)先級(jí)最低。3.5 AVR中斷 -中斷控制 AVR單

31、片機(jī)采用固定的硬件優(yōu)先級(jí)方式,不支持通過(guò)軟件對(duì)中斷優(yōu)先級(jí)的重新設(shè)定。因此中斷優(yōu)先級(jí)的作用僅體現(xiàn)在當(dāng)同一時(shí)刻有兩個(gè)及兩個(gè)以上中斷源向MCU申請(qǐng)中斷的情況中。在這種情況下,MCU將根據(jù)優(yōu)先級(jí)的不同,將低優(yōu)先級(jí)的中斷掛起,首先響應(yīng)其中最高優(yōu)先級(jí)的中斷,待該中斷服務(wù)程序執(zhí)行完返回后,再順序響應(yīng)優(yōu)先級(jí)較低的中斷。 3.5 AVR中斷 -中斷控制 2. 中斷標(biāo)志AVR有兩種機(jī)制不同的中斷:帶有中斷標(biāo)志的中斷。不帶中斷標(biāo)志的中斷。中斷標(biāo)志是指每個(gè)中斷源在其IO空間寄存器中具有自己的一個(gè)中斷標(biāo)志位。在AVR中,大多數(shù)的中斷都屬于帶中斷標(biāo)志的中斷。中斷標(biāo)志位一般在MCU響應(yīng)該中斷時(shí)由硬件自動(dòng)清除,或在中斷服務(wù)程

32、序中通過(guò)讀寫專門數(shù)據(jù)寄存器的方式自動(dòng)清除。 3.5 AVR中斷 -中斷控制 關(guān)于中斷標(biāo)志,還有下述規(guī)則和情況:當(dāng)中斷被禁止或MCU不能馬上響應(yīng)中斷時(shí),則該中斷標(biāo)志將會(huì)一直保持,直到中斷允許并得到響應(yīng)為止。已建立的中斷標(biāo)志,實(shí)際就是一個(gè)中斷的請(qǐng)求信號(hào),如果暫時(shí)不能被響應(yīng),則該中斷標(biāo)志會(huì)一直保留(除非被用戶軟件清除掉),此時(shí)該中斷被“掛起”。如果有多個(gè)中斷被掛起,一旦中斷允許后,各個(gè)被掛起的中斷將按優(yōu)先級(jí)依次得到中斷響應(yīng)服務(wù)。3.5 AVR中斷 -中斷控制 在AVR中,還有個(gè)別的中斷不帶中斷標(biāo)志例如配置為低電平觸發(fā)的外部中斷。這類中斷只要條件滿足,就會(huì)一直向MCU發(fā)出中斷請(qǐng)求。如果由于等待時(shí)間過(guò)長(zhǎng)

33、而得不到響應(yīng),則可能因中斷條件結(jié)束而失去一次中斷服務(wù)的機(jī)會(huì)。如果這個(gè)低電平維持時(shí)間過(guò)長(zhǎng),則會(huì)使中斷服務(wù)完成返回后再次響應(yīng),使MCU重復(fù)響應(yīng)同一中斷的請(qǐng)求,進(jìn)行重復(fù)服務(wù)。 3.5 AVR中斷 -中斷控制 3. 中斷屏蔽與管理為了能夠靈活的管理中斷,AVR對(duì)中斷采用兩級(jí)控制方式。所謂兩級(jí)控制是指AVR有一個(gè)中斷允許的總控制位I(即AVR狀態(tài)寄存器SREG中的I標(biāo)志位)通常稱為全局中斷允許控制位。狀態(tài)寄存器SREG定義如表3- 11所示。 Bit76543210名稱ITHSVNZC讀寫R/WR/WR/WR/WR/WR/WR/WR/W初始值000000003.5 AVR中斷 -中斷控制 其中,I位置位

34、時(shí),使能全局中斷,清零時(shí)則不論單獨(dú)中斷標(biāo)志置位與否,都不會(huì)產(chǎn)生中斷。任一中斷發(fā)生后I清零,而執(zhí)行RETI(中斷返回)指令后,I位恢復(fù)置位以使能中斷。同時(shí),AVR為每一個(gè)中斷源都設(shè)置了獨(dú)立的中斷允許位,這些中斷允許位分散在每個(gè)中斷源所屬模塊的控制寄存器中。 3.5 AVR中斷 -中斷控制 4. 中斷嵌套由于AVR在響應(yīng)一個(gè)中斷的過(guò)程中通過(guò)硬件將I標(biāo)志位自動(dòng)清0,這樣就阻止了MCU響應(yīng)其他中斷,因此通常情況下,AVR是不能自動(dòng)實(shí)現(xiàn)中斷嵌套的。如果要實(shí)現(xiàn)中斷嵌套的應(yīng)用,則用戶可在中斷服務(wù)程序中使用指令使能全局中斷允許位I,通過(guò)間接的方式實(shí)現(xiàn)中斷的嵌套處理。 3.5 AVR中斷 -中斷控制 注意 除非

35、確實(shí)需要中斷嵌套,一般情況下不建議采用中斷嵌套。 3.5 AVR中斷 -中斷控制 ATmega16A有INT0、INT1和INT2這3個(gè)外部中斷源,分別由芯片外部引腳PD2、PD3和PB2上的電平變化或狀態(tài)作為中斷觸發(fā)信號(hào)。1. 外部中斷觸發(fā)方式INT0、INT1和INT2的中斷觸發(fā)方式取決于用戶程序?qū)CU控制寄存器MCUCR和MCU控制與狀態(tài)寄存器MCUCSR的設(shè)定。其中,INT0和INT1支持4種中斷觸發(fā)方式,INT2支持2種,觸發(fā)方式如表3- 12所示。 觸發(fā)方式INT0INT1INT2說(shuō)明上升沿觸發(fā)支持支持支持(異步)INT2為異步(不需要與IO時(shí)鐘同步)邊沿檢測(cè)下降沿觸發(fā)支持支持支

36、持(異步)INT2為異步(不需要與IO時(shí)鐘同步)邊沿檢測(cè)任意電平變化觸發(fā)支持支持不支持低電平觸發(fā)支持支持不支持不帶中斷標(biāo)志3.5 AVR中斷 外部中斷 2. 外部中斷寄存器在ATmega16A中,除了寄存器SREG中的全局中斷允許標(biāo)志位I外,與外部中斷有關(guān)的寄存器有4個(gè),共有11個(gè)標(biāo)志位其作用分別是這3個(gè)外部中斷的中斷標(biāo)志位、中斷允許控制位及定義外部中斷的觸發(fā)類型。MCU控制寄存器MCUCR的低4位為INT0(ISC01、ISC00)和INT1(ISC11、ISC10)中斷觸發(fā)類型控制位,MCUCR定義如表3- 13所示。 Bit76543210名稱SM2SESM1SM0ISC11ISC10I

37、SC01ISC00讀寫R/WR/WR/WR/WR/WR/WR/WR/W初始值000000003.5 AVR中斷 外部中斷 INT0和INT1的中斷觸發(fā)方式定義如表3- 14所示。 ISCn1ISCn0中斷觸發(fā)方式00INTn的低電平產(chǎn)生一個(gè)中斷請(qǐng)求01INTn的下降沿和上升沿都產(chǎn)生一個(gè)中斷請(qǐng)求10INTn的下降沿產(chǎn)生一個(gè)中斷請(qǐng)求11INTn的上升沿產(chǎn)生一個(gè)中斷請(qǐng)求3.5 AVR中斷 外部中斷 MCU控制和狀態(tài)寄存器MCUCSR中的第6位(ISC2)為INT2的中斷觸發(fā)類型控制位,MCUCSR定義如表3- 15所示。 INT2的中斷觸發(fā)方式如表3- 16所示。 Bit76543210名稱JTDI

38、SC2-JTRFWDRFBORFEXTPFPORF讀寫R/WR/WRR/WR/WR/WR/WR/W初始值0005個(gè)RESET復(fù)位標(biāo)志ISC2中斷觸發(fā)方式0INT2的下降沿產(chǎn)生一個(gè)異步中斷請(qǐng)求1INT2的上升沿產(chǎn)生一個(gè)異步中斷請(qǐng)求3.5 AVR中斷 外部中斷 通用中斷控制寄存器GICR的高3位為INT0、INT1和INT2的中斷允許控制位。各位定義如表3- 17所示。通用中斷標(biāo)志寄存器GIFR的高3位為INT0、INT1和INT2的中斷標(biāo)志位,GIFR各位定義如表3- 18所示。 Bit76543210名稱INT1INT0INT2-IVSELIVCE讀寫R/WR/WR/WRRRR/WR/W初始值

39、00000000Bit76543210名稱INTF1INTF0INTF2-讀寫R/WR/WRRRRRR初始值000000003.5 AVR中斷 外部中斷 當(dāng)INT0、INT1和INT2引腳上的有效事件滿足中斷觸發(fā)條件后,INTF0、INTF1和INTF2位會(huì)變成1。如果此時(shí)SREG寄存器中的I位為1,而且GICR寄存器中的INTn置1,則MCU將響應(yīng)中斷請(qǐng)求,跳至相應(yīng)的中斷向量處開始執(zhí)行中斷服務(wù)程序,同時(shí)硬件自動(dòng)將INTFn標(biāo)志清0。 Bit76543210名稱INT1INT0INT2-IVSELIVCE讀寫R/WR/WR/WRRRR/WR/W初始值00000000Bit76543210名稱I

40、NTF1INTF0INTF2-讀寫R/WR/WRRRRRR初始值000000003.5 AVR中斷 外部中斷 外部中斷常用作檢測(cè)外部事件例如檢測(cè)按鍵的狀態(tài)下述內(nèi)容用于實(shí)現(xiàn)任務(wù)描述3.D.2,在PD2管腳連接一個(gè)按鍵,使用外部中斷檢測(cè)該按鍵并翻轉(zhuǎn)LED狀態(tài)。 3.5 AVR中斷 中斷程序設(shè)計(jì) 1. 按鍵配置出于模塊化的設(shè)計(jì)要求,可將按鍵相關(guān)管腳的配置,封裝成為子函數(shù)SW_Config(),具體源碼如下所示:【描述3.D.2】 SW_Config()/* 按鍵初始化函數(shù) */void SW_Config(void)/PD2為外部中斷INT0引腳/PD2引腳連接一個(gè)按鍵,按下為低電平/設(shè)置PD2為輸

41、入DDRD &= (1PD2);/啟用PD2的上拉電阻PORTD |= (1PD2);/設(shè)置INT0為低電平觸發(fā)中斷MCUCR &=(1ISC01) | (1ISC00);/使能INT0GICR |=(1INT0);3.5 AVR中斷 中斷程序設(shè)計(jì) 2. 主函數(shù)編寫主函數(shù)main()存放在main.c文件中,除了相關(guān)初始化函數(shù)和主循環(huán)外,還需要定義一些必需的宏定義和頭文件等,詳細(xì)代碼清單如下所示:【描述3.D.2】 main.c/* 宏定義 */開啟iom16.h文件中的bit模式#define ENABLE_BIT_DEFINITIONS 1/* 頭文件 */IAR中已定義的ATmega16

42、相關(guān)寄存器名稱#include /* 子函數(shù) */LED初始化函數(shù),代碼請(qǐng)參考描述3.D.1void LED_Config(void);/按鍵初始化函數(shù)void SW_Config(void);/* 主函數(shù) */void main(void)/LED初始化函數(shù)LED_Config();/SW初始化函數(shù)SW_Config(); /開總中斷SREG |= (1 7); while(1)/等待中斷3.5 AVR中斷 中斷程序設(shè)計(jì) 3. 中斷服務(wù)函數(shù)中斷服務(wù)程序用于處理外部中斷的相關(guān)事務(wù),本例中需要將LED的顯示狀態(tài)進(jìn)行翻轉(zhuǎn),詳細(xì)代碼清單如下所示:【描述3.D.2】 INT0_S()/* 中斷服務(wù)函數(shù)

43、 */INT0中斷服務(wù)函數(shù)#pragma vector = INT0_vect_interrupt void INT0_S(void)/每次按下按鍵,LED狀態(tài)翻轉(zhuǎn)一次if(PORTC&(1PC7)PORTC &= (1PC7);elsePORTC |= (1PC7);運(yùn)行上述程序后,觀察開發(fā)板,每次按下相關(guān)按鍵都會(huì)看到LED的亮滅狀態(tài)隨之翻轉(zhuǎn)。3.5 AVR中斷 中斷程序設(shè)計(jì) 3.6 AVR定時(shí)器 相對(duì)于一般的8位單片機(jī)而言,AVR不僅配備了更多的定時(shí)/計(jì)數(shù)器(簡(jiǎn)稱定時(shí)器)接口,而且還是增強(qiáng)型的。例如通過(guò)定時(shí)器與比較匹配寄存器互相配合,生成占空比可變的方波信號(hào)即脈沖寬度調(diào)制輸出PWM信號(hào),用

44、于D/A轉(zhuǎn)換、電機(jī)無(wú)級(jí)調(diào)速和變頻控制等。 3.6 AVR定時(shí)器-定時(shí)器概述 ATmega16A配置了2個(gè)8位和1個(gè)16位共3個(gè)定時(shí)器。它們是8位的定時(shí)器T/C0和T/C2和16位的T/C1。它們之間的功能比較如表3-19所示。 名稱T/C0和T/C2T/C1位寬8位計(jì)數(shù)器16位設(shè)計(jì)(即允許16位的PWM)通道單通道計(jì)數(shù)器2個(gè)獨(dú)立的輸出比較單元輸出緩沖-雙緩沖的輸出比較寄存器輸入捕捉-一個(gè)輸入捕捉單元輸入噪聲-輸入捕捉噪聲抑制器比較匹配比較匹配發(fā)生時(shí)清除定時(shí)器(自動(dòng)加載)PWM脈沖無(wú)干擾脈沖,相位正確的PWM可變PWM周期-可變的PWM周期頻率發(fā)生器頻率發(fā)生器外部事件計(jì)數(shù)器外部事件計(jì)數(shù)器預(yù)分頻器

45、10位的時(shí)鐘預(yù)分頻器中斷源溢出和比較匹配中斷源(TOV0和OCF0)4個(gè)獨(dú)立的中斷源(TOV1、OCF1A、OCF1B與ICF1)定時(shí)器原理框圖如圖3- 8所示。 3.6 AVR定時(shí)器-定時(shí)器概述 1. 時(shí)鐘源與預(yù)分頻器對(duì)于定時(shí)器來(lái)說(shuō),首先需要明確的就是時(shí)鐘源,不同的時(shí)鐘源決定了其定時(shí)和計(jì)數(shù)的時(shí)間間隔以及穩(wěn)定性。1)內(nèi)部時(shí)鐘源T/C可以由內(nèi)部同步時(shí)鐘或外部異步時(shí)鐘驅(qū)動(dòng)。時(shí)鐘源是由時(shí)鐘選擇邏輯決定的,而時(shí)鐘選擇邏輯是由位于T/C控制寄存器TCCR0的時(shí)鐘選擇位CS02:0控制的。3.6 AVR定時(shí)器-定時(shí)器概述 T/C1與T/C0共用一個(gè)預(yù)分頻模塊,但它們可以有不同的分頻設(shè)置。當(dāng)CSn2:0 =

46、 1時(shí),系統(tǒng)內(nèi)部時(shí)鐘直接作為T/C的時(shí)鐘源,這也是T/C最高頻率的時(shí)鐘源fCLK_I/O,與系統(tǒng)時(shí)鐘頻率相同。預(yù)分頻器可以輸出4個(gè)不同的時(shí)鐘信號(hào)fCLK_I/O/8、fCLK_I/O/64、fCLK_I/O/256或fCLK_I/O/1024。3.6 AVR定時(shí)器-定時(shí)器概述 2)外部時(shí)鐘源由T1/T0引腳提供的外部時(shí)鐘源可以用作T/C時(shí)鐘clkT1/clkT0。引腳同步邏輯在每個(gè)系統(tǒng)時(shí)鐘周期對(duì)引腳T1/T0進(jìn)行采樣。然后將同步(采樣)信號(hào)送到邊沿檢測(cè)器。寄存器由內(nèi)部系統(tǒng)時(shí)鐘clkI/O的上跳沿驅(qū)動(dòng)。當(dāng)內(nèi)部時(shí)鐘為高時(shí),鎖存器可以看作時(shí)透明的。3.6 AVR定時(shí)器-定時(shí)器概述 2. 計(jì)數(shù)單元8位

47、T/C0的主要功能部件為可編程的雙向計(jì)數(shù)單元。原理框圖如圖3- 9所示。 根據(jù)不同的工作模式,計(jì)數(shù)器針對(duì)每一個(gè)clkT0實(shí)現(xiàn)清零、加一或減一操作。其時(shí)鐘和操作有如下特點(diǎn):clkT0可以由內(nèi)部時(shí)鐘源或外部時(shí)鐘源產(chǎn)生,具體由時(shí)鐘選擇位CS02:0確定。3.6 AVR定時(shí)器-定時(shí)器概述 沒有選擇時(shí)鐘源時(shí)(CS02:0 = 0)定時(shí)器即停止。不管有沒有clkT0,CPU都可以訪問(wèn)TCNT0。CPU寫操作比計(jì)數(shù)器其他操作(如清零、加減操作)的優(yōu)先級(jí)高。計(jì)數(shù)序列由T/C控制寄存器(TCCR0)的WGM01和WGM00決定。計(jì)數(shù)器計(jì)數(shù)行為與輸出比較OC0的波形有緊密的關(guān)系。T/C溢出中斷標(biāo)志TOV0根據(jù)WG

48、M01:0設(shè)定的工作模式來(lái)設(shè)置。TOV0可以用于產(chǎn)生CPU中斷。 3.6 AVR定時(shí)器-定時(shí)器概述 3. 輸出比較單元當(dāng)定時(shí)器作輸出比較時(shí),8位比較器持續(xù)對(duì)TCNT0和輸出比較寄存器OCR0進(jìn)行比較。輸出比較單元結(jié)構(gòu)圖如圖3- 10所示。 一旦TCNT0等于OCR0,比較器就給出匹配信號(hào)。在匹配發(fā)生的下一個(gè)定時(shí)器時(shí)鐘周期輸出比較標(biāo)志OCF0置位。3.6 AVR定時(shí)器-定時(shí)器概述 3. 輸出比較單元若此時(shí)OCIE0=1且SREG的全局中斷標(biāo)志I置位,CPU將產(chǎn)生輸出比較中斷。執(zhí)行中斷服務(wù)程序時(shí)OCF0自動(dòng)清零,或者通過(guò)軟件寫“1”的方式來(lái)清零。另外,根據(jù)由WGM21:0和COM01:0設(shè)定的不同

49、的工作模式,波形發(fā)生器利用匹配信號(hào)產(chǎn)生不同的波形。同時(shí),波形發(fā)生器還利用max和bottom信號(hào)來(lái)處理極值條件下的特殊情況。3.6 AVR定時(shí)器-定時(shí)器概述 AVR的定時(shí)器工作模式比較多,具體有如下幾種:普通模式。CTC(比較匹配時(shí)清零定時(shí)器)模式??焖貾WM模式。相位修正PWM模式。相位與頻率修正PWM模式。在這幾種工作模式中,普通模式為最常用的工作模式。限于篇幅,本節(jié)只介紹普通模式,其他工作模式可參考相關(guān)資料。3.6 AVR定時(shí)器-定時(shí)器工作模式 以定時(shí)器0為例,在普通模式下計(jì)數(shù)器不停地累加,直至:計(jì)到最大值后(TOP = 0 xFF)數(shù)值溢出計(jì)數(shù)器簡(jiǎn)單地返回到最小值0 x00重新開始。在

50、TCNT0為零的同一個(gè)定時(shí)器時(shí)鐘里T/C溢出標(biāo)志TOV0置位。TOV0有點(diǎn)象第17位,只是只能置位,不會(huì)清零。由于定時(shí)器中斷服務(wù)程序能夠自動(dòng)清零TOV0,因此可以通過(guò)軟件提高定時(shí)器的分辨率。在普通模式下用戶可以隨時(shí)寫入新的計(jì)數(shù)器數(shù)值。如果定時(shí)時(shí)間太長(zhǎng),必須使用定時(shí)器溢出中斷或預(yù)分頻器來(lái)擴(kuò)展定時(shí)范圍。 3.6 AVR定時(shí)器-定時(shí)器工作模式 與定時(shí)器有關(guān)的寄存器,以定時(shí)器0為例,計(jì)數(shù)寄存器TCNT0各位定義如表3- 20所示。輸出比較寄存器OCR0各位的定義如表3- 21所示。Bit76543210名稱TCNT0讀寫R/WR/WR/WR/WR/WR/WR/WR/W初始值00000000Bit765

51、43210名稱OCR0讀寫R/WR/WR/WR/WR/WR/WR/WR/W初始值000000003.6 AVR定時(shí)器-定時(shí)器寄存器 8位寄存器OCR0中的數(shù)據(jù)用于與寄存器TCNT0中的計(jì)數(shù)值進(jìn)行匹配比較。在T/C0運(yùn)行期間,比較匹配單元一直將寄存器TCNT0的計(jì)數(shù)值與寄存器OCR0的內(nèi)容進(jìn)行比較一旦TCNT0的計(jì)數(shù)值與OCR0的數(shù)值匹配相等,將產(chǎn)生一個(gè)中斷申請(qǐng)或改變OC0的輸出電平。定時(shí)/計(jì)數(shù)器中斷屏蔽寄存器TIMSK各位定義如表3- 22所示。 Bit76543210名稱OCIE2TOIE2TICIE1OC1E1AOCIE1BTOIE1OCIE0TOIE0讀寫R/WR/WR/WR/WR/WR

52、/WR/WR/W初始值000000003.6 AVR定時(shí)器-定時(shí)器寄存器 涉及定時(shí)器的相關(guān)位定義如表3- 23所示。定時(shí)器中斷標(biāo)志寄存器TIFR各位定義如表3- 24所示。 涉及定時(shí)器的相關(guān)位定義如表3- 25所示。 位名稱說(shuō)明OCIE2定時(shí)器2輸出比較匹配中斷允許標(biāo)志OCIE0定時(shí)器0輸出比較匹配中斷允許標(biāo)志TOIE2定時(shí)器2溢出中斷允許標(biāo)志TOIE0定時(shí)器0溢出中斷允許標(biāo)志Bit176543210名稱OCF2TOV2ICF1OCF1AOCF1BTOV1OCF0TOV0讀寫R/WR/WR/WR/WR/WR/WR/WR/W初始值00000000位名稱說(shuō)明OCF2定時(shí)器2比較匹配輸出的中斷標(biāo)志位

53、OCF0定時(shí)器0比較匹配輸出的中斷標(biāo)志位TOV2定時(shí)器2溢出中斷標(biāo)志位TOV0定時(shí)器0溢出中斷標(biāo)志位3.6 AVR定時(shí)器-定時(shí)器寄存器 定時(shí)器控制寄存器TCCR0各位定義如表3- 26所示。涉及定時(shí)器的相關(guān)位定義如表3- 27所示。 波形產(chǎn)生模式相關(guān)定義如表3- 28所示。 Bit76543210名稱FOC0WGM00COM01COM00WGM01CS02CS01CS00讀寫R/WR/WR/WR/WR/WR/WR/WR/W初始值00000000位名稱說(shuō)明FOC0強(qiáng)制輸出比較位,非PWM模式下有效WGM01:0波形發(fā)生模式位COM01:0比較匹配輸出方式CS02:0時(shí)鐘源選擇模式WGM01WGM

54、00工作模式計(jì)數(shù)上限OCR0更新TOV0更新000普通模式0 xFF立即0 xFF101PWM相位可調(diào)0 xFF0 xFF0 x00210CTC模式OCR0立即0 xFF311快速PWM0 xFF0 xFF0 xFF3.6 AVR定時(shí)器-定時(shí)器寄存器 普通模式和非PWM模式(WGM=0、2)下的COM0位功能定義如表3- 29所示??焖貾WM模式(WGM0=3)下的COM0位功能定義如表3- 30所示。 相位可調(diào)PWM模式(WGM=1)下的COM0位功能定義如表3- 31所示。 COM01COM00說(shuō)明00PB3為通用IO引腳(OC0與引腳不連接)01比較匹配時(shí),觸發(fā)OC0(OC0為源OC0的

55、取反)10比較匹配時(shí),清零OC011比較匹配時(shí),置位OC0COM01COM00說(shuō)明00PB3為通用IO引腳(OC0與引腳不連接)01保留10比較匹配時(shí),清零OC0;計(jì)數(shù)值為0 xFF時(shí),置位OC011比較匹配時(shí),置位OC0;計(jì)數(shù)值為0 xFF時(shí),清零OC0COM01COM00說(shuō)明00PB3為通用IO引腳(OC0與引腳不連接)01保留10向上計(jì)數(shù)過(guò)程中比較匹配時(shí),清零OC0向下計(jì)數(shù)過(guò)程中比較匹配時(shí),置位OC011向上計(jì)數(shù)過(guò)程中比較匹配時(shí),置位OC0向下計(jì)數(shù)過(guò)程中比較匹配時(shí),清零OC03.6 AVR定時(shí)器-定時(shí)器寄存器 定時(shí)器控制寄存器TCCR0各位定義如表3- 26所示。涉及定時(shí)器的相關(guān)位定義如

56、表3- 27所示。 波形產(chǎn)生模式相關(guān)定義如表3- 28所示。 Bit76543210名稱FOC0WGM00COM01COM00WGM01CS02CS01CS00讀寫R/WR/WR/WR/WR/WR/WR/WR/W初始值00000000位名稱說(shuō)明FOC0強(qiáng)制輸出比較位,非PWM模式下有效WGM01:0波形發(fā)生模式位COM01:0比較匹配輸出方式CS02:0時(shí)鐘源選擇模式WGM01WGM00工作模式計(jì)數(shù)上限OCR0更新TOV0更新000普通模式0 xFF立即0 xFF101PWM相位可調(diào)0 xFF0 xFF0 x00210CTC模式OCR0立即0 xFF311快速PWM0 xFF0 xFF0 xF

57、F3.6 AVR定時(shí)器-定時(shí)器寄存器 定時(shí)器0的時(shí)鐘源選擇如表3- 32所示。 CS02CS01CS00說(shuō)明000無(wú)時(shí)鐘源(停止定時(shí)器)001CLKtos(不經(jīng)過(guò)分頻器)010CLKtos/8(來(lái)自分頻器)011CLKtos/64(來(lái)自分頻器)100CLKtos/256(來(lái)自分頻器)101CLKtos/1024(來(lái)自分頻器)110外部T0引腳,下降沿驅(qū)動(dòng)111外部T0引腳,上升沿驅(qū)動(dòng)3.6 AVR定時(shí)器-定時(shí)器寄存器 1. 選擇定時(shí)器當(dāng)AVR單片機(jī)晶振為8MHz(十進(jìn)制),計(jì)數(shù)器的時(shí)鐘源為內(nèi)部時(shí)鐘時(shí),需要計(jì)數(shù)8000000個(gè)時(shí)鐘周期才能達(dá)到定時(shí)1秒一次溢出的功能,顯然大大超過(guò)了計(jì)數(shù)器的技術(shù)范圍

58、。實(shí)踐中采用預(yù)分頻器進(jìn)行分頻,以256分頻為例,則需要的時(shí)鐘周期為:8000000/256=31250則16位的計(jì)數(shù)器1的計(jì)數(shù)范圍為065535(0 xffff),可以達(dá)到要求。本例中可選定時(shí)器1。 3.6 AVR定時(shí)器-定時(shí)器程序設(shè)計(jì) 2. 計(jì)算計(jì)數(shù)值由于普通模式下定時(shí)器計(jì)數(shù)到0 xffff即產(chǎn)生中斷,并翻轉(zhuǎn)到0 x0000開始計(jì)數(shù),則需要每次溢出后,改變定時(shí)器的計(jì)數(shù)初值,以便使其每次計(jì)數(shù)31250后,產(chǎn)生溢出中斷。更改定時(shí)器1的計(jì)數(shù)初值可使用如下語(yǔ)句:TCNT1 =0 xffff-31250;使用計(jì)算的形式可以提高程序的可讀性及避免計(jì)算錯(cuò)誤,修改起來(lái)也方便。 3.6 AVR定時(shí)器-定時(shí)器程

59、序設(shè)計(jì) 3. 定時(shí)器初始化出于模塊化的設(shè)計(jì)要求,定時(shí)器相關(guān)的配置可封裝成為子函數(shù)TIM_Config(),具體源碼如下所示:【描述3.D.3】 TIM_Config()/* 定時(shí)器初始化函數(shù) */void TIM_Config(void)/配置時(shí)鐘為clkio/256TCCR1B &=(1CS11)|(1CS10); TCCR1B |=(1CS12);/配置計(jì)數(shù)初值TCNT1 =0 xffff-31250;/開啟定時(shí)器1溢出中斷TIMSK |=(1TOIE1);3.6 AVR定時(shí)器-定時(shí)器程序設(shè)計(jì) 4. 主函數(shù)編寫主函數(shù)main()存放在main.c文件中,除了相關(guān)初始化函數(shù)和主循環(huán)外,還需要

60、定義一些必需的宏定義和頭文件等,詳細(xì)代碼清單如下所示:【描述3.D.3】 main.c/* 宏定義 */開啟iom16.h文件中的bit模式#define ENABLE_BIT_DEFINITIONS 1/* 頭文件 */IAR中已定義的ATmega16相關(guān)寄存器名稱#include /* 子函數(shù) */LED初始化函數(shù),代碼請(qǐng)參考描述3.D.1void LED_Config(void);/定時(shí)器初始化函數(shù)void TIM_Config(void);/* 主函數(shù) */void main(void)/LED初始化函數(shù)LED_Config();/TIM初始化函數(shù)TIM_Config();/開總中斷S

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論