第10講 51單片機中斷系統(tǒng)_第1頁
第10講 51單片機中斷系統(tǒng)_第2頁
第10講 51單片機中斷系統(tǒng)_第3頁
第10講 51單片機中斷系統(tǒng)_第4頁
第10講 51單片機中斷系統(tǒng)_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第十講51單片機中斷系統(tǒng)一、單片機中斷系統(tǒng)1.中斷的定義

所謂中斷,是指CPU正在處理某些事務的時候,外部又發(fā)生了某一事件,請求CPU及時處理。于是,CPU暫時中斷當前的工作,轉而處理所發(fā)生的事件。處理完畢,再回到原來被中斷的地方,繼續(xù)原來的工作。這樣的過程,稱為中斷。中斷示意圖中斷方式流程圖中斷嵌套流程圖①中斷源②中斷申請③開放中斷④保護現(xiàn)場⑤中斷服務⑥恢復現(xiàn)場⑦中斷返回2.中斷涉及的幾個環(huán)節(jié)(單片機最多只能實現(xiàn)二級嵌套)手機手機鈴聲響了提醒你去接你準備去接電話一開始你正在電腦上看視頻在電腦上暫停我的這個視頻你開始接電話掛斷電話回來繼續(xù)看我的視頻3.AT89S52單片機的中斷源S52系列有6個中斷源(比S51多一個T2)

⑴2個外部中斷請求:INT0,INT1

⑵3個片內(nèi)定時器/計數(shù)器T0、T1和T2中斷請求:TF0,TF1,(TF2)

⑶1個串行口中斷請求:TI/RI1.定時器控制寄存器TCON(88H)TF1TR1TF0TR0IE1IT1IE0IT0TCONTF0/TF1:定時器0/定時器1溢出中斷申請標志位:=0:定時器未溢出;=1:定時器溢出申請中斷,進中斷后自動清零。TR0/TR1:定時器運行啟停控制位:=0:定時器停止運行;=1:定時器啟動運行。是管理定時器工作的SFR(其中低4位管外部中斷,高4位管定時器/計數(shù)器中斷)二、與中斷相關的特殊功能寄存器IE0/IE1:外部中斷申請標志位:=0:沒有外部中斷申請;=1:有外部中斷申請。IT0/IT1:外部中斷請求的觸發(fā)方式選擇位:=0:在INT0/INT1端申請中斷的信號低電平觸發(fā);=1:在INT0/INT1端申請中斷的信號負跳變觸發(fā).TF1TR1TF0TR0IE1IT1IE0IT0TCON

EA—ET2ESET1EX1ET0EX0IE2.中斷允許寄存器IE(0A8H)EX0/EX1/ET1/ET0/ES位:分別是INT0/1,Timer0/1,串行口的中斷允許控制位:=0時禁止中斷;=1時允許中斷。ET2:T2中斷允許控制位(僅52系列有)=0時禁止中斷;=1時允許中斷。EA:總的中斷允許控制位(總開關):=0時禁止全部中斷;=1時允許中斷?!狿T2PSPT1

PX1

PT0PX0IPPX0/PX1:INT0/1優(yōu)先級控制位:=0時屬低優(yōu)先級;=1時屬高優(yōu)先級。PT0/PT1/PT2:T0/1/2中斷優(yōu)先級控制位:=0時屬低優(yōu)先級;=1時屬高優(yōu)先級。PS1:串行口中斷優(yōu)先級控制位:=0時屬低優(yōu)先級;=1時屬高優(yōu)先級。3.中斷優(yōu)先級控制寄存器IP(0B8H)【例】PX1=1;外中斷INT1被設置成高優(yōu)先級PT0=0;定時器T0被設置成低優(yōu)先級總線方式IP=0x04;//IP=00000100將PX1設為1PT0設為0;對同時發(fā)生多個中斷申請時:?不同優(yōu)先級的中斷同時申請(很難遇到)——先高后低?相同優(yōu)先級的中斷同時申請(很難遇到)——按序執(zhí)行?正處理低優(yōu)先級中斷又接到高級別中斷——高打斷低?正處理高優(yōu)先級中斷又接到低級別中斷——高不理低4.中斷優(yōu)先級處理原則三、中斷系統(tǒng)硬件結構四、單片機的中斷矢量與優(yōu)先級中斷矢量:單片機的6個中斷源分別對應有各自的中斷服務程序入口地址——中斷矢量000BHTF0定時/計數(shù)器0(T0)002BHTF2定時/計數(shù)器2(T2)0023HRI/TI串行口接收/發(fā)送001BHTF1定時/計數(shù)器1(T1)0013HIE1外部中斷1(INT1)0003HIE0外部中斷0(INT0)中斷優(yōu)先級中斷矢量申請標志中斷源最高優(yōu)先級最低優(yōu)先級五、外部中斷(INT0,INT1)申請過程1.實驗開發(fā)板中的外部中斷接口電路K1:外部中斷1的按鍵,接P3.2線K2:外部中斷2的按鍵,接P3.3線2.外部中斷的申請過程⑴在CPU已經(jīng)開放了外部中斷允許的前提下;⑵在INT0/INT1引腳輸入一個負脈沖或低電平;⑶TCON寄存器中的IE0/IE1標志位自動變“1”,⑷檢測到IE0/IE1變“1”后,將產(chǎn)生指令:執(zhí)行中斷服務程序;⑸并將IE0/IE1標志位自動清“0”,以備下次申請。1.interruptm修飾符interruptmC51中斷函數(shù)必須通過它進行修飾。在C51程序設計中,當函數(shù)定義時用了interruptm修飾符,系統(tǒng)編譯時把對應函數(shù)轉化為中斷函數(shù),自動加上程序頭段和尾段,并按51系統(tǒng)中斷的處理方式自動把它安排在程序存儲器中的相應位置。

