《單片機(jī)原理及應(yīng)用》課件第5章-中斷模塊結(jié)構(gòu)_第1頁(yè)
《單片機(jī)原理及應(yīng)用》課件第5章-中斷模塊結(jié)構(gòu)_第2頁(yè)
《單片機(jī)原理及應(yīng)用》課件第5章-中斷模塊結(jié)構(gòu)_第3頁(yè)
《單片機(jī)原理及應(yīng)用》課件第5章-中斷模塊結(jié)構(gòu)_第4頁(yè)
《單片機(jī)原理及應(yīng)用》課件第5章-中斷模塊結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩33頁(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)介

第5章中斷模塊主要內(nèi)容:1.中斷模塊相關(guān)寄存器;2.中斷執(zhí)行流程;3.中斷服務(wù)程序設(shè)計(jì)。

在CPU和外設(shè)交換信息時(shí),存在著快速CPU和慢速外設(shè)間的矛盾,機(jī)器內(nèi)部有時(shí)也可能出現(xiàn)突發(fā)事件,為此,計(jì)算機(jī)中通常采用中斷技術(shù)。1.中斷:CPU和外設(shè)并行工作,當(dāng)外設(shè)數(shù)據(jù)準(zhǔn)備好(或有某種突發(fā)事件發(fā)生)時(shí)向CPU提出請(qǐng)求,CPU暫停正在執(zhí)行的程序轉(zhuǎn)而為該外設(shè)服務(wù)(或處理緊急事件),處理完畢再回到原斷點(diǎn)繼續(xù)執(zhí)行原程序。2.中斷源:引起中斷的原因或中斷申請(qǐng)的來(lái)源,稱為中斷源。

可以是I/O設(shè)備、故障、時(shí)鐘、調(diào)試中人為設(shè)置。中斷相關(guān)概念:3.中斷優(yōu)先級(jí):當(dāng)有多個(gè)中斷源同時(shí)向CPU申請(qǐng)中斷時(shí),CPU優(yōu)先響應(yīng)最需緊急處理的中斷請(qǐng)求,處理完畢再響應(yīng)優(yōu)先級(jí)別較低的,這種預(yù)先安排的響應(yīng)次序,為中斷優(yōu)先級(jí)。4.中斷的嵌套:在中斷系統(tǒng)中,高優(yōu)先級(jí)的中斷請(qǐng)求能中斷正在進(jìn)行的較低級(jí)的中斷源處理。5.中斷系統(tǒng):能實(shí)現(xiàn)中斷功能并能對(duì)中斷進(jìn)行管理的硬件和軟件,稱為中斷系統(tǒng)。一.中斷控制寄存器TCON----定時(shí)控制寄存器,

IE----中斷允許控制寄存器,IP----中斷優(yōu)先級(jí)控制寄存器.1、TCON88HD7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0定時(shí)器使用位外部中斷使用說(shuō)明:1.IT0和IT1為外中斷INT0

和INT1中斷觸發(fā)方式選擇,若選下降沿觸發(fā)則相應(yīng)位置1;若選低電平觸發(fā),IT相應(yīng)位置0。2.某中斷源有中斷請(qǐng)求,該中斷標(biāo)志置1,無(wú)中斷請(qǐng)求,該中斷標(biāo)志置03.TR0

和TR1

為定時(shí)器T0和T1工作啟動(dòng)和停止控制。2、

IE中斷允許寄存器A8H

D7D6D5D4D3D2D1D0EAESET1EX1ET0EX00禁止,1允許ET0:定時(shí)器T0中斷允許位,ET0=1,允許T1計(jì)數(shù)溢出中斷;

ET0=0,禁止T0中斷。EX1:外部中斷INT1允許位,

EX1=1,允許INT1中斷;

EX1=0,禁止INT1中斷。EX0:外部中斷INT0允許位,

EX0=1,允許INT0中斷;

EX0=0,禁止INT0中斷。3、IP中斷優(yōu)先級(jí)寄存器B8H

D7D6D5D4D3D2D1D0PT2PSPT1PX1PT0PX00低級(jí)別,1高級(jí)別T0T1串行口

