ATmega 單片機(jī)中斷系統(tǒng)及定時(shí)器_第1頁(yè)
ATmega 單片機(jī)中斷系統(tǒng)及定時(shí)器_第2頁(yè)
ATmega 單片機(jī)中斷系統(tǒng)及定時(shí)器_第3頁(yè)
ATmega 單片機(jī)中斷系統(tǒng)及定時(shí)器_第4頁(yè)
ATmega 單片機(jī)中斷系統(tǒng)及定時(shí)器_第5頁(yè)
已閱讀5頁(yè),還剩120頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第4章ATmega單片機(jī)的

中斷系統(tǒng)及定時(shí)器內(nèi)容提要

本章介紹了ATmega單片機(jī)中斷系統(tǒng)的工作原理及過程,并對(duì)單片機(jī)內(nèi)部中斷寄存器的用法做了詳細(xì)的介紹,對(duì)單片機(jī)內(nèi)部3個(gè)定時(shí)器/計(jì)數(shù)器的功能和和使用方法做了詳盡的講解,定時(shí)器/計(jì)數(shù)器還擁有信號(hào)捕獲中斷,比較中斷,脈寬調(diào)制輸出中斷,實(shí)時(shí)時(shí)鐘計(jì)數(shù)等功能。4.1ATmega單片機(jī)的中斷系統(tǒng)4.1.1中斷處理ATmega16L有18個(gè)不同的中斷源,每個(gè)中斷源和系統(tǒng)復(fù)位在程序存儲(chǔ)器空間都有一個(gè)獨(dú)立的中斷向量,每個(gè)中斷時(shí)間都有各自獨(dú)立的中斷允許控制位,當(dāng)某個(gè)中斷源的中斷允許位置“1”,且狀態(tài)寄存器中的全局中斷允許位也為“1”時(shí),MCU才能響應(yīng)中斷。利用這一特性,可以提高系統(tǒng)的安全性。中斷設(shè)置復(fù)位向量和中斷向量表置于1、FLASH程序存儲(chǔ)器的應(yīng)用程序區(qū)的頭部2、引導(dǎo)程序載入?yún)^(qū)的頭部,3、分開置于不同的兩個(gè)區(qū)各自的頭部。當(dāng)MCU響應(yīng)一個(gè)中斷請(qǐng)求后,會(huì)自動(dòng)將全局中斷允許位I自動(dòng)清零,此時(shí)后續(xù)中斷的響應(yīng)被屏蔽。當(dāng)MCU執(zhí)行中斷返回指令RETI時(shí),會(huì)將全局中斷允許位I自動(dòng)置“1”,以允許響應(yīng)下一個(gè)中斷。用戶可在中斷處理程序中I位置“1”,打開中斷響應(yīng),這樣MCU就可以再次響應(yīng)中斷,實(shí)現(xiàn)了中斷嵌套處理。中斷源的類型:

一類是時(shí)間觸發(fā)型中斷:如時(shí)鐘、計(jì)數(shù)、比較等,一旦事件產(chǎn)生后會(huì)將相應(yīng)的中斷標(biāo)志位置位,申請(qǐng)中斷處理,當(dāng)MCU響應(yīng)中斷,跳轉(zhuǎn)到實(shí)際中斷向量,開啟相應(yīng)的中斷處理程序時(shí),硬件自動(dòng)清除對(duì)應(yīng)的中斷標(biāo)志,這些中斷標(biāo)志位也可通過軟件寫“1”來清除。另一類是條件中斷:當(dāng)一個(gè)符合條件的中斷觸發(fā)置位了中斷標(biāo)志位,但相應(yīng)的中斷允許位為“0”,此時(shí),這個(gè)中斷標(biāo)志將掛起為“1”,一直保持到該中斷被響應(yīng)或中斷標(biāo)志被軟件清為“0”。有些沒有中斷標(biāo)志位,在中斷條件成立時(shí),將一直不斷的向MCU申請(qǐng)中斷,如果在中斷允許響應(yīng)前,中斷條件由成立狀態(tài)變成不成立狀態(tài),該中斷即宣告終止了。4.1.2外部中斷外部中斷通過引腳INT0,INT1(ATmega16L多一個(gè)INT2外部中斷)觸發(fā)。即使引腳INT0,1配置為輸出,只要電平發(fā)生了合適的變化,中斷也會(huì)觸發(fā)。這個(gè)特點(diǎn)可以用來產(chǎn)生軟件中斷。通過設(shè)置MCU控制寄存器MCUCR,中斷可以由下降沿、上升沿,或者是低電平觸發(fā)。當(dāng)外部中斷使能并且配置為電平觸發(fā)(INT0/INT1),只要引腳電平為低,中斷就會(huì)產(chǎn)生。因?yàn)橹袛鄼z測(cè)是異步的,可以用來將器件從睡眠模式喚醒。若要求INT0,INT1在信號(hào)下降沿或上升沿觸發(fā),I/O時(shí)鐘必須工作(睡眠過程中I/O時(shí)鐘是停止的)。4.1.2外部中斷1、中斷寄存器(1)MCU控制寄存器(MCUCR)圖4.1MCU控制寄存器Bit3,2–ISC11,ISC10:外部中斷1觸發(fā)方式控制Bit1,0–ISC01,ISC00:外部中斷0觸發(fā)方式控制例4.1設(shè)置寄存器MCUCR,響應(yīng)外部中斷INT1為上升沿產(chǎn)生中斷。MCUCR|=0x0c;例4.2利用寄存器MCUCR,響應(yīng)外部中斷INT0,上升沿有效。MCUCR|=0x03;(2)通用中斷控制寄存器(GICR)Bit7-INT1:外部中斷請(qǐng)求1使能Bit6-INT0:外部中斷請(qǐng)求0使能例4.3利用控制寄存器GICR,設(shè)置INT1、INT0均使能外部中斷使用程序。GICR=0xc0;(3)通用中斷標(biāo)志寄存器(GIFR)Bit7-INTF1:外部中斷標(biāo)志1例4.4GIFR=0x80//表示外部中斷標(biāo)志1置位(即表示啟動(dòng)了外部中斷1)4.1.3中斷響應(yīng)1、中斷響應(yīng)的條件除了非屏蔽中斷外,其它中斷都可以用軟件來屏蔽或開放。系統(tǒng)只有具備如下的中斷條件,CPU才可能對(duì)中斷請(qǐng)求進(jìn)行響應(yīng)。(1)設(shè)置中斷請(qǐng)求觸發(fā)器每一個(gè)中斷源,能發(fā)出中斷請(qǐng)求信號(hào),而且這個(gè)信號(hào)能保持著,直至CPU響應(yīng)這個(gè)中斷后,才可清除中斷請(qǐng)求。(2)設(shè)置中斷屏蔽觸發(fā)器在實(shí)際系統(tǒng)中,往往有多個(gè)中斷源。在每一個(gè)外設(shè)的接口電路中增加了一個(gè)中斷屏蔽觸發(fā)器,只有當(dāng)此觸發(fā)器為“1”時(shí),外設(shè)的中斷請(qǐng)求才能被送出至CPU。(3)設(shè)置中斷允許觸發(fā)器在CPU內(nèi)部有一個(gè)中斷允許觸發(fā)器。只有當(dāng)其為“1”時(shí),CPU才能響應(yīng)中斷;若其為“0”,即使INTR線上有中斷請(qǐng)求,CPU也不響應(yīng)。而這個(gè)觸發(fā)器的狀態(tài)可由軟件指令來改變。當(dāng)CPU復(fù)位時(shí),中斷允許觸發(fā)器為“0”,所以必須要用軟件指令來開中斷。當(dāng)中斷響應(yīng)后,CPU就自動(dòng)關(guān)中斷,所以在中斷服務(wù)程序中也必須要用軟件指令來開中斷。CPU在現(xiàn)行指令結(jié)束后即響應(yīng)中斷。2、中斷響應(yīng)過程當(dāng)滿足了中斷的條件后,CPU就會(huì)響應(yīng)中斷,轉(zhuǎn)入中斷程序處理。具體的工作過程如下所述。(1)關(guān)中斷:CPU響應(yīng)中斷后,發(fā)出中斷響應(yīng)信號(hào)的同時(shí),內(nèi)部自動(dòng)地實(shí)現(xiàn)關(guān)中斷。(2)保留斷點(diǎn):CPU響應(yīng)中斷后,把主程序執(zhí)行的位置和有關(guān)數(shù)據(jù)信息保留到堆棧,以備中斷處理完畢后,能返回主程序并正確執(zhí)行。(3)保護(hù)現(xiàn)場(chǎng):為了使中斷處理程序不影響主程序的運(yùn)作,故要把斷點(diǎn)處的有關(guān)寄存器的內(nèi)容和標(biāo)志位的狀態(tài)全部推入堆棧保護(hù)起來,即在中斷服務(wù)程序中把這些寄存器的內(nèi)容推入堆棧。這樣,當(dāng)中斷處理完成后返回主程序時(shí),CPU能夠恢復(fù)主程序的中斷前的狀態(tài),保證主程序的正確動(dòng)作。(4)給出中斷入口,轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序:系統(tǒng)由中斷源提供的中斷向量形成中斷入口地址,使CPU能夠正確進(jìn)入中斷服務(wù)程序。(5)恢復(fù)現(xiàn)場(chǎng):把所保存的各個(gè)內(nèi)部寄存器的內(nèi)容和標(biāo)志位的狀態(tài),從堆棧彈出,送回CPU中原來的位置。這個(gè)操作在系統(tǒng)中也是由服務(wù)程序來完成的。(6)開中斷與返回:在中斷服務(wù)程序的最后,要開中斷(以便CPU能響應(yīng)新的中斷請(qǐng)求)和安排一條中斷返回指令,將堆棧內(nèi)保存的主程序被中斷的位置值彈出,運(yùn)行被恢復(fù)到主程序。例4.6使用中斷進(jìn)行計(jì)數(shù)程序?qū)嵗簐oidextint_init(void)//中斷初始化設(shè)置{ MCUCR|=0x03;//上升沿觸發(fā)

