AVR單片機新手入門必看教程課件_第1頁
AVR單片機新手入門必看教程課件_第2頁
AVR單片機新手入門必看教程課件_第3頁
AVR單片機新手入門必看教程課件_第4頁
AVR單片機新手入門必看教程課件_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

恭喜你:選擇了正確的AVR學(xué)習(xí)資料ATmega16的中斷系統(tǒng)

ATmega16的中斷源和中斷向量

AVR一般擁有數(shù)十個中斷源,每個中斷源都有獨立的中斷向量。AVR的程序存儲區(qū)的最低端,即從Flash地址的0x0000開始用于放置中斷向量,稱作中斷向量區(qū)。各種型號的AVR中斷向量區(qū)的大小是不同的,由下式?jīng)Q定:中斷向量區(qū)大小=中斷源個數(shù)×每個中斷向量占據(jù)字?jǐn)?shù)AVR的21個中斷中,包含1個非屏蔽中斷(RESET)3個外部中斷(INT0、INT1、INT2)和17個內(nèi)部中斷,1.外部中斷INT0、INT1和INT2是3個外部中斷源,它們是分別由芯片外部引腳PD2、PD3、PB2上的電平的變化或狀態(tài)觸發(fā)的。通過對控制寄存器MCUCR和控制與狀態(tài)寄存器MCUCSR的配置,外部中斷可以定義為由PD2、PD3、PB2引腳上的電平的下降沿、上升沿、邏輯電平變化,或者低電平(INT2僅支持電平變化的邊沿觸發(fā))觸發(fā)。3個定時計數(shù)器觸發(fā)的內(nèi)部中斷MER2COMPTIMER2OVF定時溢出2TIMER1CAPT撲捉溢出1TIMER1COMPA定時比較ATIMER1COMPB定時比較BTIMER1OVF定時溢出2TIMER0OVF定時溢出0TIMER0COMP定時比較0同步/異步串行接收和轉(zhuǎn)發(fā)器USART的內(nèi)部中斷USARTRXC接收一個字節(jié)USARTTXC發(fā)送一個字節(jié)USARTUDRE發(fā)送數(shù)據(jù)寄存器為空其它內(nèi)部中斷SPISTC為內(nèi)部SPI串行接口傳送結(jié)束中斷ADC為ADC單元完成一次A/D轉(zhuǎn)換的中斷EE_RDY是片內(nèi)的EEPROM就緒(對EEPROM的操作完成)中斷ANA_COMP是由內(nèi)置的模擬比較器輸出引發(fā)的中斷TWI為內(nèi)部兩線串行接口的中斷SPM_RDY是對片內(nèi)的Flash寫操作完成中斷ATmega16的中斷控制中斷優(yōu)先級的確定1.在AVR單片機中,一個中斷在中斷向量區(qū)中的位置決定了它的優(yōu)先級,位于低地址的中斷優(yōu)先級高于位于高地址的中斷。2.AVR單片機采用固定的硬件優(yōu)先級方式,不支持通過軟件對中斷優(yōu)先級的重新設(shè)定。

AVR有兩種機制不同的中斷:帶有中斷標(biāo)志的中斷(可掛起)不帶中斷標(biāo)志的中斷(不能掛起)。中斷標(biāo)志在AVR中,大多數(shù)的中斷都屬于帶中斷標(biāo)志的中斷。

中斷標(biāo)志概念每個中斷源在其I/O空間寄存器中具有自己的一個中斷標(biāo)志位。AVR的硬件系統(tǒng)在每個時鐘周期內(nèi)都會檢測(接受)外部(內(nèi)部)中斷源的中斷條件。一旦中斷條件滿足,AVR的硬件就會將置位相應(yīng)的中斷標(biāo)志位(置為“1”),表示向MCU提起中斷請求。中斷標(biāo)志清除中斷標(biāo)志位一般在MCU響應(yīng)該中斷時,由硬件自動清除,或在中斷服務(wù)程序中通過讀/寫專門數(shù)據(jù)寄存器的方式自動清除。中斷標(biāo)志位除了由硬件自動清除外也可以使用軟件指令清除,注意:如用軟件方法清除,清除的方法是對其寫“1”。

不帶(不設(shè)置)中斷標(biāo)志的中斷:如配置為低電平觸發(fā)的外部中斷即為此類型的中斷低電平中斷的重要應(yīng)用是喚醒處于休眠工作模式的MCU。三、中斷屏蔽與管理

