單片機(jī)外部中斷詳解及程序_第1頁(yè)
單片機(jī)外部中斷詳解及程序_第2頁(yè)
單片機(jī)外部中斷詳解及程序_第3頁(yè)
單片機(jī)外部中斷詳解及程序_第4頁(yè)
單片機(jī)外部中斷詳解及程序_第5頁(yè)
已閱讀5頁(yè),還剩3頁(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、單片機(jī)外部中斷詳解及程序單片機(jī)在自主運(yùn)行的時(shí)候一般是在執(zhí)行一個(gè)死循環(huán) 程序,在沒有外界干擾(輸入信號(hào))的時(shí)候它基本處于一 個(gè)封閉狀態(tài)。比如一個(gè)電子時(shí)鐘,它會(huì)按時(shí)、分、秒的 規(guī)律來(lái)自主運(yùn)行并通過(guò)輸出設(shè)備(如液晶顯示屏)把時(shí)間 顯示出來(lái)。在不需要對(duì)它進(jìn)行調(diào)校的時(shí)候它不需要外部 干預(yù),自主封閉地運(yùn)行。如果這個(gè)時(shí)鐘足夠準(zhǔn)確而又不 掉電的話,它可能一直處于這種封閉運(yùn)行狀態(tài)。但事情 往往不會(huì)如此簡(jiǎn)單,在時(shí)鐘剛剛上電、或時(shí)鐘需要重新 校準(zhǔn)、甚至?xí)r鐘被帶到了不同的時(shí)區(qū)的時(shí)候,就需要重 新調(diào)校時(shí)鐘,這時(shí)就要求時(shí)鐘就必須具有調(diào)校功能。因 此單片機(jī)系統(tǒng)往往又不會(huì)是一個(gè)單純的封閉系統(tǒng),它有 些時(shí)候恰恰需要外部的干預(yù),

2、這也就是外部中斷產(chǎn)生的 根本原由。實(shí)際上在第二個(gè)示例演示中,就已經(jīng)舉過(guò)有按鍵輸入的 例子了,只不過(guò)當(dāng)時(shí)使用的方法并不是外部中斷,而是 用程序查詢的方式。下面就用外部中斷的方法來(lái)改寫一 下第二個(gè)示例中,通過(guò)按鍵來(lái)更改閃爍速度的例子(第二 個(gè)例子)。電路結(jié)構(gòu)和接線不變,僅把程序改為下面的形 式。#include unsigned int t=500; /定義一個(gè)全局變量t,并設(shè)定初 始值為500次 /=延時(shí)子函數(shù),在8MHz晶振時(shí)約1ms=二=void delay_ms(unsigned int k)unsigned int i,j;for(i=0;ik;i+)for(j=0;j1140;j+);

3、/=主函數(shù)=void main( void )DDRB = 0 xFF; /設(shè)置端口 B為輸出方向PORTB = 0 xFF; /設(shè)置端口 B的輸出為全高電平DDRD = 0 x00; /設(shè)置端口 D為輸入方向PORTD = 0 xFF; /設(shè)定端口 D為內(nèi)部上拉方式,無(wú)信號(hào)輸 入時(shí)處于高電平狀態(tài)MCUCR = 0 x0A; /設(shè)定INT0、INT1為下降沿觸發(fā)GICR = 0 xC0; /使能 INT0、INT1 中斷SREG = 0 x80; /使能總中斷while(1)PORTB = 0 x55; /讓接在端口 B 上的 LED 顯示 01010101 delay_ms(t); /延時(shí)

4、t 個(gè) msPORTB = 0 xAA; /讓接在端口 B 上的 LED 顯示 01010101 delay_ms(t); /延時(shí) t 個(gè) ms/=中斷函數(shù)(外部0)=#pragma vector = INT0_vect_interrupt void INT0_Server(void)t = 100; /設(shè)定t的值為100次/=中斷函數(shù)(外部1)=#pragma vector = INT1_vectt = 500; /設(shè)定t的值為500次 把上述程序進(jìn)行編譯并下載到單片機(jī)中,可以看到結(jié)果 與第二個(gè)示例中的完全一致。下面就來(lái)分析一下鍵盤中 斷的程序原理。在分析程序之前,先來(lái)了解一下什么叫“外部中