MCUCSR|=0x00;//控制和狀態(tài)寄存器

GICR=0x40;//開啟中斷0使能}SIGNAL(SIG_INTERRUPT0)//外部中斷0程序{ uintk;//設(shè)置變量k來記錄中斷的次數(shù)

k++;}ATmega16控制和狀態(tài)寄存器MCUCSR

AVR控制和狀態(tài)寄存器提供了有關(guān)引起AVR復(fù)位的復(fù)位源的信息。Bit4–JTRF:JTAG復(fù)位標(biāo)志

通過JTAG指令A(yù)VR_RESET可以使JTAG復(fù)位寄存器置位,并引發(fā)MCU復(fù)位,并使JTRF置位。上電復(fù)位將使其清零,也可以通過寫”0”來清除。

Bit3–WDRF:看門狗復(fù)位標(biāo)志

看門狗復(fù)位發(fā)生時(shí)置位。上電復(fù)位將使其清零,也可以通過寫”0”來清除。

Bit2–BORF:掉電檢測(cè)復(fù)位標(biāo)志

掉電檢測(cè)復(fù)位發(fā)生時(shí)置位。上電復(fù)位將使其清零,也可以通過寫”0”來清除。

Bit1–EXTRF:外部復(fù)位標(biāo)志

外部復(fù)位發(fā)生時(shí)置位。上電復(fù)位將使其清零,也可以通過寫”0”來清除。

Bit0–PORF:上電復(fù)位標(biāo)志

上電復(fù)位發(fā)生時(shí)置位。只能通過寫”0”來清除。4.2定時(shí)器/計(jì)數(shù)器的使用方法4.2.18位定時(shí)器/計(jì)數(shù)器0-T/C0T/C0是一個(gè)通用8位定時(shí)/計(jì)數(shù)器,其主要特點(diǎn)是:?jiǎn)瓮ǖ烙?jì)數(shù)器頻率發(fā)生器外部事件計(jì)數(shù)帶10位預(yù)定比例分頻器1、8位T/C0的寄存器(1)T/C0控制寄存器(TCCR0)例4.7TCCR0=0x02CS02、CS01、CS00這3個(gè)標(biāo)志位用于選擇T/C0的時(shí)鐘源,見表4.3。

