版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第3章 RFID閱讀器開發(fā)基礎(chǔ)目錄 3.1 閱讀器電路組成 3.2 AVR單片機(jī)概述 3.3 AVR時鐘與熔絲位 3.4 AVR通用IO口 3.5 AVR中斷 3.6 AVR定時器 3.7 AVR USART 3.8 AVR SPI 本章目標(biāo) 掌握閱讀器電路組成了解ATmega16的主要特性了解AVR熔絲位作用掌握AVR通用IO口的配置和使用掌握AVR中斷的配置和使用掌握AVR定時器的配置和使用掌握AVR USART的配置和使用掌握AVR SPI的配置 學(xué)習(xí)導(dǎo)航 任務(wù)描述 【描述】3.D. 1使用PC7管腳交替點(diǎn)亮和熄滅一只LED。【描述】3.D. 2在PD2管腳連接一個按鍵,使用外部中斷檢測
2、該按鍵并翻轉(zhuǎn)LED狀態(tài)?!久枋觥?.D. 3使用定時器1的溢出中斷,1秒定時驅(qū)動LED閃爍。【描述】3.D. 4配置USART波特率為115200,使用中斷法對PC機(jī)發(fā)來數(shù)據(jù)進(jìn)行回顯,并驅(qū)動LED狀態(tài)翻轉(zhuǎn)。 3.1 閱讀器電路組成 從電路上來看,閱讀器是一個嵌入式系統(tǒng),一般由MCU控制器、射頻收發(fā)、通信接口、天線以及其他外圍電路組成。其組成框圖如圖3- 1所示。本章將首先講解閱讀器電路組成,然后講解作為閱讀器核心MCU的AVR單片機(jī)及其外圍電路。具體收發(fā)通道等會根據(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ī),具體型號為Atmega16A。 3.1 閱讀器電路組成-收發(fā)通道 收發(fā)通道主要負(fù)責(zé)數(shù)據(jù)的鏈路和無線鏈路,由以下兩部分組成:發(fā)送通道,包括編碼、調(diào)制和功率放大電路,用于向應(yīng)答器傳送命令和寫數(shù)據(jù)。接收通道,包括解調(diào)、解碼電路,用于接收應(yīng)答器返回的應(yīng)答信息和數(shù)據(jù)。其收發(fā)通道的電路的結(jié)構(gòu)框圖如圖3- 3所示。另外需要注意的是在實(shí)際的電路設(shè)計中,根據(jù)應(yīng)答器的防碰撞能力的設(shè)置,還應(yīng)考慮防碰撞電路的設(shè)計。 3.
4、2 AVR單片機(jī)概述 1997年,由Atmel公司挪威設(shè)計中心的A先生和V先生,利用Atmel公司的Flash新技術(shù),共同研發(fā)出RISC精簡指令集高速8位單片機(jī),簡稱AVR。AVR的單片機(jī)可以廣泛應(yīng)用于計算機(jī)外部設(shè)備、工業(yè)實(shí)時控制、儀器儀表、通訊設(shè)備、家用電器等各個領(lǐng)域。 3.2 AVR單片機(jī)概述 -AVR主要功能特性 AVR單片機(jī)硬件結(jié)構(gòu)采取8位機(jī)與16位機(jī)的折中策略,即采用局部寄存器存堆和單體高速輸入/輸出的方案。提高了指令執(zhí)行速度,克服了瓶頸現(xiàn)象,增強(qiáng)了功能。同時又減少了對外設(shè)管理的開銷,相對簡化了硬件結(jié)構(gòu),降低了成本。因而AVR單片機(jī)在軟/硬件開銷、速度、性能和成本諸多方面取得了優(yōu)化平
5、衡。 AVR單片機(jī)其他特點(diǎn)如下:哈佛結(jié)構(gòu),具備1MIPS / MHz的高速運(yùn)行處理能力。超功能精簡指令集(RISC),具有32個通用工作寄存器??焖俚拇嫒〖拇嫫鹘M、單周期指令系統(tǒng),大大優(yōu)化了目標(biāo)代碼的大小、執(zhí)行效率,部分型號Flash非常大,特別適用于使用高級語言進(jìn)行開發(fā)。作輸出時可輸出40mA(單一輸出),作輸入時可設(shè)置為三態(tài)高阻抗輸入或帶上拉電阻輸入,具備10mA-20mA灌電流的能力。3.2 AVR單片機(jī)概述 -AVR主要功能特性 AVR單片機(jī)其他特點(diǎn)如下:片內(nèi)集成多種頻率的RC振蕩器、上電自動復(fù)位、看門狗、啟動延時等功能,外圍電路更加簡單,系統(tǒng)更加穩(wěn)定可靠。大部分AVR片上資源豐富:帶
6、EEPROM、PWM、RTC、SPI、USART、TWI、ISP、AD、Analog Comparator、WDT等。大部分AVR除了有ISP功能外,還有IAP功能,方便升級或銷毀應(yīng)用程序。 3.2 AVR單片機(jī)概述 -AVR主要功能特性 3.2 AVR單片機(jī)概述 -ATmega16A ATmega16A是AVR系列單片機(jī)中的一個型號,因其功能豐富、性價比高,被廣泛應(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引腳功能較多,其具體說明如表3- 1所示。 名稱功能VCC數(shù)字電路電源GND地端口A(PA7.PA0)A/D轉(zhuǎn)換器的模擬輸入端8位雙向I/O口,具有可編程的內(nèi)部上拉電阻。在復(fù)位過程中,即使系統(tǒng)時鐘還未起振,端口A處于高阻狀態(tài)端口B(PB7.PB0)8位雙向I/O口,具有可編程的內(nèi)部上拉電阻。在復(fù)位過程中,即使系統(tǒng)時鐘還未起振,端口B處于高阻狀態(tài)端口B可以用做其他不同的特殊功能端口C(PC7.PC0)8位雙向I/O口,具有可編程的內(nèi)部上拉電阻。在復(fù)位過程中,即使系統(tǒng)時鐘還未起振,端口C處于高阻狀態(tài)。如果JTAG接
8、口使能,即使復(fù)位出現(xiàn)引腳PC5(TDI)、PC3(TMS)與PC2(TCK)的上拉電阻被激活,端口C也可以用做其他不同的特殊功能端口D(PD7.PD0)8位雙向I/O口,具有可編程的內(nèi)部上拉電阻。在復(fù)位過程中,即使系統(tǒng)時鐘還未起振,端口D處于高阻狀態(tài),端口D可以用做其他不同的特殊功能RESET復(fù)位輸入引腳。持續(xù)時間超過最小門限時間的低電平將引起系統(tǒng)復(fù)位。持續(xù)時間小于門限間的脈沖不能保證可靠復(fù)位XTAL1反向振蕩放大器與片內(nèi)時鐘操作電路的輸入端XTAL2反向振蕩放大器的輸出端AVCCAVCC是端口A與A/D轉(zhuǎn)換器的電源。不使用ADC時,該引腳應(yīng)直接與VCC連接。使用ADC時應(yīng)通過一個低通濾波器與
9、VCC連接AREFA/D 的模擬基準(zhǔn)輸入引腳3.2 AVR單片機(jī)概述 -ATmega16A 3.3 AVR時鐘與熔絲位 AVR單片機(jī)的運(yùn)行,需要有時鐘的驅(qū)動,而時鐘源的選擇需要設(shè)置相關(guān)熔絲位。 3.3 AVR時鐘與熔絲位 -AVR系統(tǒng)時鐘 AVR有一套時鐘系統(tǒng),也有多個時鐘源可作為系統(tǒng)時鐘,這些時鐘并不需要同時工作。為了降低功耗,可以通過使用不同的睡眠模式來禁止無需工作的模塊的時鐘,具體時鐘分布如圖3- 6所示。 上圖中涉及的時鐘功能如表3- 2所示。 時鐘名稱功能CPU時鐘CPU時鐘與操作AVR內(nèi)核的子系統(tǒng)相連,如通用寄存器、狀態(tài)寄存器及保存堆棧指針的數(shù)據(jù)存儲器。終止CPU時鐘將使內(nèi)核停止工
10、作和計算IO時鐘I/O時鐘用于主要的I/O模塊,如定時器/計數(shù)器、SPI和USART。I/O時鐘還用于外部中斷模塊。要注意的是有些外部中斷由異步邏輯檢測,因此即使I/O時鐘停止了這些中斷仍然可以得到監(jiān)控Flash時鐘Flash 時鐘控制Flash接口的操作。此時鐘通常與CPU時鐘同時掛起或激活異步定時器時鐘異步定時器時鐘允許異步定時器/計數(shù)器與LCD控制器直接由外部32kHz時鐘晶體驅(qū)動。使得此定時器/計數(shù)器即使在睡眠模式下仍然可以為系統(tǒng)提供一個實(shí)時時鐘ADC時鐘ADC具有專門的時鐘。這樣可以在ADC工作的時候停止CPU和I/O時鐘以降低數(shù)字電路產(chǎn)生的噪聲,從而提高ADC轉(zhuǎn)換精度3.3 AVR
11、時鐘與熔絲位 -AVR系統(tǒng)時鐘 AVR單片機(jī)的多種時鐘源通過一個時鐘多路選擇器,用來驅(qū)動系統(tǒng)時鐘或作為其他功能,時鐘源的選擇需要通過對熔絲位進(jìn)行配置。被選擇的時鐘輸入到AVR時鐘發(fā)生器,再分配到相應(yīng)模塊。 3.3 AVR時鐘與熔絲位 -AVR系統(tǒng)時鐘 AVR有6個時鐘源如下所示:外部晶體/陶瓷振蕩器,常用作主時鐘源,這個振蕩器可以使用石英晶體也可以使用陶瓷諧振器。XTAL1和XTAL2分別為用作片內(nèi)振蕩器的反相放大器的輸入和輸出。外部低頻振蕩器,一般用來連接32.768kHz晶振。需要對熔絲位編程,使能XTAL1和XTAL2的內(nèi)部電容,從而除去外部電容。內(nèi)部電容的標(biāo)稱數(shù)為36pF。外部RC振蕩
12、器,對于時間不敏感的應(yīng)用可以使用外部RC振蕩器。頻率可以通過方程f=1/(3RC)進(jìn)行粗略的估算。電容至少需要22Pf。3.3 AVR時鐘與熔絲位 -AVR系統(tǒng)時鐘 AVR有6個時鐘源如下所示:標(biāo)定的內(nèi)部RC振蕩器,標(biāo)定的片內(nèi)RC振蕩器提供了固定的1.0、2.0、4.0或8.0MHz的時鐘。這個時鐘也可作為系統(tǒng)時鐘。選擇這個時鐘之后就無需外部器件了。外部時鐘,XTAL1連接外部來的時鐘信號,作為系統(tǒng)時鐘驅(qū)動整個CPU運(yùn)行。XTAL2可懸空。定時器振蕩器,對于擁有定時器/振蕩器引腳(TOSC1和TOSC2)的AVR微處理器,晶體可以直接與這兩個引腳相連,無需外部電容。此振蕩器針對32.768kH
13、z的中標(biāo)晶體做了優(yōu)化。 3.3 AVR時鐘與熔絲位 -AVR系統(tǒng)時鐘 缺省時鐘源 器件出廠時,缺省設(shè)置的時鐘源是1MHz的內(nèi)部RC振蕩器,啟動時間為最長。這種設(shè)置保證用戶可以通過ISP或并行編程器得到所需的時鐘源。 3.3 AVR時鐘與熔絲位 -AVR系統(tǒng)時鐘 在AVR內(nèi)部有多組與器件配置和運(yùn)行環(huán)境相關(guān)的熔絲位,這些熔絲位非常重要,用戶可以通過設(shè)定和配置熔絲位,使AVR具備不同的特性,以更加適合實(shí)際的應(yīng)用。ATmega16A有兩個熔絲位字節(jié),分別為熔絲位高字節(jié)和熔絲位低字節(jié)。如果熔絲位被編程則讀返回值為”0”。其中高字節(jié)每個Bit的含義如表3- 3所示。 熔絲位高字節(jié)位號描述默認(rèn)值OCDEN7
14、使能OCD1(未編程,OCD禁用)JTAGEN6使能JTAG0(編程,JTAG使能)SPIEN5使能串行程序和數(shù)據(jù)下載0(編程,SPI編程使能)CKOPT4振蕩器選項1(未編程)EESAVE3執(zhí)行芯片擦除時EEPROM的內(nèi)容保留1(未編程,內(nèi)容不保留)BOOTSZ12選擇Boot區(qū)大小0(編程)BOOTSZ01選擇Boot區(qū)大小0(編程)BOOTRST0選擇復(fù)位向量1(未編程)3.3 AVR時鐘與熔絲位 AVR熔絲位 熔絲位低字節(jié)每個Bit的含義如表3- 4所示。 熔絲位低字節(jié)位號描述默認(rèn)值BODLEVEL7BOD觸發(fā)電平1(未編程)BODEN6BOD使能1(未編程,BOD禁用)SUT15選擇
15、啟動時間1(未編程)SUT04選擇啟動時間0(編程)CKSEL33選擇時鐘源0(編程)CKSEL22選擇時鐘源0(編程)CKSEL11選擇時鐘源0(編程)CKSEL00選擇時鐘源1(未編程)3.3 AVR時鐘與熔絲位 AVR熔絲位 在熔絲位中,與系統(tǒng)時鐘有關(guān)的有CKOPT和CKSEL3:0幾位,主要用來選擇振蕩器種類和工作頻率,具體配置如表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時鐘與熔絲位 AVR熔絲位 CKOPT的數(shù)值決定了振蕩器輸出幅度大小,不同振幅決定了其適應(yīng)場合的不同,具體含義如下所述:在CKOPT=0時,振蕩器的輸出振幅較大,容易起振,適合在干擾大的場合以及使用晶體振蕩器超過8MHz的情況下使用。當(dāng)CKOPT=1時,振蕩器的輸出振幅較小,這樣可以減少對電源的消耗,對外的電磁輻射也較小。注意 熔絲位的設(shè)置需要用特殊的軟件和方法,一旦配置,不建議輕易更改。如果修改不當(dāng),輕則造成運(yùn)行不正常,重則鎖死芯片。 3.3 AVR時鐘與熔絲位 AVR熔絲位 3.4 AVR
17、通用IO口 ATmega16A有4組通用IO端口,分別稱為PORTA、PORTB、PORTC和PORTD,簡稱PA、PB、PC和PD。每組IO端口有8個IO管腳。這些管腳都是相互獨(dú)立,具有真正的讀-改-寫功能。AVR通用IO口的主要特點(diǎn)如下:雙向獨(dú)立位控的IO口。每一位都可以單獨(dú)進(jìn)行配置,互不影響。大電流驅(qū)動,每個IO口輸出采用推挽方式,最大20mA灌電流,可直接驅(qū)動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個8位寄存器,對應(yīng)著該組的8個引腳,它
18、們分別為:方向控制寄存器DDRx(x=A、B、C、D)。數(shù)據(jù)寄存器PORTx(x=A、B、C、D)。輸入引腳寄存器PINx(x=A、B、C、D)。 此外每個IO口內(nèi)部還有一個上拉電阻。方向控制寄存器DDRx,用于控制IO口的輸入輸出方向,即控制IO口的工作方式為輸入方式還是輸出方式。當(dāng)DDRx=1時,IO口處于輸出工作方式,此時數(shù)據(jù)寄存器PORTx中的數(shù)據(jù)通過一個推挽電路輸出到外部引腳當(dāng)PORTx=1時,IO引腳呈現(xiàn)高電平,同時可以提供輸出20mA的電流而當(dāng)PORTx=0時,IO引腳呈現(xiàn)低電平,同時可以吸納20mA電流。因此,AVR的IO口在輸出方式下提供了比較大的驅(qū)動能力,可以直接驅(qū)動LED
19、燈小功率外圍器件。3.4 AVR通用IO口 -通用IO口結(jié)構(gòu) 當(dāng)DDRx=0時,IO口處于輸入方式。此時引腳寄存器PINx中的數(shù)據(jù)就是外部引腳的實(shí)際電平,通過讀PINx寄存器可以獲得外部引腳上的真實(shí)電平。在輸入方式下,PORTx可以控制使用或者不使用內(nèi)部的上拉電阻。此外,在寄存器SFIOR中,有一位稱作PUD,它是AVR全部IO口內(nèi)部上拉電阻的總開關(guān)。當(dāng)PUD=1時,AVR所有IO內(nèi)部上拉電阻都不起作用。當(dāng)PUD=0時,各個IO口內(nèi)部的上拉電阻取決于PORTx的設(shè)置。 3.4 AVR通用IO口 -通用IO口結(jié)構(gòu) ATmega16A的4個端口都有各自對應(yīng)的3個IO口寄存器,分別為數(shù)據(jù)寄存器POR
20、T、數(shù)據(jù)方向寄存器DDR和輸入引腳PIN。它們占用了IO空間的12個地址,以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對外數(shù)據(jù)輸出和輸入,LED驅(qū)動和按鍵檢測等。下述內(nèi)容用于實(shí)現(xiàn)任務(wù)描述3.D.1,使用PC7管腳交替點(diǎn)亮和熄滅一只LED。 3.4 AVR通用IO口 -通用
22、IO口程序設(shè)計 1. LED初始化基于模塊化和移植的考慮,可將IO口設(shè)置子程序單獨(dú)封裝成為一個子函數(shù),例如LED相關(guān)管腳的配置,可封裝成為子函數(shù)LED_Config(),具體源碼如下所示:【描述3.D.1】 LED_Config()/* LED初始化函數(shù) */void LED_Config(void)/PC7引腳連接一個LED,低電平點(diǎn)亮/設(shè)置PC7為輸出DDRC |= (1PC7);/設(shè)置PC7為高電平PORTC |= (1PC7);3.4 AVR通用IO口 -通用IO口程序設(shè)計 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è)計 單步執(zhí)
24、行如下語句時,會看到LED亮滅轉(zhuǎn)換。while(1)/點(diǎn)亮LEDPORTC &= (1PC7);/熄滅LEDPORTC |= (1PC7);3.4 AVR通用IO口 -通用IO口程序設(shè)計 3.4 AVR通用IO口 -IO端口第二功能 AVR的IO端口除了通用IO功能外,大多數(shù)端口引腳都具有第二功能,使能某些引腳的第二功能,不會影響到同一端口其他引腳作為通用IO口的功能。ATmega16A的IO端口第二功能如表3- 9所示。 端口第二功能功能說明PA7ADC7ADC輸入通道7PA6ADC6ADC輸入通道6PA5ADC5ADC輸入通道5PA4ADC4ADC輸入通道4PA3ADC3ADC輸入通道3P
25、A2ADC2ADC輸入通道2PA1ADC1ADC輸入通道1PA0ADC0ADC輸入通道0PB7SCKSPI總線的串行時鐘PB6MISOSPI總線的主機(jī)輸入/從機(jī)輸出信號PB5MOSISPI總線的主機(jī)輸出/從機(jī)輸入信號PB4/SSSPI從機(jī)選擇引腳PB3AIN1/OC0模擬比較負(fù)輸入/T/C0輸出比較匹配輸出PB2AIN0/INT2模擬比較正輸入/外部中斷2輸入PB1T1T/C1外部計數(shù)器輸入端口第二功能功能說明PC7TOSC2定時振蕩器引腳2PC6TOSC1定時振蕩器引腳1PC5TDIJTAG測試數(shù)據(jù)輸入PC4TDOJTAG測試數(shù)據(jù)輸出PC3TMSJTAG測試模式選擇PC2TCKJTAG測試時
26、鐘PC1SDA兩線串行總線數(shù)據(jù)輸入/輸出線PC0SCL兩線串行總線時鐘線PD7OC2T/C2輸出比較匹配輸出PD6ICP1T/C1輸入捕捉引腳PD5OC1AT/C1輸出比較A匹配輸出PD4OC1BT/C1輸出比較B匹配輸出PD3INT1外部中斷1的輸入PD2INT0外部中斷0的輸入PD1TXDUSART輸出引腳PD0RXDUSART輸入引腳3.5 AVR中斷 AVR單片機(jī)的中斷源種類多、門類全,便于設(shè)計實(shí)時、多功能、高效率的嵌入式應(yīng)用系統(tǒng)。但同時由于其功能更為強(qiáng)大,因此比一般8位單片機(jī)的中斷使用和控制也相對復(fù)雜些。 3.5 AVR中斷 -中斷向量 AVR單片機(jī)一般擁有數(shù)十個中斷源,每個中斷源都
27、有獨(dú)立的中斷向量。默認(rèn)情況下,程序存儲器的最低端,即從Flash地址的0 x0000開始用于放置中斷向量,稱作中斷向量區(qū)。ATmega16A共有21個中斷源。默認(rèn)狀態(tài)下,ATmega16A的中斷向量表如表3- 10所示。 向量號程序地址中斷源中斷定義10 x000RESET外部引腳電平引發(fā)的復(fù)位,上電復(fù)位,掉電檢測復(fù)位,看門狗復(fù)位,以及JTAG AVR復(fù)位20 x002INT0外部中斷請求030 x004INT1外部中斷請求140 x006TIMER2 COMP定時器/計數(shù)器2比較匹配50 x008TIMER2 OVF定時器/計數(shù)器2溢出60 x00ATIMER1 CAPT定時器/計數(shù)器1事件
28、捕捉70 x00CTIMER1 COMPA定時器/計數(shù)器1比較匹配 A80 x00ETIMER1 COMPB定時器/計數(shù)器1比較匹配B90 x010TIMER1 OVF定時器/計數(shù)器1溢出100 x012TIMER0 OVF定時器/計數(shù)器0溢出110 x014SPI,STCSPI串行傳輸結(jié)束向量號程序地址中斷源中斷定義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外部中斷請求2200 x026TIMER0 COMP定時器/計數(shù)器 0比較匹配210 x028SPM_RDY保存程序存儲器內(nèi)容就緒在這21個中斷中,包含1個非屏蔽中斷(RESET)、3個外部中斷(INT0、INT1、INT2)和17個內(nèi)部中斷。本節(jié)只簡要介紹RESET和外部中斷。系統(tǒng)復(fù)位中斷RESET,也稱為系統(tǒng)復(fù)位源。RESET是一個特殊的中斷源,是AVR中唯一不可屏蔽的中斷。當(dāng)ATmega16A由于各種原因被復(fù)位后,程序?qū)⑻綇?fù)位向量(默認(rèn)為0 x0000)處,在該地址處通常放置一條跳轉(zhuǎn)指令,跳轉(zhuǎn)到主程序繼續(xù)執(zhí)行。INT
30、0、INT1和INT2是三個外部中斷源,它們分別由芯片外部引腳PD2、PD3和PB2上的電平變化或狀態(tài)觸發(fā)。通過對控制寄存器MCUCR和控制與狀態(tài)寄存器MCUCSR的配置定義觸發(fā)方式。 3.5 AVR中斷 -中斷向量 AVR單片機(jī)的中斷,有優(yōu)先級和屏蔽等功能和控制手段,也支持中斷的嵌套??梢造`活的進(jìn)行配置和使用。1. 中斷優(yōu)先級在AVR單片機(jī)中,一個中斷在中斷向量區(qū)的位置決定了它的優(yōu)先級,位于低地址的中斷優(yōu)先級高于位于高地址的中斷。因此,對于ATmega16A來說,復(fù)位中斷RESET具有最高優(yōu)先級,外部中斷INT0次之,而SPM_RDY的中斷優(yōu)先級最低。3.5 AVR中斷 -中斷控制 AVR單
31、片機(jī)采用固定的硬件優(yōu)先級方式,不支持通過軟件對中斷優(yōu)先級的重新設(shè)定。因此中斷優(yōu)先級的作用僅體現(xiàn)在當(dāng)同一時刻有兩個及兩個以上中斷源向MCU申請中斷的情況中。在這種情況下,MCU將根據(jù)優(yōu)先級的不同,將低優(yōu)先級的中斷掛起,首先響應(yīng)其中最高優(yōu)先級的中斷,待該中斷服務(wù)程序執(zhí)行完返回后,再順序響應(yīng)優(yōu)先級較低的中斷。 3.5 AVR中斷 -中斷控制 2. 中斷標(biāo)志AVR有兩種機(jī)制不同的中斷:帶有中斷標(biāo)志的中斷。不帶中斷標(biāo)志的中斷。中斷標(biāo)志是指每個中斷源在其IO空間寄存器中具有自己的一個中斷標(biāo)志位。在AVR中,大多數(shù)的中斷都屬于帶中斷標(biāo)志的中斷。中斷標(biāo)志位一般在MCU響應(yīng)該中斷時由硬件自動清除,或在中斷服務(wù)程
32、序中通過讀寫專門數(shù)據(jù)寄存器的方式自動清除。 3.5 AVR中斷 -中斷控制 關(guān)于中斷標(biāo)志,還有下述規(guī)則和情況:當(dāng)中斷被禁止或MCU不能馬上響應(yīng)中斷時,則該中斷標(biāo)志將會一直保持,直到中斷允許并得到響應(yīng)為止。已建立的中斷標(biāo)志,實(shí)際就是一個中斷的請求信號,如果暫時不能被響應(yīng),則該中斷標(biāo)志會一直保留(除非被用戶軟件清除掉),此時該中斷被“掛起”。如果有多個中斷被掛起,一旦中斷允許后,各個被掛起的中斷將按優(yōu)先級依次得到中斷響應(yīng)服務(wù)。3.5 AVR中斷 -中斷控制 在AVR中,還有個別的中斷不帶中斷標(biāo)志例如配置為低電平觸發(fā)的外部中斷。這類中斷只要條件滿足,就會一直向MCU發(fā)出中斷請求。如果由于等待時間過長
33、而得不到響應(yīng),則可能因中斷條件結(jié)束而失去一次中斷服務(wù)的機(jī)會。如果這個低電平維持時間過長,則會使中斷服務(wù)完成返回后再次響應(yīng),使MCU重復(fù)響應(yīng)同一中斷的請求,進(jìn)行重復(fù)服務(wù)。 3.5 AVR中斷 -中斷控制 3. 中斷屏蔽與管理為了能夠靈活的管理中斷,AVR對中斷采用兩級控制方式。所謂兩級控制是指AVR有一個中斷允許的總控制位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、時,使能全局中斷,清零時則不論單獨(dú)中斷標(biāo)志置位與否,都不會產(chǎn)生中斷。任一中斷發(fā)生后I清零,而執(zhí)行RETI(中斷返回)指令后,I位恢復(fù)置位以使能中斷。同時,AVR為每一個中斷源都設(shè)置了獨(dú)立的中斷允許位,這些中斷允許位分散在每個中斷源所屬模塊的控制寄存器中。 3.5 AVR中斷 -中斷控制 4. 中斷嵌套由于AVR在響應(yīng)一個中斷的過程中通過硬件將I標(biāo)志位自動清0,這樣就阻止了MCU響應(yīng)其他中斷,因此通常情況下,AVR是不能自動實(shí)現(xiàn)中斷嵌套的。如果要實(shí)現(xiàn)中斷嵌套的應(yīng)用,則用戶可在中斷服務(wù)程序中使用指令使能全局中斷允許位I,通過間接的方式實(shí)現(xiàn)中斷的嵌套處理。 3.5 AVR中斷 -中斷控制 注意 除非
35、確實(shí)需要中斷嵌套,一般情況下不建議采用中斷嵌套。 3.5 AVR中斷 -中斷控制 ATmega16A有INT0、INT1和INT2這3個外部中斷源,分別由芯片外部引腳PD2、PD3和PB2上的電平變化或狀態(tài)作為中斷觸發(fā)信號。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說明上升沿觸發(fā)支持支持支持(異步)INT2為異步(不需要與IO時鐘同步)邊沿檢測下降沿觸發(fā)支持支持支
36、持(異步)INT2為異步(不需要與IO時鐘同步)邊沿檢測任意電平變化觸發(fā)支持支持不支持低電平觸發(fā)支持支持不支持不帶中斷標(biāo)志3.5 AVR中斷 外部中斷 2. 外部中斷寄存器在ATmega16A中,除了寄存器SREG中的全局中斷允許標(biāo)志位I外,與外部中斷有關(guān)的寄存器有4個,共有11個標(biāo)志位其作用分別是這3個外部中斷的中斷標(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)生一個中斷請求01INTn的下降沿和上升沿都產(chǎn)生一個中斷請求10INTn的下降沿產(chǎn)生一個中斷請求11INTn的上升沿產(chǎn)生一個中斷請求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個RESET復(fù)位標(biāo)志ISC2中斷觸發(fā)方式0INT2的下降沿產(chǎn)生一個異步中斷請求1INT2的上升沿產(chǎn)生一個異步中斷請求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位會變成1。如果此時SREG寄存器中的I位為1,而且GICR寄存器中的INTn置1,則MCU將響應(yīng)中斷請求,跳至相應(yīng)的中斷向量處開始執(zhí)行中斷服務(wù)程序,同時硬件自動將INTFn標(biāo)志清0。 Bit76543210名稱INT1INT0INT2-IVSELIVCE讀寫R/WR/WR/WRRRR/WR/W初始值00000000Bit76543210名稱I
40、NTF1INTF0INTF2-讀寫R/WR/WRRRRRR初始值000000003.5 AVR中斷 外部中斷 外部中斷常用作檢測外部事件例如檢測按鍵的狀態(tài)下述內(nèi)容用于實(shí)現(xiàn)任務(wù)描述3.D.2,在PD2管腳連接一個按鍵,使用外部中斷檢測該按鍵并翻轉(zhuǎn)LED狀態(tài)。 3.5 AVR中斷 中斷程序設(shè)計 1. 按鍵配置出于模塊化的設(shè)計要求,可將按鍵相關(guān)管腳的配置,封裝成為子函數(shù)SW_Config(),具體源碼如下所示:【描述3.D.2】 SW_Config()/* 按鍵初始化函數(shù) */void SW_Config(void)/PD2為外部中斷INT0引腳/PD2引腳連接一個按鍵,按下為低電平/設(shè)置PD2為輸
41、入DDRD &= (1PD2);/啟用PD2的上拉電阻PORTD |= (1PD2);/設(shè)置INT0為低電平觸發(fā)中斷MCUCR &=(1ISC01) | (1ISC00);/使能INT0GICR |=(1INT0);3.5 AVR中斷 中斷程序設(shè)計 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ù),代碼請參考描述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è)計 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)按鍵都會看到LED的亮滅狀態(tài)隨之翻轉(zhuǎn)。3.5 AVR中斷 中斷程序設(shè)計 3.6 AVR定時器 相對于一般的8位單片機(jī)而言,AVR不僅配備了更多的定時/計數(shù)器(簡稱定時器)接口,而且還是增強(qiáng)型的。例如通過定時器與比較匹配寄存器互相配合,生成占空比可變的方波信號即脈沖寬度調(diào)制輸出PWM信號,用
44、于D/A轉(zhuǎn)換、電機(jī)無級調(diào)速和變頻控制等。 3.6 AVR定時器-定時器概述 ATmega16A配置了2個8位和1個16位共3個定時器。它們是8位的定時器T/C0和T/C2和16位的T/C1。它們之間的功能比較如表3-19所示。 名稱T/C0和T/C2T/C1位寬8位計數(shù)器16位設(shè)計(即允許16位的PWM)通道單通道計數(shù)器2個獨(dú)立的輸出比較單元輸出緩沖-雙緩沖的輸出比較寄存器輸入捕捉-一個輸入捕捉單元輸入噪聲-輸入捕捉噪聲抑制器比較匹配比較匹配發(fā)生時清除定時器(自動加載)PWM脈沖無干擾脈沖,相位正確的PWM可變PWM周期-可變的PWM周期頻率發(fā)生器頻率發(fā)生器外部事件計數(shù)器外部事件計數(shù)器預(yù)分頻器
45、10位的時鐘預(yù)分頻器中斷源溢出和比較匹配中斷源(TOV0和OCF0)4個獨(dú)立的中斷源(TOV1、OCF1A、OCF1B與ICF1)定時器原理框圖如圖3- 8所示。 3.6 AVR定時器-定時器概述 1. 時鐘源與預(yù)分頻器對于定時器來說,首先需要明確的就是時鐘源,不同的時鐘源決定了其定時和計數(shù)的時間間隔以及穩(wěn)定性。1)內(nèi)部時鐘源T/C可以由內(nèi)部同步時鐘或外部異步時鐘驅(qū)動。時鐘源是由時鐘選擇邏輯決定的,而時鐘選擇邏輯是由位于T/C控制寄存器TCCR0的時鐘選擇位CS02:0控制的。3.6 AVR定時器-定時器概述 T/C1與T/C0共用一個預(yù)分頻模塊,但它們可以有不同的分頻設(shè)置。當(dāng)CSn2:0 =
46、 1時,系統(tǒng)內(nèi)部時鐘直接作為T/C的時鐘源,這也是T/C最高頻率的時鐘源fCLK_I/O,與系統(tǒng)時鐘頻率相同。預(yù)分頻器可以輸出4個不同的時鐘信號fCLK_I/O/8、fCLK_I/O/64、fCLK_I/O/256或fCLK_I/O/1024。3.6 AVR定時器-定時器概述 2)外部時鐘源由T1/T0引腳提供的外部時鐘源可以用作T/C時鐘clkT1/clkT0。引腳同步邏輯在每個系統(tǒng)時鐘周期對引腳T1/T0進(jìn)行采樣。然后將同步(采樣)信號送到邊沿檢測器。寄存器由內(nèi)部系統(tǒng)時鐘clkI/O的上跳沿驅(qū)動。當(dāng)內(nèi)部時鐘為高時,鎖存器可以看作時透明的。3.6 AVR定時器-定時器概述 2. 計數(shù)單元8位
47、T/C0的主要功能部件為可編程的雙向計數(shù)單元。原理框圖如圖3- 9所示。 根據(jù)不同的工作模式,計數(shù)器針對每一個clkT0實(shí)現(xiàn)清零、加一或減一操作。其時鐘和操作有如下特點(diǎn):clkT0可以由內(nèi)部時鐘源或外部時鐘源產(chǎn)生,具體由時鐘選擇位CS02:0確定。3.6 AVR定時器-定時器概述 沒有選擇時鐘源時(CS02:0 = 0)定時器即停止。不管有沒有clkT0,CPU都可以訪問TCNT0。CPU寫操作比計數(shù)器其他操作(如清零、加減操作)的優(yōu)先級高。計數(shù)序列由T/C控制寄存器(TCCR0)的WGM01和WGM00決定。計數(shù)器計數(shù)行為與輸出比較OC0的波形有緊密的關(guān)系。T/C溢出中斷標(biāo)志TOV0根據(jù)WG
48、M01:0設(shè)定的工作模式來設(shè)置。TOV0可以用于產(chǎn)生CPU中斷。 3.6 AVR定時器-定時器概述 3. 輸出比較單元當(dāng)定時器作輸出比較時,8位比較器持續(xù)對TCNT0和輸出比較寄存器OCR0進(jìn)行比較。輸出比較單元結(jié)構(gòu)圖如圖3- 10所示。 一旦TCNT0等于OCR0,比較器就給出匹配信號。在匹配發(fā)生的下一個定時器時鐘周期輸出比較標(biāo)志OCF0置位。3.6 AVR定時器-定時器概述 3. 輸出比較單元若此時OCIE0=1且SREG的全局中斷標(biāo)志I置位,CPU將產(chǎn)生輸出比較中斷。執(zhí)行中斷服務(wù)程序時OCF0自動清零,或者通過軟件寫“1”的方式來清零。另外,根據(jù)由WGM21:0和COM01:0設(shè)定的不同
49、的工作模式,波形發(fā)生器利用匹配信號產(chǎn)生不同的波形。同時,波形發(fā)生器還利用max和bottom信號來處理極值條件下的特殊情況。3.6 AVR定時器-定時器概述 AVR的定時器工作模式比較多,具體有如下幾種:普通模式。CTC(比較匹配時清零定時器)模式??焖貾WM模式。相位修正PWM模式。相位與頻率修正PWM模式。在這幾種工作模式中,普通模式為最常用的工作模式。限于篇幅,本節(jié)只介紹普通模式,其他工作模式可參考相關(guān)資料。3.6 AVR定時器-定時器工作模式 以定時器0為例,在普通模式下計數(shù)器不停地累加,直至:計到最大值后(TOP = 0 xFF)數(shù)值溢出計數(shù)器簡單地返回到最小值0 x00重新開始。在
50、TCNT0為零的同一個定時器時鐘里T/C溢出標(biāo)志TOV0置位。TOV0有點(diǎn)象第17位,只是只能置位,不會清零。由于定時器中斷服務(wù)程序能夠自動清零TOV0,因此可以通過軟件提高定時器的分辨率。在普通模式下用戶可以隨時寫入新的計數(shù)器數(shù)值。如果定時時間太長,必須使用定時器溢出中斷或預(yù)分頻器來擴(kuò)展定時范圍。 3.6 AVR定時器-定時器工作模式 與定時器有關(guān)的寄存器,以定時器0為例,計數(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定時器-定時器寄存器 8位寄存器OCR0中的數(shù)據(jù)用于與寄存器TCNT0中的計數(shù)值進(jìn)行匹配比較。在T/C0運(yùn)行期間,比較匹配單元一直將寄存器TCNT0的計數(shù)值與寄存器OCR0的內(nèi)容進(jìn)行比較一旦TCNT0的計數(shù)值與OCR0的數(shù)值匹配相等,將產(chǎn)生一個中斷申請或改變OC0的輸出電平。定時/計數(shù)器中斷屏蔽寄存器TIMSK各位定義如表3- 22所示。 Bit76543210名稱OCIE2TOIE2TICIE1OC1E1AOCIE1BTOIE1OCIE0TOIE0讀寫R/WR/WR/WR/WR/WR
52、/WR/WR/W初始值000000003.6 AVR定時器-定時器寄存器 涉及定時器的相關(guān)位定義如表3- 23所示。定時器中斷標(biāo)志寄存器TIFR各位定義如表3- 24所示。 涉及定時器的相關(guān)位定義如表3- 25所示。 位名稱說明OCIE2定時器2輸出比較匹配中斷允許標(biāo)志OCIE0定時器0輸出比較匹配中斷允許標(biāo)志TOIE2定時器2溢出中斷允許標(biāo)志TOIE0定時器0溢出中斷允許標(biāo)志Bit176543210名稱OCF2TOV2ICF1OCF1AOCF1BTOV1OCF0TOV0讀寫R/WR/WR/WR/WR/WR/WR/WR/W初始值00000000位名稱說明OCF2定時器2比較匹配輸出的中斷標(biāo)志位
53、OCF0定時器0比較匹配輸出的中斷標(biāo)志位TOV2定時器2溢出中斷標(biāo)志位TOV0定時器0溢出中斷標(biāo)志位3.6 AVR定時器-定時器寄存器 定時器控制寄存器TCCR0各位定義如表3- 26所示。涉及定時器的相關(guān)位定義如表3- 27所示。 波形產(chǎn)生模式相關(guān)定義如表3- 28所示。 Bit76543210名稱FOC0WGM00COM01COM00WGM01CS02CS01CS00讀寫R/WR/WR/WR/WR/WR/WR/WR/W初始值00000000位名稱說明FOC0強(qiáng)制輸出比較位,非PWM模式下有效WGM01:0波形發(fā)生模式位COM01:0比較匹配輸出方式CS02:0時鐘源選擇模式WGM01WGM
54、00工作模式計數(shù)上限OCR0更新TOV0更新000普通模式0 xFF立即0 xFF101PWM相位可調(diào)0 xFF0 xFF0 x00210CTC模式OCR0立即0 xFF311快速PWM0 xFF0 xFF0 xFF3.6 AVR定時器-定時器寄存器 普通模式和非PWM模式(WGM=0、2)下的COM0位功能定義如表3- 29所示。快速PWM模式(WGM0=3)下的COM0位功能定義如表3- 30所示。 相位可調(diào)PWM模式(WGM=1)下的COM0位功能定義如表3- 31所示。 COM01COM00說明00PB3為通用IO引腳(OC0與引腳不連接)01比較匹配時,觸發(fā)OC0(OC0為源OC0的
55、取反)10比較匹配時,清零OC011比較匹配時,置位OC0COM01COM00說明00PB3為通用IO引腳(OC0與引腳不連接)01保留10比較匹配時,清零OC0;計數(shù)值為0 xFF時,置位OC011比較匹配時,置位OC0;計數(shù)值為0 xFF時,清零OC0COM01COM00說明00PB3為通用IO引腳(OC0與引腳不連接)01保留10向上計數(shù)過程中比較匹配時,清零OC0向下計數(shù)過程中比較匹配時,置位OC011向上計數(shù)過程中比較匹配時,置位OC0向下計數(shù)過程中比較匹配時,清零OC03.6 AVR定時器-定時器寄存器 定時器控制寄存器TCCR0各位定義如表3- 26所示。涉及定時器的相關(guān)位定義如
56、表3- 27所示。 波形產(chǎn)生模式相關(guān)定義如表3- 28所示。 Bit76543210名稱FOC0WGM00COM01COM00WGM01CS02CS01CS00讀寫R/WR/WR/WR/WR/WR/WR/WR/W初始值00000000位名稱說明FOC0強(qiáng)制輸出比較位,非PWM模式下有效WGM01:0波形發(fā)生模式位COM01:0比較匹配輸出方式CS02:0時鐘源選擇模式WGM01WGM00工作模式計數(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定時器-定時器寄存器 定時器0的時鐘源選擇如表3- 32所示。 CS02CS01CS00說明000無時鐘源(停止定時器)001CLKtos(不經(jīng)過分頻器)010CLKtos/8(來自分頻器)011CLKtos/64(來自分頻器)100CLKtos/256(來自分頻器)101CLKtos/1024(來自分頻器)110外部T0引腳,下降沿驅(qū)動111外部T0引腳,上升沿驅(qū)動3.6 AVR定時器-定時器寄存器 1. 選擇定時器當(dāng)AVR單片機(jī)晶振為8MHz(十進(jìn)制),計數(shù)器的時鐘源為內(nèi)部時鐘時,需要計數(shù)8000000個時鐘周期才能達(dá)到定時1秒一次溢出的功能,顯然大大超過了計數(shù)器的技術(shù)范圍
58、。實(shí)踐中采用預(yù)分頻器進(jìn)行分頻,以256分頻為例,則需要的時鐘周期為:8000000/256=31250則16位的計數(shù)器1的計數(shù)范圍為065535(0 xffff),可以達(dá)到要求。本例中可選定時器1。 3.6 AVR定時器-定時器程序設(shè)計 2. 計算計數(shù)值由于普通模式下定時器計數(shù)到0 xffff即產(chǎn)生中斷,并翻轉(zhuǎn)到0 x0000開始計數(shù),則需要每次溢出后,改變定時器的計數(shù)初值,以便使其每次計數(shù)31250后,產(chǎn)生溢出中斷。更改定時器1的計數(shù)初值可使用如下語句:TCNT1 =0 xffff-31250;使用計算的形式可以提高程序的可讀性及避免計算錯誤,修改起來也方便。 3.6 AVR定時器-定時器程
59、序設(shè)計 3. 定時器初始化出于模塊化的設(shè)計要求,定時器相關(guān)的配置可封裝成為子函數(shù)TIM_Config(),具體源碼如下所示:【描述3.D.3】 TIM_Config()/* 定時器初始化函數(shù) */void TIM_Config(void)/配置時鐘為clkio/256TCCR1B &=(1CS11)|(1CS10); TCCR1B |=(1CS12);/配置計數(shù)初值TCNT1 =0 xffff-31250;/開啟定時器1溢出中斷TIMSK |=(1TOIE1);3.6 AVR定時器-定時器程序設(shè)計 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ù),代碼請參考描述3.D.1void LED_Config(void);/定時器初始化函數(shù)void TIM_Config(void);/* 主函數(shù) */void main(void)/LED初始化函數(shù)LED_Config();/TIM初始化函數(shù)TIM_Config();/開總中斷S
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版國際物流運(yùn)輸服務(wù)電子合同風(fēng)險評估與管理3篇
- 西安歐亞學(xué)院《鉆井液工藝原理》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年度廚師團(tuán)隊培訓(xùn)與績效評估合同3篇
- 武漢大學(xué)《鋼琴與伴奏》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五版人工智能教育合資協(xié)議范本3篇
- 二零二五版建筑行業(yè)工人薪資保障合同范本2篇
- 二零二五年度冷鏈物流車隊運(yùn)輸合作協(xié)議3篇
- 2024版砌體工程建筑承包合同細(xì)則版B版
- 二零二五年知識產(chǎn)權(quán)侵權(quán)糾紛調(diào)解與法律咨詢協(xié)議3篇
- 二零二五年房地產(chǎn)項目價值評估與增值服務(wù)合同3篇
- GB/T 45102-2024機(jī)采棉采收技術(shù)要求
- 2025年海南省鹽業(yè)集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 2024-2025學(xué)年成都市高一上英語期末考試題(含答案和音頻)
- 2024年南通職業(yè)大學(xué)單招職業(yè)技能測試題庫有答案解析
- 2024股權(quán)融資計劃
- 西式面點(diǎn)師試題與答案
- 鋼結(jié)構(gòu)連廊專項吊裝方案(通過專家論證)
- 50MWp漁光互補(bǔ)光伏電站項目錘樁施工方案
- 2025免疫規(guī)劃工作計劃
- 初二家長會課件下載
- 食品安全知識培訓(xùn)
評論
0/150
提交評論