當(dāng)某幾個(gè)中斷源在IP寄存器相應(yīng)位同為1或同為零時(shí),由內(nèi)部查詢確定優(yōu)先級(jí),查詢的順序是:CPU優(yōu)先響應(yīng)先查詢的中斷請(qǐng)求T2INT0INT1五個(gè)中斷源的優(yōu)先級(jí)別由IP寄存器管理,相應(yīng)位置1,則該中斷源優(yōu)先級(jí)別高,置0的優(yōu)先級(jí)別低。中斷系統(tǒng)結(jié)構(gòu)IE0EX0TF0IE1TF1TIESET1EX1ET0RIIP硬件查詢高級(jí)中斷請(qǐng)求低級(jí)中斷請(qǐng)求中斷源INT0INT1中斷入口地址中斷源10IEPX0PSPT1PX1PT0111111111100000EA1≥1SCON11T0T1RXTXIT0IT100TCON中斷入口地址自然優(yōu)先級(jí)自然優(yōu)先級(jí)源允許總允許優(yōu)先級(jí)二、中斷執(zhí)行流程N(yùn)NYYYN執(zhí)行指令中斷標(biāo)志1?(中斷請(qǐng)求?)指令最后一個(gè)T周期?EA=1?允許位=1?CPU判別優(yōu)先權(quán),響應(yīng)優(yōu)先權(quán)高的中斷斷點(diǎn)的PC進(jìn)棧,中斷服務(wù)入口地址送PC撤除中斷標(biāo)志RETI中斷返回,斷點(diǎn)出棧送PC中斷請(qǐng)求中斷響應(yīng)中斷服務(wù)中斷返回中斷服務(wù)中斷服務(wù)程序按規(guī)定的中斷矢量地址存入,由于五個(gè)中斷矢量地址0003H、000BH、0013H、001BH、0023H之間相距很近,往往裝不下一個(gè)中斷服務(wù)程序,通常將中斷服務(wù)程序安排在程序存貯器的其他地址空間,而在矢量地址的單元中安排一條轉(zhuǎn)移指令。

三、應(yīng)用實(shí)例:中斷程序的設(shè)計(jì)

例1.在下圖中P1.4~P1.7接有四個(gè)發(fā)光二極管,P1.0~P1.3接四個(gè)開(kāi)關(guān),消抖電路產(chǎn)生中斷請(qǐng)求信號(hào),當(dāng)消抖電路的開(kāi)關(guān)來(lái)回拔動(dòng)一次產(chǎn)生一個(gè)下降沿信號(hào),通過(guò)INT0向CPU申請(qǐng)中斷。

要求:初時(shí)發(fā)光二極管全滅,每中斷一次,P1.0~P1.3所接的開(kāi)關(guān)狀態(tài)反映到發(fā)光二極管上,且要求開(kāi)關(guān)斷開(kāi)的對(duì)應(yīng)發(fā)光二極管亮

程序:ORG0000HAJMPMAINORG0003H;INT0中斷入口

AJMPSER1;轉(zhuǎn)中斷服務(wù)程序

ORG0030H;主程序

MAIN:MOVP1,#0FH;高4位燈滅,低四位輸入寫1SETBIT0;邊沿觸發(fā)中斷

SETBEX0;允許外中斷0中斷

SETBEA;開(kāi)中斷開(kāi)關(guān)

SJMP$;等待中斷ORG0050H

SER1:MOVP1,#0FH;P1先寫入“1”且燈滅

MOVA,P1;輸入開(kāi)關(guān)狀態(tài)換到高4位

SWAPA;低4位開(kāi)關(guān)狀態(tài)電平

MOVP1,A;輸出到P1高4位

RETIEND中斷服務(wù)例2.AT89S51的P1口接一個(gè)共陰極的數(shù)碼管,利用消抖開(kāi)關(guān)產(chǎn)生中斷請(qǐng)求信號(hào),每來(lái)回拔動(dòng)一次開(kāi)關(guān),產(chǎn)生一次中斷,用數(shù)碼管顯示中斷的次數(shù)(最多15次,十六進(jìn)制數(shù)顯示)?!罰1.189S51P1.0P1.2P1.4P1.3P1.5P1.6&&1K2INT1驅(qū)動(dòng)器+5VagEAORG0000HAJMPMAINORG0013H;INT1中斷入口

AJMPINT1;轉(zhuǎn)中斷服務(wù)程序