表4.3時(shí)鐘源分頻器真值表(2)T/C0計(jì)數(shù)寄存器(TCNT0)TCNT0寄存器為數(shù)據(jù)存儲(chǔ)寄存器TCNT0是T/C0的計(jì)數(shù)值寄存器,該寄存器可以直接被讀寫訪問,寫TCNT0寄存器將會(huì)在下一個(gè)定時(shí)器時(shí)鐘周期中阻塞比較匹配。(3)定時(shí)/計(jì)數(shù)器中斷屏蔽寄存器(TIMSK)例4.8TIMSK=0x01//表示T0中斷溢出允許位0—TOIE0:T/C0溢出中斷允許標(biāo)志位當(dāng)TOIE0被設(shè)置為“1”,且狀態(tài)寄存器中的I位被置位“1”時(shí),將使能T/C0溢出中斷。若在T/C0上發(fā)生溢出時(shí),則執(zhí)行T/C0溢出中斷服務(wù)程序。(4)定時(shí)/計(jì)數(shù)器中斷標(biāo)志寄存器(TIFR)例如:TIFR=0x01//表示位0置位,即T/C0溢出中斷被置位位0—TOV0:T/C0溢出中斷標(biāo)志位當(dāng)T/C0產(chǎn)生溢出時(shí),TOV0位被設(shè)置為“1”。當(dāng)轉(zhuǎn)入T/C0溢出中斷向量執(zhí)行中斷處理程序時(shí),TOV0由硬件自動(dòng)清零。2、8位定時(shí)/計(jì)數(shù)器08位T/C0單元是一個(gè)可編程計(jì)數(shù)器,計(jì)數(shù)值保存在寄存器TCNT0中,MCU可以在任何時(shí)間訪問讀/寫TCNT0。計(jì)數(shù)器單一向上計(jì)數(shù),一旦寄存器TCNT0為0x00的同時(shí),置溢出標(biāo)志位TTOV0位為“1”。用戶可以通過寫入TCNT0寄存器初值來調(diào)整計(jì)數(shù)器溢出的時(shí)間間隔。4.2.216位定時(shí)器/計(jì)數(shù)器1――T/C1T/C1是一個(gè)16位的多功能定時(shí)/計(jì)數(shù)器,其主要特點(diǎn)是:真正的16位設(shè)計(jì)兩個(gè)獨(dú)立的輸出比較單元雙緩沖輸出比較寄存器一個(gè)輸入捕獲單元輸入捕獲噪聲抑止比較匹配時(shí)清零計(jì)數(shù)器無奇邊非對(duì)稱,相位可調(diào)的脈寬調(diào)制輸出周期可調(diào)的PWM1、T/C1的組成結(jié)構(gòu)定時(shí)/計(jì)數(shù)器寄存器TCNT1、輸出比較寄存器OCR1A和OCR1B以及輸入捕獲寄存器ICR1都是16位寄存器。對(duì)這些16位寄存器的讀寫操作應(yīng)遵循特定的步驟,T/C1的中斷請(qǐng)求信號(hào)可以在定時(shí)器中斷標(biāo)志寄存器TIFR中找到,在定時(shí)器中斷屏蔽寄存器TIMSK中,可以找到各自獨(dú)立的中斷屏蔽位。(1)T/C1的時(shí)鐘源T/C1時(shí)鐘源可來自芯片內(nèi)部,也可來自外部引腳T1。T/C1與T/C0共享一個(gè)預(yù)定比例分頻器。時(shí)鐘源選擇由寄存器TCCR1B中的標(biāo)志位CS[2,0]確定。(2)16位T/C1的計(jì)數(shù)單元T/C1的計(jì)數(shù)單元是一個(gè)可編程的16位雙向計(jì)數(shù)器,計(jì)數(shù)值保存在16位寄存器TCNT1中。TCNT1由兩個(gè)8位寄存器:TCNT1H和TCNT1L組成。MCU對(duì)TCNT1的訪問操作應(yīng)遵循特定的步驟。(3)輸入捕獲單元T/C1內(nèi)部的輸入捕獲單元。外部事件發(fā)生的觸發(fā)信號(hào)由引腳ICP1(PD6)輸入。此外,模擬比較器的ACO單元的輸出信號(hào)也可作為外部事件捕獲的觸發(fā)信號(hào)。(見書P14)一個(gè)輸入捕獲發(fā)生在外部引腳ICP1上的邏輯電平變化,或者模擬比較器輸出電平變化,此時(shí)T/C1計(jì)數(shù)器TCNT1中的計(jì)數(shù)值被寫入輸入捕獲寄存器ICR1中,并置位輸入捕獲標(biāo)志位ICF1。輸入捕獲功能可用于頻率和周期的精確測(cè)量。當(dāng)T/C1運(yùn)行在PWM方式下時(shí),允許對(duì)寄存器ICR1進(jìn)行寫操作。應(yīng)在設(shè)置T/C1的運(yùn)行方式為PWM后,再設(shè)置ICR1,此時(shí)寫入ICR1的值將作為計(jì)數(shù)器計(jì)數(shù)序列的上限值。(4)輸入比較單元在T/C1運(yùn)行期間,輸出比較單元一直將寄存器TCNT1的計(jì)數(shù)值同寄存器OCR1A和OCR1B的內(nèi)容進(jìn)行比較,一旦發(fā)現(xiàn)與其中之一相等,比較器即會(huì)產(chǎn)生一個(gè)比較匹配信號(hào),在下一個(gè)計(jì)數(shù)時(shí)鐘脈沖到達(dá)時(shí)置位OCF1A和OCF1B中斷標(biāo)志位。根據(jù)WGM[2:0]和COM1A[1:0]、COM1B[1:0]的不同設(shè)置,比較相等匹配的信號(hào)還用于控制和產(chǎn)生各種類型的脈沖PWM波形。寄存器OCR1A和OCR1B各自配置有一個(gè)輔助緩存器。當(dāng)T/C1工作在非PWM模式時(shí),該輔助緩存器禁止。MCU直接訪問和操作寄存器OCR1A和OCR1B本身。(5)比較匹配輸出單元標(biāo)志位COM1A[1:0]的輸出方式以及控制外部引腳OC1A(PD5)是否輸出OC1A寄存器的值。當(dāng)標(biāo)志位COM1A[1:0]中任何一位為“1”時(shí),波形發(fā)生器的輸出OC1A取代引腳原來的I/O功能,但引腳的方向寄存器DDR依然控制OC1A引腳的輸入/輸出方向。如果要在外部引腳輸出OC1A的邏輯電平,應(yīng)設(shè)定DDR定義該引腳為輸出腳。(6)比較輸出模式和波形發(fā)生器對(duì)于T/C1的各種工作模式,COM1A[1:0]的不同設(shè)置都會(huì)影響到波形發(fā)生器產(chǎn)生的脈沖波形方式。但只要COM1A[1:0]=0,波形發(fā)生器對(duì)OC1A寄存器就沒有任何作用。2、16位T/C1的寄存器(1)T/C1的計(jì)數(shù)寄存器(TCNT1H和TCNT1L)TCNT1H和TCNT1L組成T/C1的計(jì)數(shù)值寄存器TCNT1,該寄存器可以直接被CPU讀寫訪問(2)輸出比較寄存器OCR1A和OCR1BOCR1AH和OCR1AL組成16位輸出比較寄存器OCR1A。該寄存器中的16位數(shù)據(jù)用于同TCNT1寄存器中的計(jì)數(shù)值進(jìn)行連續(xù)的匹配比較。一旦TCNT1的計(jì)數(shù)值與OCR1A的數(shù)據(jù)匹配相等,將產(chǎn)生一個(gè)輸出比較匹配相等的中斷申請(qǐng),或改變OCR1A的輸出邏輯電平。OCR1A和OCR1B兩者作用相同。(3)輸入捕獲寄存器(ICR1H和ICR1L)

