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

下載本文檔

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

文檔簡(jiǎn)介

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

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

⑴2個(gè)外部中斷請(qǐng)求:INT0,INT1

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

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

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

PX1

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論