ORG0030H;主程序MAIN:SETBIT1;邊沿觸發(fā)中斷

SETBEX1;允許INT1中斷

SETBEA;開(kāi)中斷開(kāi)關(guān)

MOVR0,#0;計(jì)數(shù)初值為0MOVA,#3FH;“0”的字形碼送AAL1:MOVP1,A;顯示數(shù)碼AL2:CJNER0,#0FH,AL1;沒(méi)滿15次循環(huán)顯示

MOVR7,#0FFH;滿15次,顯‘F’

DJNZR7,$

MOVP1,#0;關(guān)顯示

CLREA;關(guān)中斷

SJMP$;結(jié)束INT1:INCR0;中斷次數(shù)加1MOVA,R0MOVDPTR,#TAB;DPTR指向字形碼表首址

MOVCA,@A+DPTR;查表

POPDPHPOPDPL;彈出斷點(diǎn)

MOVDPTR,#AL1PUSHDPLPUSHDPH;修改中斷返回點(diǎn),AL1壓入堆棧

RETI;AL1地址→PC,返主程序AL處

TAB:DB3FH,06H,5BH,4FH,66H,6DHDB7DH,07H,7FH,6FH,77H,7CHDB39H,5EH,79H,71H;字形碼表

END

上面程序每中斷一次,執(zhí)行一次中斷服務(wù)程序INT1。在中斷服務(wù)程序中,累計(jì)中斷次數(shù)并查字形表,返回到主程序AL1地址執(zhí)行顯示。

將上面程序重排在同一頁(yè):ORG0000HAJMPMAINORG0013HAJMPINT1ORG0030HMAIN:SETBIT1SETBEX1SETBEAMOVR0,#0MOVA,#3FHAL1:MOVP1,AAL2:CJNER0,#0FH,AL1MOVR7,#0FFHDJNZR7,$

MOVP1,#0CLREASJMP$

INT1:INCR0MOVA,R0MOVDPTR,#TABMOVCA,@A+DPTRPOPDPHPOPDPLMOVDPTR,#AL1PUSHDPLPUSHDPHRETI;AL1地址→PCTAB:DB3FH,06H,5BH,…

END

以上中斷在AL1或AL2兩指令處發(fā)生,究竟是哪一指令處中斷是隨機(jī)的,為保證返回到AL1顯示‘F’

,這里采用修改中斷返回點(diǎn)的辦法,即先從棧中彈出中斷響應(yīng)時(shí)壓入的斷點(diǎn)彈到DPTR中,修改DPTR為用戶需要的返回點(diǎn),并將其壓入堆棧,再通過(guò)執(zhí)行RETI指令彈出棧中內(nèi)容到PC、彈出的即為修改后的地址,從而返回到主程序中所希望的地址執(zhí)行。

上例中中斷次數(shù)在主程序判斷,目的是了解修改中斷返回點(diǎn)的方法,如果改在中斷服務(wù)程序中判斷,編程簡(jiǎn)潔些,下面僅介紹和上例中的不同部分的程序。

MOVR0,#0;計(jì)數(shù)初值為0MOVP1,#3FH;顯示‘0’

MOVDPTR,#TAB;指向字形碼表AGA:SJMP$;等待中斷INT1:INCR0;中斷次數(shù)加1MOVA,R0MOVCA,@A+DPTR;查字形碼表

MOVP1,A;顯示

CJNER0,#0FH,RE;15次中斷未到轉(zhuǎn)RECLREA;15次到關(guān)中斷

RE:RETI;返回主程序的AGA處

TAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB7FH,6FH,77H,7CH,39H,5EH,79H,71HC51使用戶能編寫高效的中斷服務(wù)程序,編譯器在規(guī)定的中斷源的矢量地址中放入無(wú)條件轉(zhuǎn)移指令,使CPU響應(yīng)中斷后自動(dòng)地從矢量地址跳轉(zhuǎn)到中斷服務(wù)程序的實(shí)際地址,而無(wú)需用戶去安排。中斷服務(wù)程序定義為函數(shù),函數(shù)的完整定義如下。

其中interruptn表示將函數(shù)聲明為中斷服務(wù)函數(shù),n為中斷源編號(hào),可以是0~31間的整數(shù),編譯器從8n+3處產(chǎn)生中斷向量地址。不允許是帶運(yùn)算符的表達(dá)式,n通常取以下值:返回值函數(shù)名([參數(shù)])interruptn[usingm]C51中斷程序的設(shè)計(jì)