ICR1H和ICR1L組成16位輸入捕獲寄存器ICR1。當(dāng)外部引腳ICP1或模擬比較器有輸入捕獲觸發(fā)信號(hào)產(chǎn)生時(shí),計(jì)數(shù)器TCNT1中的計(jì)數(shù)值寫入寄存器ICR1中。在PWM方式下,ICR1的設(shè)定值將作為計(jì)數(shù)器計(jì)數(shù)上限值。(4)定時(shí)/計(jì)數(shù)器中斷屏蔽寄存器(TIMSK)例4.9TIMSK=0x01//表示輸入捕獲中斷允許位5――TICIE1:T/C1輸入捕獲中斷允許標(biāo)志位當(dāng)TICIE1被設(shè)為“1”,且狀態(tài)寄存器中的I位被設(shè)為“1”時(shí),將使能T/C1的輸入捕獲中斷。位4――OCIE1A:T/C1輸出比較A匹配中斷允許標(biāo)志位位3――OCIE1B:T/C1輸出比較B匹配中斷允許標(biāo)志位當(dāng)OCIE1A/B被設(shè)為“1”,且狀態(tài)寄存器中的I位被設(shè)置為“1”時(shí),將使能T/C1的輸入比較匹配中斷。若在T/C1上發(fā)生輸出比較A/B匹配,則執(zhí)行T/C1輸出比較A/B匹配中斷服務(wù)程序。位2――TOIE1:T/C1溢出中斷允許標(biāo)志位當(dāng)TOIE1被設(shè)為“1”,且狀態(tài)寄存器中的I位被設(shè)置為“1”時(shí),將使能T/C1的溢出中斷。若在T/C1上發(fā)生溢出時(shí),則執(zhí)行T/C1溢出中斷服務(wù)程序。(5)定時(shí)/計(jì)數(shù)器中斷標(biāo)志寄存器(TIFR)例4.10TIFR=0x20//表示T/C1輸入捕獲中斷被置位位5――ICF1:T/C1輸入捕獲中斷標(biāo)志位當(dāng)T/C1由外部引腳ICP1觸發(fā)輸入捕獲時(shí),ICF1位被設(shè)為“1”。在T/C1運(yùn)行方式為PWM,寄存器ICR1內(nèi)容作為計(jì)數(shù)器計(jì)數(shù)上限值時(shí),一旦計(jì)數(shù)器TCNT1計(jì)數(shù)值與ICR1相等,也將置位ICF1。圖4.13TIFR寄存器位4――OCF1A:T/C1輸出比較匹配中斷標(biāo)志位當(dāng)T/C1由外部引腳ICP1觸發(fā)輸入捕獲時(shí),OCF1A位被設(shè)為“1”。當(dāng)轉(zhuǎn)入T/C1輸出比較A匹配中斷向量執(zhí)行中斷處理程序時(shí),OCF1A由硬件自動(dòng)清零。寫入一個(gè)邏輯“1”到OCF1A標(biāo)志位將清除該標(biāo)志位。設(shè)置強(qiáng)制輸出比較A匹配時(shí),不會(huì)置位OCF1A標(biāo)志位位3――OCF1B:T/C1輸出比較B匹配中斷標(biāo)志位當(dāng)T/C1由外部引腳ICP1觸發(fā)輸入捕獲時(shí),OCF1B位被設(shè)為“1”。當(dāng)轉(zhuǎn)入T/C1輸出比較匹配中斷向量執(zhí)行中斷處理程序時(shí),OCF1B由硬件自動(dòng)清零。寫入一個(gè)邏輯“1”到OCF1B標(biāo)志位將清除該標(biāo)志位。位2――TOV1:T/C1溢出中斷標(biāo)志位當(dāng)T/C1產(chǎn)生溢出時(shí),TOV1位被設(shè)為“1”。當(dāng)轉(zhuǎn)入T/C1溢出中斷向量執(zhí)行中斷處理程序時(shí),TOV1由硬件自動(dòng)清零。寫入一個(gè)邏輯“1”到TOV1標(biāo)志位將清除該標(biāo)志位。(6)T/C1控制寄存器A(TCCR1A)此寄存器用來設(shè)置比較A和B的輸出模式,以及波形的發(fā)生模式。位7~6――COM1A[1:0]比較A輸出模式位5~4――COM1B[1:0]比較B輸出模式這些位控制了比較輸出引腳OC1A的輸出行為。圖4.14TCCR1A寄存器位3――FOC1A強(qiáng)制輸出比較A位2――FOC1B強(qiáng)制輸出比較B一個(gè)FOC1A/FOC1B選通脈沖不會(huì)產(chǎn)生任何的中斷申請(qǐng),也不影響計(jì)數(shù)器TCNT1和寄存器OCR1A的值。讀FOC1A/FOC1B總為零。位1~0――WGM[1:0]:波形發(fā)生模式這兩個(gè)標(biāo)志與WGM[3:2]相組合,用于控制T/C1的計(jì)數(shù)和工作方式――計(jì)數(shù)器計(jì)數(shù)上限值和確定波形發(fā)生器的工作模式。T/C1支持的工作模式有:一般模式,比較匹配時(shí)清零定時(shí)器模式,以及兩種脈寬調(diào)制模式等15種。(7)T/C1控制寄存器B(TCCR1B)位7――ICNC1:輸入捕獲噪聲抑制允許位4~3――WGM[3:2]:波形發(fā)生模式位[2:0]――CS1[2:0]T/C1時(shí)鐘源選擇圖4.15TCCR1B寄存器表4.4T/C1的時(shí)鐘源真值表3、16位寄存器的讀寫操作步驟T/C1有4個(gè)16位的寄存器:TCNT1、OCR1A、OCR1B、ICR1。由于AVR的內(nèi)部數(shù)據(jù)總線為8位,因此讀寫16位的寄存器需要分兩次操作。為了能夠同步讀寫16位寄存器,每一個(gè)16位寄存器分別配有一個(gè)8位的臨時(shí)輔助寄存器,用于保存16位寄存器的高8位數(shù)據(jù)。要同步讀寫這些16位寄存器,讀寫操作應(yīng)遵循以下特定的步驟:1)16位寄存器的讀操作當(dāng)MCU讀取16位寄存器的低字節(jié),16位寄存器低字節(jié)內(nèi)容被送到MCU,而高字節(jié)內(nèi)容在讀低字節(jié)的同時(shí)被置于臨時(shí)輔助寄存器中;當(dāng)MCU讀取高字節(jié)時(shí),讀到的是臨時(shí)輔助寄存器的內(nèi)容,因此,要同步讀取16位寄存器中的數(shù)據(jù),應(yīng)先讀取該寄存器的低位字節(jié),再立即讀取其高位字節(jié)。2)16位寄存器的寫操作當(dāng)MCU寫入數(shù)據(jù)到16位寄存器的高位字節(jié)時(shí),數(shù)據(jù)是寫入到臨時(shí)輔助寄存器中,當(dāng)MCU寫入數(shù)據(jù)到16位寄存器的低位字節(jié)時(shí),寫入的8位數(shù)據(jù)與臨時(shí)輔助寄存器中的8位數(shù)據(jù)組合成16位數(shù)據(jù),同步寫入到16位寄存器中。因此,要同步寫16位寄存器時(shí),應(yīng)寫入該寄存器的高位字節(jié),再立即寫入它的低位字節(jié)。4.2.38位定時(shí)器/計(jì)數(shù)器2(T/C2)T/C2是一個(gè)8位的多功能定時(shí)/計(jì)數(shù)器,其主要特點(diǎn)是:比較匹配時(shí)清零計(jì)數(shù)器無奇邊非對(duì)稱,相位可調(diào)的脈寬調(diào)制輸出周期可調(diào)的PWM頻率發(fā)生器10位的時(shí)鐘預(yù)分頻器溢出和比較匹配中斷源允許使用從外部引腳的32.768kHz時(shí)鐘晶振作為獨(dú)立的計(jì)數(shù)時(shí)鐘源。1、T/C2的組成結(jié)構(gòu)(1)8位T/C2的計(jì)數(shù)單元T/C2的計(jì)數(shù)單元是一個(gè)可編程的8位雙向計(jì)數(shù)器,根據(jù)計(jì)數(shù)器的工作模式,在每一個(gè)時(shí)鐘到來時(shí),計(jì)數(shù)器進(jìn)行加1、減1或清零操作。時(shí)鐘的來源由標(biāo)志位CSR[2:0]設(shè)定。當(dāng)CSR[2:0]=0時(shí),計(jì)數(shù)器停止計(jì)數(shù)。計(jì)數(shù)值保存在寄存器TCNT2中,MCU可以在任何時(shí)間訪問讀/寫TCNT2,MCU寫入TCNT2的值將立即覆蓋其中原有的內(nèi)容,并會(huì)影響計(jì)數(shù)器的運(yùn)行。計(jì)數(shù)器的計(jì)數(shù)序列取決于寄存器TCCR2中標(biāo)志位的設(shè)置。WGM2[2:0]的設(shè)置直接影響到計(jì)數(shù)器的計(jì)數(shù)方式和OC2的輸出,同時(shí)也影響和涉及T/C2的溢出標(biāo)志位TOV2的置位。標(biāo)志位TOV2可以用于產(chǎn)生申請(qǐng)中斷。(2)輸出比較單元在T/C2運(yùn)行期間,輸出比較單元一直將寄存器TCNT2的計(jì)數(shù)值同寄存器OCR2的內(nèi)容進(jìn)行比較。一旦兩者相等,在下一個(gè)計(jì)數(shù)時(shí)鐘脈沖到達(dá)時(shí)置位OCR2標(biāo)志位。根據(jù)WGM2[1:0]和COM2[2:0]的不同設(shè)置,比較相等匹配的輸出還控制產(chǎn)生各種類型的脈沖波形。(3)比較匹配輸出單元

當(dāng)標(biāo)志位COM2[1:0]中的任何一位為“1”時(shí),波形發(fā)生器的輸出取代OC2引腳原來的I/O功能,單引腳的方向寄存器DDR仍然控制OC2引腳的輸入/輸出方向。如果要在外部引腳輸出OC2的邏輯電平,應(yīng)設(shè)定DDR定義該引腳為輸出腳。采用這種結(jié)構(gòu),用戶可以先初始化OC2的狀態(tài),然后再允許其由引腳輸出。(4)比較輸出模式和波形發(fā)生器在四種工作模式下,根據(jù)COM2[1:0]的不同設(shè)定,波形發(fā)生器將產(chǎn)生各種不同的脈沖波形,只要COM2[1:0]=0,波形發(fā)生器對(duì)OC2寄存器沒有任何作用。2、8位T/C2的寄存器(1)TCNT2是T/C2的計(jì)數(shù)值寄存器,該寄存器可以直接被讀寫訪問。寫TCNT2寄存器在下一個(gè)定時(shí)器時(shí)鐘周期中阻塞比較匹配。因此,在計(jì)數(shù)器運(yùn)行期間修改TCNT2的內(nèi)容,可能將丟失一次TCNT2與OCR2的匹配比較操作。(2)輸出比較寄存器(OCR2)OCR2寄存器中的8位數(shù)據(jù)用于同TCNT2寄存器中的計(jì)數(shù)值進(jìn)行連續(xù)的匹配比較。一旦TCNT2的計(jì)數(shù)值與OCR2的數(shù)據(jù)匹配相等,將產(chǎn)生一個(gè)輸出比較匹配相等的中斷申請(qǐng),或改變OC2的輸出邏輯電平。(3)定時(shí)/計(jì)數(shù)器中斷屏蔽寄存器(TIMSK)位7―OCIE2:T/C2輸出比較匹配中斷允許標(biāo)志位位6―TOIE2:T/C2溢出中斷允許標(biāo)志位