為全局中斷允許控制位:中斷允許的總控制位I(標(biāo)志寄存器SREG中的I標(biāo)志位SREG.7)每一個中斷源都設(shè)置了獨立的中斷允許位

AVR對中斷采用兩級控制方式。這些中斷允許位分散位于各中斷源所屬模塊的控制寄存器中。AVR響應(yīng)一個可屏蔽中斷源(假定為A中斷)的中斷的條件是:1.響應(yīng)A中斷=全局中斷允許標(biāo)志AND中斷A允許標(biāo)志AND中斷A標(biāo)志2.AVR復(fù)位后,各個中斷允許位以及全局中斷允許位均被清零,這保證了程序在開始執(zhí)行時(一般程序開頭是對芯片內(nèi)部以及外圍系統(tǒng)的初始化配置)不會受到中斷的干擾。3.在AVR復(fù)位后的用戶初始化程序中,需要先對需要使用的中斷源進(jìn)行必要的配置。待系統(tǒng)初始化過程結(jié)束后再置位I,使系統(tǒng)進(jìn)入正常的工作狀態(tài),開始響應(yīng)中斷請求。由于AVR在響應(yīng)一個中斷的過程中通過硬件將I標(biāo)志位自動清零,這樣就阻止了MCU響應(yīng)其它中斷。因此通常情況下,AVR是不能自動實現(xiàn)中斷嵌套的。如要系統(tǒng)中必須要實現(xiàn)中斷嵌套的應(yīng)用,用戶可在中斷服務(wù)程序中使用指令將全局中斷允許位開放,通過間接的方式實現(xiàn)中斷的嵌套處理。四、中斷嵌套