在該修飾符中,m的取值為0~31,對應的中斷情況如下:0——外部中斷01——定時/計數(shù)器T02——外部中斷13——定時/計數(shù)器T14——串行口中斷5——定時/計數(shù)器T2其它值預留。六、C51中斷函數(shù)的編寫C51編譯器從絕對地址8m+3處產(chǎn)生一個中斷向量,其中m為中斷號,也即interrupt后面的數(shù)字。該向量包含一個到中斷函數(shù)入口地址的絕對跳轉。3.中斷函數(shù)注意如下:(1)中斷函數(shù)不能進行參數(shù)傳遞,如果中斷函數(shù)中包含任何參數(shù)聲明都將導致編譯出錯。(2)中斷函數(shù)沒有返回值,如果企圖定義一個返回值將得不到正確的結果,建議在定義中斷函數(shù)時將其定義為void類型,以明確說明沒有返回值。2.usingn修飾符修飾符usingn用于指定本函數(shù)內(nèi)部使用的工作寄存器組,其中n的取值為0~3,表示寄存器組號??梢允÷允÷院笙到y(tǒng)自動選擇七、C51編程舉例本節(jié)通過幾個例程介紹有關中斷應用的程序的編寫。1.單一外中斷的應用【例】在51單片機的P1口上接有8只LED。在外部中斷0輸入引腳P3.2(INT0*)引腳接有一只按鈕開關K1。程序要求將外部中斷0設置為負跳沿觸發(fā)。在程序啟動時,P1口上的8只LED亮。按一次按鈕開關K1,使引腳接地,產(chǎn)生一個負跳沿觸發(fā)的外中斷0中斷請求,在中斷服務程序中,讓低4位的LED和高4位的LED交替閃爍。具體電路如下圖所示。1819控制8只LED交替閃爍的電路參考程序如下:#include<reg51.h>voidDelay(unsignedinti) /*延時函數(shù)Delay(),i為形式參數(shù),不能賦初值*/{ unsignedintj;for(;i>0;i--) for(j=0;j<333;j++) /*晶振為12MHz,j的選擇與晶振頻率有關*/{;} /*空函數(shù)*/}voidmain() /*主函數(shù)*/{ EA=1; /*總中斷允許*/EX0=1; /*允許外部中斷0中斷*/IT0=1; /*選擇外部中斷0為跳沿觸發(fā)方式*/{P1=0;} /*P1口的8只LED全亮*/20While(1) /*循環(huán)*/}voidint0()interrupt0using0 /*外中斷0的中斷服務函數(shù)*/{ EX0=0; /*禁止外部中斷0中斷*/P1=0x0f; /*低4位LED滅,高4位LED亮*/Delay(800); /*延時800ms*/P1=0xf0; /*高4位LED滅,低4位LED亮*/Delay(800); /*延時800ms*/EX0=1; /*中斷返回前,打開外部中斷0中斷*/}本例程包含了兩個部分,一是中斷系統(tǒng)初始化部分,另一是中斷處理服務函數(shù)部分。212.兩個外中斷的應用當多個中斷源時,只需增加相應的中斷服務函數(shù)即可。例5-3是處理兩個外中斷請求的例子【例】如下圖所示,在51單片機的P1口上接有8只LED。在外部中斷0輸入引腳P3.2(INT0*)引腳接有一只按鈕開關K1。在外部中斷1輸入引腳P3.3(INT1*)引腳接有一只按鈕開關K2。程序要求K1和K2都未按下時,P1口的8只LED呈流水燈顯示,僅K1(P3.2)按下時,左右4只LED交替閃爍。僅按下K2(P3.3),P1口的8只LED全部閃亮。兩個外中斷的優(yōu)先級相同。2223兩個外中斷控制8只LED顯示的電路參考程序如下。#include<reg51.h>voidDelay(unsignedinti) /*延時函數(shù)Delay(),i為形式參數(shù),不能賦初值*/{ unsignedintj;for(;i>0;i--) for(j=0;j<125;j++) {;} /*空函數(shù)*/}voidmain() /*主函數(shù)*/{unsignedcharplay[9]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};/*定義了流水燈的顯示數(shù)據(jù)*/unsignedchara;for(;;) { for(a=0;a<9;a++) { { Delay(500) /*延時*/P1=play[a]; /*將已經(jīng)定義的流水燈顯示數(shù)據(jù)送到P1口*/} EA=1; /*總中斷允許*/ EX0=1; /*允許外部中斷0中斷*/ EX1=1 /*允許外部中斷1中斷*/ IT0=1; /*選擇外部中斷0為跳沿觸發(fā)方式*/ IT1=1; /*選擇外部中斷1為跳沿觸發(fā)方式*/ IP=0; /*兩個外部中斷均為低優(yōu)先級*/}}25voidint0_isr(void)interrupt0using0/*外中斷0的中斷服務函數(shù)*/{ for(;;) P1=0x0f; /*低4位LED滅,高4位LED亮*/ Delay(500); /*延時*/ P1=0xf0; /*高4位LED滅,低4位LED亮*/ Delay(500); /*延時*/}voidint1_isr(void)interrupt2using1 /*外中斷1的中斷服務函數(shù)*/{ for(;;) { P1=0xff; /*全滅*/ Delay(500); /*延時*/ P1=0; /*全亮*/ Delay(500);} /*延時*/}26八、中斷控制實例分析實例1:用外部中斷0來改變P1口LED燈的亮滅實例2:用LED數(shù)碼管顯示計數(shù)器對INT0的計數(shù)值(1位數(shù)碼管顯示)實例3:用LED數(shù)碼管顯示計數(shù)器對INT1的計數(shù)值(2位數(shù)碼管顯示)【例】編寫一個用于統(tǒng)計外中斷0的中斷次數(shù)的中斷服務程序intx;voidint0()interrupt0using1{x++;}九、中斷嵌套中斷嵌套只能發(fā)生在單片機正在執(zhí)行一個低優(yōu)先級中斷服務程序的時候,此時又有一個高優(yōu)先級中斷產(chǎn)生,就會產(chǎn)生高優(yōu)先級中斷打斷低優(yōu)先級中斷服務程序,去執(zhí)行高優(yōu)先級中斷服務程序。高優(yōu)先級中斷服務程序完成后,再繼續(xù)執(zhí)行低優(yōu)先級中斷服務程序?!纠?-4】電路如圖5-10所示,設計一個中斷嵌套程序。要求K1和K2都未按下時,P1口的8只LED呈流水燈顯示,當K1按下再松開時,產(chǎn)生一個低優(yōu)先級的外中斷0請求(跳沿觸發(fā)),進入外中斷0中斷服務程序,左右4只LED交替閃爍。此時按下K2再松開時,產(chǎn)生一個高優(yōu)先級的外中斷1請求29(跳沿觸發(fā)),進入外中斷1中斷服務程序,P1口的8只LED全部閃爍。當顯示一段時間后,再從外中斷1返回繼續(xù)執(zhí)行外中斷0中斷服務程序,即P1口控制8只LED左右4只LED交替閃爍。。設置外中斷1為高優(yōu)先級,外中斷0為低優(yōu)先級。3031兩個外中斷嵌套控制8只LED顯示的電路參考程序如下。#include<reg51.h>unsignedcharplay[9]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};/*定義流水燈的顯示數(shù)據(jù)*/voidDelay(unsignedinti) /*延時函數(shù)Delay()*/{unsignedintj;for(;i>0;i--) for(j=0;j<125;j++) {;} /*空函數(shù)*/}32voidmain() /*主函數(shù)*/{unsignedchara;EA=1; /*總中斷允許*/ EX0=1; /*允許外部中斷0中斷*/ EX1=1 /*允許外部中斷1中斷*/ IT0=1; /*選擇外部中斷0為跳沿觸發(fā)方式*/ IT1=1; /*選擇外部中斷1為跳沿觸發(fā)方式*PX0=0; /*外部中斷0為低優(yōu)先級*/PX1=1; /*外部中斷1為高優(yōu)先級*/for(;;) { for(a=0;a<9;a++) {Delay(500) /*延時*/P1=play

溫馨提示

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

評論

0/150

提交評論