(4)定時(shí)/計(jì)數(shù)器中斷標(biāo)志寄存器(TIFR)位7――OCF2:T/C2輸出比較匹配中斷標(biāo)志位位6――TOV2:T/C2溢出中斷標(biāo)志位(5)特殊功能I/O寄存器(SFIOR)位1――PSR2:T/C2預(yù)定比例分頻器復(fù)位當(dāng)寫入“1”到該位,將復(fù)位T/C2預(yù)定比例分頻器,一旦預(yù)定比例分頻器復(fù)位,硬件自動(dòng)清零該標(biāo)志位。(6)T/C2控制寄存器(TCCR2)位7――FOC2:強(qiáng)制輸出比較

當(dāng)寫入“1”到FOC2時(shí),在波形發(fā)生器上強(qiáng)加一個(gè)匹配成功信號(hào),改變OC2輸出狀態(tài)。位3,6―WGM2[1:0]:波形發(fā)生模式普通模式(WGM21:0=0)為最簡(jiǎn)單的工作模式。在此模式下計(jì)數(shù)器不停地累加。計(jì)到的最大值后(TOP=0xFF),數(shù)值溢出,計(jì)數(shù)器簡(jiǎn)單地返回到最小值0x00重新開始。相位修正PWM模式(WGM21:0=1)為用戶提供了一個(gè)獲得高精度相位修正PWM波形的方法。在CTC模式(WGM21:0=2),OCR2寄存器用于調(diào)節(jié)計(jì)數(shù)器的分辨率。當(dāng)計(jì)數(shù)器的數(shù)值TCNT2等于OCR2時(shí),計(jì)數(shù)器清零??焖貾WM模式(WGM21:0=3)可用來產(chǎn)生高頻的PWM波形。位5:4―COM2[1:0]:比較匹配輸出模式位2:0――CS2[2:0]:T/C2時(shí)鐘源選擇位[2:0]――CS2[2:0]:T/C2時(shí)鐘源選擇4.3T/C0與T/C1共用的預(yù)分頻器的

使用方法ATMEGA8的T/C0和T/C1由一個(gè)10位預(yù)定比例分頻器提供時(shí)鐘源。1、T/C0和T/C1的時(shí)鐘源T/C0和T/C1的時(shí)鐘源可來自芯片內(nèi)部,也可來自外部引腳T0和T1。當(dāng)CSn[2:0]=1時(shí),系統(tǒng)內(nèi)部時(shí)鐘直接作為定時(shí)/計(jì)數(shù)器的時(shí)鐘源,這也是最高頻率的時(shí)鐘源。由預(yù)定比例分頻器提供的時(shí)鐘源。預(yù)定比例分頻器對(duì)系統(tǒng)時(shí)鐘按四個(gè)不同的分頻比例分頻,輸出4個(gè)不同周期的時(shí)鐘信號(hào)。兩個(gè)定時(shí)/計(jì)數(shù)器可以分別選定其中一個(gè)作為時(shí)鐘源。T/C0(TC1)可以使用來自外部引腳T0(T1)的時(shí)鐘信號(hào)作為外部時(shí)鐘源。

2、外部時(shí)鐘信號(hào)的檢測(cè)施加在外部引腳T0/T1的時(shí)鐘信號(hào),由引腳同步檢測(cè)電路采樣,每個(gè)系統(tǒng)時(shí)鐘周期同步采樣一次,采樣輸出信號(hào)進(jìn)入邊沿檢測(cè)器。外部時(shí)鐘的最高頻率不能大于F/2.5,脈沖寬度要大于一個(gè)系統(tǒng)時(shí)鐘clk周期。此外,外部時(shí)鐘源是不進(jìn)入預(yù)定比例分頻器再次分頻的。3、特殊功能I/O寄存器(SFIOR)Bit0――PSR10:T/C0,1預(yù)定比例分頻器復(fù)位Bit1一PSR2:T/C2預(yù)定比例分頻器復(fù)位當(dāng)該位置1時(shí),復(fù)位對(duì)應(yīng)預(yù)定比例分頻器4.4具有PMW功能與異步操作的

定時(shí)器/計(jì)數(shù)器使用方法自學(xué)4.4.1.T/C1的應(yīng)用標(biāo)志位WGM[3:0]和COM1A[1:0]/COM1B[1:0]的組合構(gòu)成了T/C1的16種工作方式以及OC1A/OC1B不同模式的輸出。1、一般模式(WGM[3:0]=0)T/C1最簡(jiǎn)單的工作為一般模式,此時(shí)計(jì)數(shù)器為單向加1計(jì)數(shù)器,一旦寄存器TCNT1的計(jì)數(shù)值達(dá)到0xFFFF,下一個(gè)計(jì)數(shù)脈沖到來時(shí)便恢復(fù)為0x0000,并繼續(xù)開始向上申請(qǐng)中斷,也可以作為計(jì)數(shù)器的第17位使用,用戶可以在任何時(shí)候通過寫入TCNT1寄存器初值來調(diào)整計(jì)數(shù)器溢出的時(shí)間間隔。在一般模式中,可以方便地應(yīng)用輸入捕獲功能,并正確選擇計(jì)數(shù)時(shí)鐘源,使得兩次捕獲觸發(fā)信號(hào)的時(shí)間間隔小于計(jì)數(shù)器完成一次單程計(jì)數(shù)器溢出的時(shí)間間隔。在一般模式中,可以使用輸出比較單元產(chǎn)生定時(shí)中斷。但最好不要在一般模式下使用輸出比較單元產(chǎn)生脈沖調(diào)制波形輸出,因?yàn)檫@將占用過多的MCU的時(shí)間。2、比較匹配清零計(jì)數(shù)器CTC模式(WGM1[3:0]=4或者WGM1[3:0]=12)T/C1工作在CTC時(shí),計(jì)數(shù)器為單向加1計(jì)數(shù)器,一旦寄存器TCNT1的值與OCR1A(WGM1[3:0]=4或者WGM1[3:0]=12)的設(shè)定值相等,就將計(jì)數(shù)器TCNT1清零,然后繼續(xù)向上加1計(jì)數(shù)。通過設(shè)置OCR1A/ICR1的值,可以方便地控制比較匹配輸出地頻率,也方便了外部事件計(jì)數(shù)的應(yīng)用。在TCNT1與OCR1A/ICR1匹配的同時(shí),置比較匹配標(biāo)志位OCF1A/ICF1為“1”。標(biāo)志位OCF1A/ICF1可以用于申請(qǐng)中斷,如果MCU響應(yīng)該匹配中斷,用戶可以在中斷服務(wù)程序中修改OCR1A/ICR1寄存器的值。在T/C1采用的計(jì)數(shù)時(shí)鐘頻率較高,且寫入OCR1A/ICR1的值與0x0000接近時(shí),可能會(huì)丟失一次比較匹配成立條件。例如,當(dāng)TCNT1的值與OCR1A相等,TCNT1便被硬件清零并申請(qǐng)中斷:在中斷服務(wù)中重新改變?cè)O(shè)置OCR1A為0x0005;但中斷返回后TCNT1的計(jì)數(shù)值已經(jīng)為0x0010了,此時(shí)便丟失了一次比較匹配成立條件,計(jì)數(shù)器將繼續(xù)加1計(jì)數(shù)到0xFFFF,然后返回0x0000,當(dāng)再次計(jì)數(shù)到0x0000時(shí),才能產(chǎn)生比較匹配成功。在CTC模式下產(chǎn)生波形輸出時(shí),應(yīng)設(shè)置OC1A的輸出方式為觸發(fā)方式。OC1A輸出波形的最高頻率為。其他的輸出頻率由下式確定,式中N的取值為1、8、64、256或1024。除此之外,與一般的模式相同,當(dāng)計(jì)數(shù)器TCNT1的計(jì)數(shù)值由0xFFFF轉(zhuǎn)到0x0000時(shí),標(biāo)志位TOV1置位。