外部中斷斷觸發(fā)方方式和特特點INT0、INT1、、INT2的中中斷觸發(fā)發(fā)方式取取決于用用戶程序序?qū)CU控制制寄存器器MCUCR以以及MCU控制制與狀態(tài)態(tài)寄存器器MCUCSR的設(shè)定定。其中中,INT0和和INT1支持持4種中中斷觸發(fā)發(fā)方式,,INT2支持持2種。。任意電平平變化觸觸發(fā)表示示只要引引腳上有有邏輯電電平的變變化就會會產(chǎn)生中中斷申請請(不管管是上升升沿還是是下降沿沿都引起起中斷觸觸發(fā))4種觸發(fā)發(fā)方式中中,還有有以下的的一些不不同的特特點:低電平觸觸發(fā)是不不帶中斷斷標(biāo)志類類型的,,即只要要中斷輸輸入引腳腳PD2或PD3保持持低電平平,那么么將一直直會產(chǎn)生生中斷申申請。2.MCU對INT0和INT1的的引腳上上的上升升沿或下下降沿變變化的識識別(觸觸發(fā)),,需要I/O時時鐘信號號的存在在(由I/O時時鐘同步步檢測)),屬于于同步邊邊沿觸發(fā)發(fā)的中斷斷類型。。3.MCU對INT2的引腳腳上的上上升沿或或下降沿沿變化的的識別((觸發(fā))),以及及低電平平的識別別(觸發(fā)發(fā))是通通過異步步方式檢檢測的,,不需要要I/O時鐘信信號的存存在。因因此,這這類觸發(fā)發(fā)類型的的中斷經(jīng)經(jīng)常作為為外部喚喚醒源,,用于將將處在Idle休眠模模式,以以及處在在各種其其它休眠眠模式的的MCU喚醒。。這是由由于除了了在空閑閑(Idel))模式時時,I/O時鐘鐘信號還還保持繼繼續(xù)工作作,在其其它各種種休眠模模式下,,I/O時鐘信信號均是是處在暫暫停狀態(tài)態(tài)的。4.如果果使用低低電平觸觸發(fā)方式式的中斷斷作為喚喚醒源,,將MCU從掉掉電模式式(Power-down))中喚醒醒時,電電平拉低低后仍需需要維持持一段時時間才能能將MCU喚醒醒,這是是為了提提高了MCU的的抗噪性性能。拉拉低的觸觸發(fā)電平平將由看看門狗的的時鐘信信號采樣樣兩次((在通常常的5V電源和和25℃℃時,看看門狗的的時鐘周周期為1μs))。如果果電平拉拉低保持持2次采采樣周期期的時間間,或者者一直保保持到MCU啟啟動延時時(start-uptime))過程之之后,MCU將將被喚醒醒并進(jìn)入入中斷服服務(wù)。如如果該電電平的保保持時間間能夠滿滿足看門門狗時鐘鐘的兩次次采樣,,但在啟啟動延時時(start-uptime))過程完完成之前前就消失失了,那那么MCU仍將將被喚醒醒,但不不會觸發(fā)發(fā)中斷進(jìn)進(jìn)入中斷斷服務(wù)程程序。所所以,為為了保證證既能將將MCU喚醒,,又能觸觸發(fā)中斷斷,中斷斷觸發(fā)電電平必須須維持足足夠長的的時間。。5.如果果設(shè)置了了允許響響應(yīng)外部部中斷的的請求,則即便便是引腳腳PD2、PD3、PB2設(shè)設(shè)置為輸輸出方式式工作,引腳上上的電平平變化也也會產(chǎn)生生外部中中斷觸發(fā)發(fā)請求。。這一特特性為用用戶提供供了使用用軟件產(chǎn)產(chǎn)生中斷斷的途徑徑。與外部中中斷相關(guān)關(guān)的寄存存器和標(biāo)標(biāo)志位在ATmega16中中,與外外部中斷斷有關(guān)的的寄存器器有4個個,共有有11個個標(biāo)志位位。其作作用分別別是3個個外部中中斷各自自的中斷標(biāo)志志位,中中斷允許許控制位位,和用于定義外部部中斷的的觸發(fā)類類型。1)MCU中中斷方式式控制寄寄存器——MCUCRMCU控控制寄存存器MCUCR的低4位為INT0(ISC01、、ISC00))和INT1(ISC11、、ISC10))中斷觸觸發(fā)類型型控制位位MCU對對INT0、INT1引腳上上電平值值的采樣樣在邊沿沿檢測前前。1.如果果選擇脈脈沖邊沿沿觸發(fā)或或電平變變化中斷斷的方式式,那么在在INT0、INT1引腳上上的一個個脈寬大大于一個個時鐘周周期的脈脈沖變化化將觸發(fā)發(fā)中斷,,過短的的脈沖則則不能保保證觸發(fā)發(fā)中斷。。2.如果果選擇低低電平觸觸發(fā)中斷斷,那么低電電平必須須保持到到當(dāng)前指指令執(zhí)行行完成才才觸發(fā)中中斷。如如果是低低電平觸觸發(fā)方式式的話,,中斷請請求將一一直保持持到引腳腳上的低低電平消消失為止止。2)MCU控制制和狀態(tài)態(tài)寄存器器—MCUCSRMCU控控制和狀狀態(tài)寄存存器MCUCSR中的的第6位位(ISC2))為INT2的中斷斷觸發(fā)類類型控制制位3)通用用中斷允允許控制制寄存器器—GICR通用中斷斷控制寄寄存器GICR的高3位為INT0、INT1和和INT2的中中斷允許許控制位位。GICR寄存器器中相應(yīng)應(yīng)的中斷斷允許位位被置為為“1””,當(dāng)外外部引腳腳INT0(或或INT1、或或INT2)上上的電平平變化時時,MCU將會會響應(yīng)相相應(yīng)的中中斷請求求。4)通通用中斷斷標(biāo)志寄寄存器——GIFR中斷標(biāo)志志寄存器器GIFR的高高3位為為INT0、INT1和INT2的的中斷標(biāo)標(biāo)志位當(dāng)INT2..0引腳腳上的有有效事件件滿足中中斷觸發(fā)發(fā)條件后后,INTF2..0位會變變成“1”。如如果此時時SREG寄存存器中I=1,以以及GICR寄寄存器中中的INTn被被置為““1”,,MCU將將響應(yīng)中中斷請求求,跳至至相應(yīng)的的中斷向向量處開開始執(zhí)行行中斷服服務(wù)程序序,同時時硬件自自動將INTFn標(biāo)志志位清零零。用戶可以以使用指指令將INTFn清除除,清除除的方式式是寫邏邏輯“1”到INTFn,將將標(biāo)志清清零。當(dāng)當(dāng)INT0(INT1)設(shè)置置為低電電平觸發(fā)發(fā)方式時時,標(biāo)志志位INTF0(INTF1)始終終為“0”,這這并不意意味著不不產(chǎn)生中中斷請求求,而是是低電平平觸發(fā)方方式是不不帶中斷斷標(biāo)志類類型的中中斷觸發(fā)發(fā)。在系統(tǒng)程程序的初初始化部部分中對對外部中中斷進(jìn)行行設(shè)置時時(定義義或改變變觸發(fā)方方式),,應(yīng)先將將GICR寄存存器中該該中斷的的中斷允允許位清清零,禁禁止MCU響應(yīng)應(yīng)該中斷斷后再設(shè)設(shè)置ISCn位位。而在開放放中斷允允許前,,一般應(yīng)應(yīng)通過向向GIFR寄存存器中的的中斷標(biāo)標(biāo)志位INTFn寫入入邏輯““1”,,將該中中斷的中中斷標(biāo)志志位清除除,然后后開放中中斷。這這樣可以以防止在在改變ISCn的過程程中誤觸觸發(fā)中斷斷。中斷服務(wù)務(wù)程序的的編寫中中斷服務(wù)務(wù)程序的的編寫編寫中斷斷服務(wù)程程序的兩兩個基本本原則::1.全面面、仔細(xì)細(xì)考慮中中斷現(xiàn)場場的保護(hù)護(hù)和恢復(fù)復(fù)。2.中斷斷服務(wù)程程序應(yīng)盡盡可能的的短不同高級級語言開開發(fā)環(huán)境境中對編編寫中斷斷服務(wù)程程序的語語法規(guī)則則和處理理方法是是不同的的。用戶戶在編寫寫中斷服服務(wù)程序序前,應(yīng)應(yīng)對所使使用開發(fā)發(fā)平臺,,中斷程程序的編編寫方法法,中斷斷的處理理方法等等有較好好的了解解。使用ICCAVR等高高級語言言編寫中中斷服務(wù)務(wù)程序時時,用戶戶通常不不必考慮慮中斷現(xiàn)現(xiàn)場保護(hù)護(hù)和恢復(fù)復(fù)的處理理,這是是由于編編譯器在在編譯中中斷服務(wù)務(wù)程序的的源代碼碼時,會會在生成成的目標(biāo)標(biāo)代碼中中自動加加入相應(yīng)應(yīng)的中斷斷現(xiàn)場保保護(hù)和恢恢復(fù)的指指令,同同時自動動采用RETI指令作作為中斷斷服務(wù)的的返回指指令。在ICCAVRR中,只只要用#pragma偽偽指令和中中斷向量說明明中斷服務(wù)程程序的入口地地址。中斷服務(wù)函數(shù)數(shù)按以下格式式定義:#pragmainterrupt_handler<函數(shù)名>:<中斷向向量>如:INT0中斷服務(wù)程程序#pragmainterrupt_handlerint0_isr:2voidint0_isr((void)){\\中斷服務(wù)務(wù)程序}C編譯器會自自動幫助用戶戶產(chǎn)生正確的的中斷向量處處的以及初始始化堆棧指針針的代碼,同同時在中斷服服務(wù)程序中自自動生成中斷斷現(xiàn)場保護(hù)和和恢復(fù)(函數(shù)數(shù)中用到的全全部寄存器保保護(hù))及使用用RETI指指令返回。圖中使用了兩兩個按鍵K1、K2,按按鍵的一端分分別與PD2(INT0)、PD3(INT1)連接。INT0和INT1作為為外部中斷的的輸入,采用用電平變化的的下降沿觸發(fā)發(fā)方式,當(dāng)K1(K2))按下時,會會在PD2((PD3)引引腳上產(chǎn)生一一個高電平到到低電平的跳跳變,觸發(fā)INT0或INT1中斷斷。外部中斷應(yīng)用用實例硬件電路應(yīng)用中斷應(yīng)舉舉例:定時掃描數(shù)碼碼管,INT0、INT1按鍵下降降沿出發(fā)中斷斷,使鍵值分分別加減1/******功功能能:INT0中斷函數(shù)數(shù),使鍵值加加1******/#pragmainterrupt_handlerInt0_isr:2voidInt0_isr(void){delay_nms(20);//延時時大約20毫毫秒,去抖if(KEY0==0)//再次判判斷按鍵是否否按下{while(KEY0==0);//等待按按鍵釋放Key_Number++;//鍵值加加1}}/******功功能能:INT1中斷函數(shù)數(shù),使鍵值減減1******/#pragmainterrupt_handlerInt1_isr:3voidInt1_isr(void){delay_nms(20);//延延時大約20毫秒,去抖抖if(KEY1==0)//再次判斷斷按鍵是否按按下{while(KEY1==0);//等待按按鍵釋放Key_Number--; //鍵值減1}}/******功功能能:Timer0溢出出中斷,數(shù)碼碼管掃描******/#pragmainterrupt_han

溫馨提示

  • 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

提交評論