5、斷 ”。前面已講述過(guò),在沒有打擾的情況下,單片機(jī) 的程序在封閉狀態(tài)下自主運(yùn)行,但如果在某一時(shí)刻需要 響應(yīng)一個(gè)外部事件(比如有按鍵被按下),這時(shí)就需要用 外部中斷。具體來(lái)講,外部中斷就是在單片機(jī)的一個(gè)引 腳上,由于外部因素導(dǎo)致了一個(gè)電平的變化(比如由高變 低),而通過(guò)捕獲到這個(gè)變化,單片機(jī)內(nèi)部自主執(zhí)行的程 序就被暫時(shí)打斷,轉(zhuǎn)而去執(zhí)行相應(yīng)的中斷處理程序,執(zhí) 行完后又回到原來(lái)中斷的地方繼續(xù)執(zhí)行原程序。這個(gè)引 腳上的電平變化,就申請(qǐng)了一個(gè)外部中斷事件,而這個(gè) 能申請(qǐng)外部中斷的引腳就是外部中斷的觸發(fā)引腳。在上 面的例子中,可以看到兩個(gè)按鍵S1、S2被接到了 ATMega16的PD3和PD2引腳,而這兩個(gè)

6、引腳正是該單片 機(jī)的兩個(gè)外部中斷(INT1和INT0)的觸發(fā)引腳(第二功 能)。當(dāng)按鍵沒有按下時(shí),這兩個(gè)引腳都為高電平(執(zhí)行 過(guò)PORTD=0 xFF),當(dāng)按鍵被按下時(shí),引腳電平跳變?yōu)榈碗娖?,這時(shí)若單片機(jī)設(shè)置成允許中斷申請(qǐng),就會(huì)觸發(fā)外 部中斷事件,從而轉(zhuǎn)去執(zhí)行中斷服務(wù)程序。明白了這個(gè) 過(guò)程之后,接下來(lái)就可以分析程序了。程序執(zhí)行后,主程序就一直在不停的運(yùn)行while(1)內(nèi)的 這個(gè)死循環(huán),讓LED以t=500ms的初始值來(lái)交替閃爍,直 到有外部中斷來(lái)打斷它。假設(shè)某一時(shí)刻按鍵S2被按下, 這時(shí)由于引腳PD2上的電平突然被拉低,申請(qǐng)了一個(gè)外 部中斷0(INT0),這時(shí)的程序就轉(zhuǎn)去執(zhí)行外部中斷0的 中

7、斷服務(wù)程序(即interrupt void INT0_Server(void) 函數(shù))。這時(shí)全局變量t的值被該函數(shù)重新賦值為100(即 延時(shí)為100ms),完成后又回到主函數(shù)中的while(1)內(nèi)去 繼續(xù)執(zhí)行,因此LED閃爍的速度就變快了。觀察程序可看出,如果沒有中斷去調(diào)用中斷服務(wù)子程序, 在主程序中是沒有語(yǔ)句去調(diào)動(dòng)它的。也就是說(shuō)如果沒有 外部中斷,中斷服務(wù)子程序(即_interrupt void INT0_Server(void)函數(shù))是永遠(yuǎn)不會(huì)被執(zhí)行的。這也說(shuō) 明,中斷服務(wù)子程序是一類特殊的子程序,它不能被主 程序調(diào)用,只能被中斷申請(qǐng)調(diào)用。因此,中斷服務(wù)子程 序有它固定的格式和寫法。在不同的編譯系統(tǒng)中的寫法 不完全一樣,下面給出IAR下的中斷服務(wù)子程序的格式。 #pragma vector = INT0_vect中斷服務(wù)程序代碼以上是固定格式,除斜體部分外,其余部分不可更改。 斜體部分中的INT0_vect

溫馨提示

  • 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)論