3、快速PWM模式T/C1工作在快速PWM模式可以產(chǎn)生高速的PWM波形。當(dāng)T/C1工作在此模式下時(shí),計(jì)數(shù)器為單程向上的加1計(jì)數(shù)器,從0x0000一直加到TOP,在下一計(jì)數(shù)脈沖到來時(shí)清零,然后再?gòu)?x0000開始加1計(jì)數(shù)。在設(shè)置正向比較匹配輸出模式中,當(dāng)TCNT1的計(jì)數(shù)值與OCR1A/OCR1B的值相同匹配時(shí)置位OC1A/OC1B,當(dāng)計(jì)數(shù)器的值由TOP返回0x0000時(shí)清零OC1A/OC1B。而在設(shè)置反向比較匹配輸出模式中,當(dāng)TCNT1的計(jì)數(shù)值與OCR1A/OCR1B的值相同匹配時(shí)清零OC1A/OC1B,當(dāng)計(jì)數(shù)值由TOP返回0x0000時(shí)置位OC1A/OC1B。由于快速PWM模式采用單程計(jì)數(shù)方式,所以其產(chǎn)生PWM波的頻率比另外兩種模式高一倍。因此快速PWM模式適用于電源調(diào)整等應(yīng)用。快速PWM的精度可以為固定的8、9、10位或由寄存器OCR1A,ICR1設(shè)置值定義:最小精度為2位,最大精度為16位。其它由OCR1A,ICR1設(shè)定值所定義的精度。在TCNT1的計(jì)數(shù)值到達(dá)TOP時(shí),新的TOP值必須大于或等于比較寄存器設(shè)定的比較值,否則比較匹配輸出將不會(huì)發(fā)生。4、相位可調(diào)PWM模式相位可調(diào)PWM模式可以產(chǎn)生高精度相位可調(diào)的PWM波形,當(dāng)T/C1工作在此模式下時(shí),計(jì)數(shù)器為雙程計(jì)數(shù)器:從0x0000一直加到TOP,在下一個(gè)計(jì)數(shù)脈沖到達(dá)時(shí),改變計(jì)數(shù)方向,從TOP開始減1計(jì)數(shù)到0x0000。在設(shè)置正向比較匹配輸出模式下:正向加1過程中,TCNT1的計(jì)數(shù)值與OCR1A/OCR1B的值相同匹配時(shí)清零OC1A/OC1B;反向減1過程中,當(dāng)計(jì)數(shù)器TCNT1的計(jì)數(shù)值與OCR1A/OCR1B的值相同匹配時(shí)清零OC1A/OC1B。計(jì)數(shù)器計(jì)數(shù)上限TOP值的大小決定了PWM輸出頻率的低高。而比較寄存器的數(shù)值則決定了輸出脈沖的起始相位和脈寬。相位可調(diào)PWM的精度可以為固定的8、9、10位,或由寄存器OCR1A,ICR1設(shè)置值定義。最小精度為2位,最大精度為16位。其他由OCR1A,ICR1設(shè)定值所定義的精度。在TCNT1的計(jì)數(shù)值到達(dá)0x0000時(shí),置溢出標(biāo)志位TOV1為“1”。如果使用寄存器OCR1A,ICR1的設(shè)定值來作為計(jì)數(shù)器計(jì)數(shù)上限值,當(dāng)在TCNT1計(jì)數(shù)到達(dá)TOP時(shí),OC1A/OCF1標(biāo)志位置位,同時(shí)OCR1A/OCR1B自動(dòng)更新,這些中斷標(biāo)志位都可以用于申請(qǐng)中斷。當(dāng)改變計(jì)數(shù)器的計(jì)數(shù)上限時(shí),新的TOP值必須大于或等于比較寄存器OCR1A/OCR1B設(shè)置比較值,否則比較匹配輸出將不會(huì)發(fā)生。由于在相位可調(diào)PWM模式中,OCR1A/OCR1B的更新發(fā)生在TCNT1=TOP,因此,如果在應(yīng)用中需要經(jīng)常改變計(jì)數(shù)器計(jì)數(shù)的上限值,那么建議使用頻率周期可調(diào)PWM模式。5、相位頻率可調(diào)PWM模式相位頻率可調(diào)PWM模式可以產(chǎn)生高精度相位和頻率可調(diào)的PWM波形,當(dāng)T/C1工作在此模式下時(shí),計(jì)數(shù)器為雙程計(jì)數(shù)器:從0x0000一直加到TOP,在下一個(gè)計(jì)數(shù)脈沖到達(dá)時(shí),改變計(jì)數(shù)方向,從TOP開始減1計(jì)數(shù)到0x0000。在設(shè)置正向比較匹配輸出模式下:正向加1過程中,TCNT1的計(jì)數(shù)值與OCR1A/OCR1B的值相同匹配時(shí)清零。4.4.2T/C2的應(yīng)用標(biāo)志位WGM2[3:0]和COM2[2:0]組合構(gòu)成了T/C2的4種工作方式以及OC2不同模式的輸出。T/C2最簡(jiǎn)單的工作為一般模式,此時(shí)計(jì)數(shù)器為單向加1計(jì)數(shù)器,一旦寄存器TCNT2的計(jì)數(shù)值達(dá)到0xFFFF,下一個(gè)計(jì)數(shù)脈沖到來時(shí)便恢復(fù)為0x0000,并繼續(xù)開始向上申請(qǐng)中斷,也可以作為計(jì)數(shù)器的第9位使用,用戶可以在任何時(shí)候通過寫入TCNT2寄存器初值來調(diào)整計(jì)數(shù)器溢出的時(shí)間間隔。1、在一般模式中,可以使用輸出比較單元產(chǎn)生定時(shí)中斷。2、比較匹配清零計(jì)數(shù)器CTC模式(WGM2[1:0]=2)T/C2工作在CTC時(shí),計(jì)數(shù)器為單向加1計(jì)數(shù)器,一旦寄存器TCNT2的值與OCR2的設(shè)定值相等,就將計(jì)數(shù)器TCNT2清零,然后繼續(xù)向上加1計(jì)數(shù)。通過設(shè)置OCR2的值,可以方便地控制比較匹配輸出地頻率,也方便了外部事件計(jì)數(shù)的應(yīng)用。在TCNT2與OCR2匹配的同時(shí),置比較匹配標(biāo)志位OCF2為“1”。標(biāo)志位OCF2可以用于申請(qǐng)中斷,如果MCU響應(yīng)該匹配中斷,用戶可以在中斷服務(wù)程序中修改OCR2寄存器的值。在T/C2采用的計(jì)數(shù)時(shí)鐘頻率較高,且寫入OCR2的值與0x0000接近時(shí),可能會(huì)丟失一次比較匹配成立條件。在CTC模式下產(chǎn)生波形輸出時(shí),應(yīng)設(shè)置OC2的輸出方式為觸發(fā)方式。OC2輸出波形的最高頻率為。其他的輸出頻率由下式確定,式中的取值為1、8、64、256或1024。除此之外,與一般的模式相同,當(dāng)計(jì)數(shù)器TCNT2的計(jì)數(shù)值由0xFFFF轉(zhuǎn)到0x0000時(shí),標(biāo)志位TOV2置位。3、快速PWM模式T/C2工作在快速PWM模式可以產(chǎn)生高速的PWM波形。當(dāng)T/C2工作在此模式下時(shí),計(jì)數(shù)器為單程向上的加1計(jì)數(shù)器,從0x0000一直加到TOP,在下一計(jì)數(shù)脈沖到來時(shí)清零,然后再?gòu)?x0000開始加1計(jì)數(shù)。在設(shè)置正向比較匹配輸出模式中,當(dāng)TCNT2的計(jì)數(shù)值與OCR2的值相同匹配時(shí)置位OC2,當(dāng)計(jì)數(shù)器的值由TOP返回0x0000時(shí)清零OC2。而在設(shè)置反向比較匹配輸出模式中,當(dāng)TCNT2的計(jì)數(shù)值與OCR2的值相同匹配時(shí)清零OC2,當(dāng)計(jì)數(shù)值由TOP返回0x0000時(shí)置位OC2。由于快速PWM模式采用單程計(jì)數(shù)方式,所以其產(chǎn)生PWM波的頻率比另外兩種模式高一倍。因此快速PWM模式適用于電源調(diào)整等應(yīng)用。在快速PWM模式下。OC2的值,可以獲得不同占空比的PWM脈沖波形。OCR2的一些特殊值會(huì)產(chǎn)生極端的PWM波形。當(dāng)OCR2的設(shè)置值與0x0000相近時(shí),會(huì)產(chǎn)生窄脈沖序列。而設(shè)置OCR2的值等于TOP,OC2的輸出為恒定的高(低)電平。當(dāng)設(shè)置OCR2為0x0000,且OC2輸出方式為觸發(fā)模式,OC2產(chǎn)生占空比為50%的最高頻率PWM波形。4、相位可調(diào)PWM模式相位可調(diào)PWM模式可以產(chǎn)生高精度相位可調(diào)的PWM波形,當(dāng)T/C2工作在此模式下時(shí),計(jì)數(shù)器為雙程計(jì)數(shù)器:從0x0000一直加到TOP,在下一個(gè)計(jì)數(shù)脈沖到達(dá)時(shí),改變計(jì)數(shù)方向,從TOP開始減1計(jì)數(shù)到0x0000。在設(shè)置正向比較匹配輸出模式下:正向加1過程中,TCNT2的計(jì)數(shù)值與OCR2的值相同匹配時(shí)清零OC2;反向減1過程中,當(dāng)計(jì)數(shù)器TCNT2的計(jì)數(shù)值與OCR2的值相同匹配時(shí)清零OC2。計(jì)數(shù)器計(jì)數(shù)上限TOP值的大小決定了PWM輸出頻率的低高。而比較寄存器的數(shù)值則決定了輸出脈沖的起始相位和脈寬。相位可調(diào)PWM的精度可以為固定的8、9、10位,或由寄存器OCR2設(shè)置值定義。最小精度為2位,最大精度為16位。其他由OCR2設(shè)定值所定義的精度。在TCNT2的計(jì)數(shù)值到達(dá)0x0000時(shí),置溢出標(biāo)志位TOV2為“1”。如果使用寄存器OCR2的設(shè)定值作為計(jì)數(shù)器計(jì)數(shù)上限值,當(dāng)在TCNT2計(jì)數(shù)到達(dá)TOP時(shí),OC2標(biāo)志位置位,同時(shí)OCR2自動(dòng)更新,這些中斷標(biāo)志位都可以用于申請(qǐng)中斷。當(dāng)改變計(jì)數(shù)器的計(jì)數(shù)上限時(shí),新的TOP值必須大于或等于比較寄存器OCR2設(shè)置比較值,否則比較匹配輸出將不會(huì)發(fā)生。由于在相位可調(diào)PWM模式中,OCR2的更新發(fā)生在TCNT2=TOP,因此,如果在應(yīng)用中需要經(jīng)常改變計(jì)數(shù)器計(jì)數(shù)的上限值,那么建議使用頻率周期可調(diào)PWM模式。5、相位頻率可調(diào)PWM模式相位頻率可調(diào)PWM模式可以產(chǎn)生高精度相位和頻率可調(diào)的PWM波形,當(dāng)T/C2工作在此模式下時(shí),計(jì)數(shù)器為雙程計(jì)數(shù)器:從0x0000一直加到TOP,在下一個(gè)計(jì)數(shù)脈沖到達(dá)時(shí),改變計(jì)數(shù)方向,從TOP開始減1計(jì)數(shù)到0x0000。在設(shè)置正向比較匹配輸出模式下:正向加1過程中,TCNT2的計(jì)數(shù)值與OCR2的值相同匹配時(shí)清零OC2;反向減1過程中,當(dāng)計(jì)數(shù)器TCNT2的計(jì)數(shù)值與OCR2的值相同時(shí)置位OC2。在設(shè)置反向比較匹配輸出模式下:正向加1過程中,TCNT2的計(jì)數(shù)值與OCR2的值相同匹配時(shí)置位OC2;反向減1過程中,當(dāng)計(jì)數(shù)器TCNT2的計(jì)數(shù)值與OCR2的值相同時(shí)清零OC2。由于該P(yáng)WM模式采用雙程計(jì)數(shù)方式,所以它產(chǎn)生的PWM波的頻率比快速PWM低,其相位可調(diào)的特性適用于馬達(dá)控制一類的應(yīng)用。計(jì)數(shù)器計(jì)數(shù)上限TOP值的大小決定了PWM輸出頻率的低高。而比較寄存器的數(shù)值則決定了輸出脈沖的起始相位和脈寬。相位頻率可調(diào)PWM的精度可以為固定的8、9、10位,或由寄存器OCR2設(shè)置值定義。最小精度為2位,最大精度為16位。其他由OCR2設(shè)定值所定義的精度。在TCNT2的計(jì)數(shù)值到達(dá)0x0000時(shí),置溢出標(biāo)志位TOV2為“1”。同時(shí)OCR2自動(dòng)更新,其更新數(shù)據(jù)來源于各自的輔助緩沖器。如果使用寄存器OCR2的設(shè)定值來作為計(jì)數(shù)器計(jì)數(shù)上限值,當(dāng)在TCNT2計(jì)數(shù)到達(dá)TOP時(shí),OC2標(biāo)志位置位,這些中斷標(biāo)志位都可以用于申請(qǐng)中斷。當(dāng)改變計(jì)數(shù)器的計(jì)數(shù)上限時(shí),新的TOP值必須大于或等于比較寄存器OCR2設(shè)置比較值,否則比較匹配輸出將不會(huì)發(fā)生。由于在相位頻率可調(diào)PWM模式中,OCR2的更新發(fā)生在TCNT2=0x0000,因此,不管如何改變計(jì)數(shù)器計(jì)數(shù)的上限值,都能產(chǎn)生對(duì)稱的PWM輸出波形,同時(shí)調(diào)整了頻率。使用寄存器OCR2來設(shè)定計(jì)數(shù)器計(jì)數(shù)的上限值,一般應(yīng)用于固定頻率PWM輸出,這時(shí),除了OCR2外,寄存器OCR2也可用于產(chǎn)生PWM脈沖。如果在應(yīng)用中需要經(jīng)常改變計(jì)數(shù)器計(jì)數(shù)的上限值,那么使用寄存器OCR2設(shè)定上限值是最好的選擇,但此時(shí)只能有一個(gè)PWM輸出。4.4.3T/C2的異步操作方式位3--AS2異步T/C2設(shè)定位位2――TCN2UB位1――OCR2UB:OCR2更新忙位0――TCR2UB:TCCR2更新忙1、異步狀態(tài)寄存器(ASSR)圖4.23ASSR寄存器2、T/C2的異步操作當(dāng)T/C2采用異步工作方式時(shí),計(jì)數(shù)時(shí)鐘直接來自外部引腳TOSC1,因此計(jì)數(shù)時(shí)鐘與系統(tǒng)時(shí)鐘是不同步的,所以在使用異步方式時(shí)必須注意以下幾個(gè)方面:①當(dāng)在同步和異步方式之間切換時(shí),寄存器TCNT2、OCR2和TCCR2的內(nèi)容會(huì)受到破環(huán)。安全改變時(shí)鐘源(同步異步轉(zhuǎn)換)的順序如下:

通過清零OCIE2和TOIE2標(biāo)志位,屏蔽T/C2的中斷;選擇時(shí)鐘源AS2,設(shè)置為相應(yīng)的值;寫新的值到TCNT2、OCR2和TCCR2寄存器;同步轉(zhuǎn)異步時(shí),須等待TCR2UB、OCR2UB和TCN2UB為“0”;清T/C2的中斷標(biāo)志位;如果需要時(shí),使能T/C2的中斷。②芯片已經(jīng)對(duì)時(shí)鐘晶振進(jìn)行了優(yōu)化。加一個(gè)外部時(shí)鐘到TOSC1引腳可能會(huì)導(dǎo)致T/C2不正常的工作。CPU的主時(shí)鐘頻率必須大于外部時(shí)鐘頻率的4倍。③當(dāng)寫入TCNT2、OCR2和TCCR2寄存器中的一個(gè)時(shí),其值先寫入到臨時(shí)緩沖寄存器中,在TOSC1上的時(shí)鐘兩個(gè)上升沿后,臨時(shí)緩沖寄存器中的值被鎖存到寄存器中。在臨時(shí)緩沖寄存器中的值未鎖存到其目標(biāo)寄存器前,不能寫一個(gè)新值到臨時(shí)緩沖寄存器,以上三個(gè)寄存器的每一個(gè)都有獨(dú)立的臨時(shí)緩沖寄存器。④在設(shè)置TCNT2、OCR2和TCCR2寄存器后,如要進(jìn)入省電模式或等待模式時(shí),同時(shí)要將T/C2用作喚醒源的話,用戶必須要等到被寫入的寄存器完成更新后才能進(jìn)入休眠狀態(tài)。否則,這些寄存器的改變還沒有生效,MCU就進(jìn)入休眠了。特別是使用輸出比較匹配OCF2中斷作為喚醒器件的喚醒源時(shí),這點(diǎn)尤其重要。因?yàn)樵趯慜CR2或TCNT2期間,輸出比較功能單元將被屏蔽。如果寫入的內(nèi)容沒有生效,MCU就進(jìn)入了休眠模式,器件永遠(yuǎn)都不會(huì)接收到比較匹配中斷,MCU將不會(huì)被喚醒。⑤如果T/C2被用作將器件從省電或等待模式喚醒,用戶必須注意,當(dāng)要再次進(jìn)入這些休眠模式時(shí),中斷邏輯需要一個(gè)TOSC1周期來復(fù)位。如果器件喚醒和再次進(jìn)入休眠模式之間的時(shí)間少于一個(gè)TOSC1周期,中斷將不會(huì)發(fā)生,器件將不能被喚醒。如果不能確定再次進(jìn)入省電或等待模式前的時(shí)間是否足夠,可使用以下算法來保證有一個(gè)TOSC1的時(shí)鐘周期:

寫一個(gè)值到TCNT2、OCR2和TCCR2寄存器;等待ASSR寄存器中相應(yīng)的更新標(biāo)志位返回“0”;再次進(jìn)入省電或等待模式。⑥當(dāng)選擇了異步方式,T/C2的32.768kHz晶振始終在運(yùn)行狀態(tài)甲除非進(jìn)入掉電模式或等待模式。在上電復(fù)位或從掉電模式或等待模式下被喚醒時(shí),晶振需要大約1秒鐘的時(shí)間來穩(wěn)定。建議用戶在上電復(fù)位或從掉電模式或等待模式下被喚醒后,等待1秒鐘后再使用T/C2。無論T/C2使用內(nèi)部計(jì)數(shù)時(shí)鐘還是外部TOSC1引腳上的計(jì)數(shù)時(shí)鐘,當(dāng)器件從掉電或等待模式狀態(tài)下被喚醒后,所有T/C2寄存器中的內(nèi)容均被認(rèn)為已經(jīng)丟失(由于不穩(wěn)定的時(shí)鐘信號(hào)造成)。⑦當(dāng)使用異步方式時(shí),從省電或等待模式下喚醒的過程為:當(dāng)符合中斷條件產(chǎn)生后,喚醒過程將在下一個(gè)計(jì)數(shù)器的時(shí)鐘周期開始。器件被喚醒后,MCU暫停4個(gè)時(shí)鐘周期,然后執(zhí)行中斷處理程序,最后從SLEEP指令后的指令重新開始執(zhí)行。⑧在器件被喚醒后,立即讀取TCNT2寄存器將返回不正確的值。由于TGNT2是由TOSC1異步時(shí)鐘驅(qū)動(dòng)的,而讀取TCNT2必須通過一個(gè)寄存器,并且應(yīng)同內(nèi)部I/O時(shí)鐘同步。這個(gè)讀取同步發(fā)生在每個(gè)TOSC1的上升沿。當(dāng)從省電模式喚醒,I/O時(shí)鐘(clk)再次有效,立即讀取TCNT2則讀出的為進(jìn)入休眠前的值,因?yàn)橹钡絋OSC1的下一個(gè)上升沿,寄存器中的值才會(huì)更新。由于在從省電模式下喚醒后,TOSC1時(shí)鐘的相位是不可預(yù)測(cè)的,建議按照以下的順序讀取TCNT2寄存器:4.5ATmega單片機(jī)的時(shí)鐘綜合實(shí)例硬件電路是利用DFD368B-A-060906板的數(shù)碼顯示和按鍵部份。能進(jìn)行年、月、日、星期、時(shí)、分的計(jì)時(shí),有星期,閏月等功能??梢岳面I盤調(diào)節(jié)。其中K1為翻頁(yè)和上調(diào)鍵,K2為下調(diào)鍵,K3為設(shè)定鍵。1、圖4.24是一個(gè)簡(jiǎn)單的單片機(jī)時(shí)鐘系統(tǒng)圖4.24簡(jiǎn)單數(shù)字電子鐘電路原理圖4.5.1數(shù)碼管動(dòng)態(tài)顯示實(shí)際的單片機(jī)系統(tǒng)中,往往需要多位顯示。動(dòng)態(tài)顯示是一種最常見的多位顯示方法,應(yīng)用非常廣泛。1.動(dòng)態(tài)顯示概念

用數(shù)碼管顯示信息時(shí),由于每個(gè)數(shù)碼管至少需要8個(gè)I/O口,如果需要多個(gè)數(shù)碼管,則需要太多I/O口,而單片機(jī)的I/O口是有限的。在實(shí)際應(yīng)用中,一般采用動(dòng)態(tài)顯示的方式解決此問題。2.動(dòng)態(tài)顯示原理所有數(shù)碼管的段選全部連接在一起,如何能顯示不同的內(nèi)容呢?動(dòng)態(tài)顯示是多個(gè)數(shù)碼管,交替顯示,利用人的視覺暫留作用使人看到多個(gè)數(shù)碼管同時(shí)顯示。3.動(dòng)態(tài)顯示的實(shí)現(xiàn)在編程時(shí),需要輸出段選和位選信號(hào),位選信號(hào)選中其中一個(gè)數(shù)碼管,然后輸出段碼,使該數(shù)碼管顯示所需要的內(nèi)容,延時(shí)一段時(shí)間后,再選中另一個(gè)數(shù)碼管,再輸出對(duì)應(yīng)的段碼,高速交替。4.動(dòng)態(tài)顯示實(shí)例例:需要顯示數(shù)字“12”

①輸出位選信號(hào),選中第一個(gè)數(shù)碼管A1=1②輸出1的段碼b=1,c=1③延時(shí)一段時(shí)間④選中第二個(gè)數(shù)碼管A2=1⑤輸出2的段碼a=1,b=1g=1,e=1,d=1⑥把上面的流程以一定的速度循環(huán)執(zhí)行如果延時(shí)時(shí)間長(zhǎng),則會(huì)出現(xiàn)閃爍現(xiàn)象;如果延時(shí)時(shí)間太短,則會(huì)出現(xiàn)顯示暗且有重影。

4.5.274LS595簡(jiǎn)介1.74LS595外形及功能8位串行輸入轉(zhuǎn)并行輸出移位寄存器QA--QH:八位并行輸出端,可以直接控制數(shù)碼管的8個(gè)段。QH1:級(jí)聯(lián)輸出端。將它接下一個(gè)595的SBR端。SBR:串行

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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)論