0外部中斷0;

1定時(shí)器/計(jì)數(shù)器0溢出中斷

2外部中斷1;

3定時(shí)器/計(jì)數(shù)器1溢出中斷

4串行口發(fā)送與接收中斷

Usingm定義函數(shù)使用的工作寄存器組,m的取值范圍為0~3,可缺省,它對(duì)目標(biāo)代碼的影響是:函數(shù)入口處將當(dāng)前寄存器保存,使用m指定的寄存器組,函數(shù)退出時(shí)原寄存器組恢復(fù)。選不同的工作寄存器組,可方便實(shí)現(xiàn)寄存器組的現(xiàn)場(chǎng)保護(hù)。

再入:屬性關(guān)鍵字reentrant將函數(shù)定義為再入的,在C51中,普通函數(shù)(非再入的)不能遞歸調(diào)用,只有再入函數(shù)才可被遞歸調(diào)用。中斷服務(wù)函數(shù)不允許用于外部函數(shù),它對(duì)目標(biāo)代碼影響如下:①當(dāng)調(diào)用函數(shù)時(shí),SFR中的ACC、B、DPH、DPL和PSW(當(dāng)需要時(shí)入棧)。②如果不使用寄存器組切換,中斷函數(shù)所需的所有工作寄存器Rn都入棧。③函數(shù)退出前,所有工作寄存器出棧。④函數(shù)由“RETI”指令終止。

例1:C語(yǔ)言編程#include<reg51.h>int0()interrupt0/*INT0中斷函數(shù)*/{P1=0x0f;/*輸入端先置1,燈滅*/P1<<=4;/*讀入開(kāi)關(guān)狀態(tài),并左移四位,}使開(kāi)關(guān)反映在發(fā)光二極管上*/main(){

EA=1;/*開(kāi)中斷總開(kāi)關(guān)*/EX0=1;/*允許INT0中斷*/IT0=1;/*下降沿產(chǎn)生中斷*/while(1);/*等待中斷*/

主函數(shù)執(zhí)行while(1);語(yǔ)句進(jìn)入死循環(huán)等待中斷,當(dāng)撥動(dòng)INT0的開(kāi)關(guān)后,進(jìn)入中斷函數(shù),讀入P1.0~P1.3的開(kāi)關(guān)狀態(tài)并將狀態(tài)數(shù)據(jù)右移四位到P1.4~P1.7的位置上輸出控制LED亮,執(zhí)行完中斷,返回到等待中斷的while(1)語(yǔ)句,等待下一次的中斷。

法1:在主程序中控制中斷次數(shù)

#include<reg51.h>chari;codechartab[16]={0x3f,0x06,0x5b,0x4F,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};int1()interrupt2{i++;/*計(jì)中斷次數(shù)*/P1=tab[i];/*查表,次數(shù)送顯示*/

例2:用C語(yǔ)言編程,可有兩種編程方法。

main()

EA=1;EX1=1;IT1=1;ap5:P1=0x3f;/*顯示“0”*/for(i=0;i<16;);/*當(dāng)I<16等待中斷*/gotoap5;/*當(dāng)i=16重復(fù)下一輪16次中*/

法二:在中斷服務(wù)程序中控制中斷次數(shù)#include<reg51·h>chari;codechartab[16]={0x3f,0x06,0x5b,0x4F0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};int()interrupt2{

i++if(i<16)P1=tab[i];

else{i=0;P1=0x3f;}}

main(){

EA=1;EX1=1;IT1=1;P1=0x3f;

while(1);/*等待中斷*/

}四、

外部設(shè)備中斷的接入

在前面的示例中,中斷信號(hào)是按鍵動(dòng)作模擬產(chǎn)生的,如果是某事件或某設(shè)備產(chǎn)生,將該事件或該設(shè)備轉(zhuǎn)變成低電平或脈沖下降沿引入INT中斷請(qǐng)求端即可,圖5-5和圖5-6是采用中斷方式輸入、輸出的接口,圖中省去了應(yīng)答信號(hào)。如果外設(shè)需要應(yīng)答信號(hào),可由并行口設(shè)定。8XX51

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論