單片機(jī)中斷系統(tǒng)(與“中斷”有關(guān)的共53張)_第1頁
單片機(jī)中斷系統(tǒng)(與“中斷”有關(guān)的共53張)_第2頁
單片機(jī)中斷系統(tǒng)(與“中斷”有關(guān)的共53張)_第3頁
單片機(jī)中斷系統(tǒng)(與“中斷”有關(guān)的共53張)_第4頁
單片機(jī)中斷系統(tǒng)(與“中斷”有關(guān)的共53張)_第5頁
已閱讀5頁,還剩47頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第章單片機(jī)中斷系統(tǒng)第一頁,共53頁。5.1中斷的概念5.2STC15F2K60S2單片機(jī)的中斷系統(tǒng)結(jié)構(gòu)5.3中斷允許及其優(yōu)先級管理5.4單片機(jī)中斷處理過程5.5中斷的應(yīng)用舉例第二頁,共53頁。5.1中斷的概念

在單片機(jī)應(yīng)用系統(tǒng)中,中斷技術(shù)主要用于實(shí)時(shí)監(jiān)測與控制,能對外界發(fā)生的事件進(jìn)行及時(shí)的處理。中斷系統(tǒng)是為使CPU具有對外界緊急事件的處理能力而設(shè)置的。當(dāng)中央處理器CPU正在處理某件事的時(shí)候外界發(fā)生了緊急的事件請求,要求CPU暫停當(dāng)前的工作,轉(zhuǎn)而去處理這個(gè)緊急事件,處理完以后,再回到原來被中斷的地方(斷點(diǎn)),繼續(xù)原來的工作,這樣的過程稱為中斷。實(shí)現(xiàn)這種功能的部件稱為中斷系統(tǒng),請求CPU中斷的請求源稱為中斷源。

第三頁,共53頁。

單片機(jī)的中斷系統(tǒng)有多個(gè)中斷源,當(dāng)幾個(gè)中斷源同時(shí)向CPU請求中斷時(shí),系統(tǒng)會(huì)根據(jù)其優(yōu)先級來處理,即先響應(yīng)中斷優(yōu)先級高的中斷源,再響應(yīng)優(yōu)先級低的中斷源。例如,若規(guī)定按鍵掃描處理優(yōu)先于顯示器輸出處理,則CPU在處理顯示內(nèi)容的過程中,可以被按鍵的動(dòng)作打斷,轉(zhuǎn)而處理鍵盤掃描問題,待掃描結(jié)束后再繼續(xù)進(jìn)行顯示器處理過程。第四頁,共53頁。圖5-1中斷響應(yīng)和處理過程第五頁,共53頁。5.2STC15F2K60S2單片機(jī)的中斷系統(tǒng)結(jié)構(gòu)中斷源

STC15F2K60S2單片機(jī)中斷系統(tǒng)共有14個(gè)中斷源,分別為外部中斷0(INT0)、定時(shí)器T0中斷、外部中斷1(INT1)、定時(shí)器T1中斷、串口1中斷、A/D轉(zhuǎn)換中斷、低壓檢測中斷(LVD)、CCP/PWM/PCA中斷、串口2中斷、SPI中斷、外部中斷2()、外部中斷3()、定時(shí)器T2中斷、外部中斷4()。除外部中斷2()、外部中斷3()、定時(shí)器T2中斷、外部中斷4()等4個(gè)中斷源固定為最低優(yōu)先級中斷外,其它的中斷源都具有2個(gè)中斷優(yōu)先級,可實(shí)現(xiàn)2級中斷服務(wù)程序嵌套。

第六頁,共53頁。STC15F2K60S2單片機(jī)中斷系統(tǒng)結(jié)構(gòu)示意圖如圖5-2所示。這些中斷源與特殊功能寄存器TCON、SCON、S2CON、CCON、PCON、ADC_CONTR、IE、IE2、INT_CLKO、IP等有關(guān),下面首先介紹與中斷源有關(guān)的寄存器功能。第七頁,共53頁。STC15F2K60S2單片機(jī)中斷系統(tǒng)結(jié)構(gòu)示意圖

第八頁,共53頁。中斷源標(biāo)志寄存器

1.TCON寄存器

TCON寄存器為定時(shí)/計(jì)數(shù)器T0、T1的控制寄存器,該寄存器包括了T0和T1的溢出中斷請求標(biāo)志位TF0和TF1,也包括了外部中斷0(INT0)和外部中斷1(INT1)的中斷請求標(biāo)志位IE0和IE1,以及外部中斷0和外部中斷1的中斷源的觸發(fā)方式。TCON寄存器的字節(jié)地址為88H,可位尋址,其格式如下:第九頁,共53頁。TF1:定時(shí)/計(jì)數(shù)器T1的溢出中斷標(biāo)志位。當(dāng)啟動(dòng)T1計(jì)數(shù)后,從初值開始計(jì)數(shù),當(dāng)產(chǎn)生溢出后由硬件將TF1置1,向CPU請求中斷,一直保持到CPU響應(yīng)中斷時(shí),才由硬件清0,TF1也可由軟件清0。TR1:定時(shí)/計(jì)數(shù)器T1的運(yùn)行控制位。當(dāng)TR1為1時(shí)運(yùn)行,為0時(shí)停止運(yùn)行。TF0:定時(shí)/計(jì)數(shù)器T0溢出中斷標(biāo)志。其功能與TF1類似。TR0:定時(shí)/計(jì)數(shù)器T0的運(yùn)行控制位。其功能與TR1類似。第十頁,共53頁。IE1:外部中斷1請求源(INT1/P3.3)標(biāo)志位。IE1為1時(shí),外部中斷1向CPU請求中斷,當(dāng)CPU響應(yīng)該中斷時(shí)由硬件將IE1清0。IT1:外部中斷1中斷觸發(fā)方式選擇位,當(dāng)IT1為0時(shí),INT1/P3.3引腳上的上升沿或下降沿均可觸發(fā)外部中斷1。IT1為1時(shí),為下降沿觸發(fā)方式。IE0:外部中斷0請求源(INT0/P3.2)標(biāo)志位。與IE1功能類似。IT0:外部中斷0中斷觸發(fā)方式選擇位,功能與IT1類似。第十一頁,共53頁。

2.SCON和S2CON寄存器

SCON為串行口1控制寄存器,包括了串行口發(fā)送和接收中斷的請求標(biāo)志位TI和RI。SCON寄存器的字節(jié)地址為98H,可位尋址,其格式如下:

第十二頁,共53頁。RI:串行口1接收中斷標(biāo)志。若串行口1允許接收且以方式0工作,則每當(dāng)接收到第8位數(shù)據(jù)時(shí)置1;若以方式1、方式2或方式3工作且SM2=0時(shí),則每當(dāng)接收到停止位的中間時(shí)置1;當(dāng)串行口以方式2或方式3工作且SM2=1時(shí),則僅當(dāng)接收到的第9位數(shù)據(jù)RB8為1后,同時(shí)還要接收到停止位的中間時(shí)置1。RI為1表示接收器已接收到一幀數(shù)據(jù),串行口1正向CPU申請中斷(接收中斷),RI必須由用戶的中斷服務(wù)程序清0。第十三頁,共53頁。TI:串行口1發(fā)送中斷標(biāo)志。串行口1以方式0發(fā)送時(shí),每當(dāng)發(fā)送完8位數(shù)據(jù),由硬件置1;若以方式1、方式2或方式3發(fā)送時(shí),在發(fā)送停止位的開始時(shí)置1。TI為1表示串行口已發(fā)送一幀數(shù)據(jù),串行口1正在向CPU申請中斷(發(fā)送中斷)。值得注意的是,CPU響應(yīng)發(fā)送中斷請求,轉(zhuǎn)向執(zhí)行中斷服務(wù)程序時(shí)并不將TI清0,TI必須由用戶在中斷服務(wù)程序中清0。

SCON寄存器的其他位與中斷無關(guān),將在后續(xù)相關(guān)章節(jié)介紹。第十四頁,共53頁。

S2CON為串行口2控制寄存器,字節(jié)地址為9AH,S2CON中各位功能與串口1控制寄存器SCON類似,其中S2TI和S2RI為串口2的發(fā)送和接收中斷標(biāo)志位。S2RI:串行口2接收中斷標(biāo)志。若串行口2允許接收且以方式0工作,則每當(dāng)接收到第8位數(shù)據(jù)時(shí)置1;若以方式1、方式2或方式3工作且SM2=0時(shí),則每當(dāng)接收到停止位的中間時(shí)置1;當(dāng)串行口2以方式2或方式3工作且S2SM2=1時(shí),則僅當(dāng)接收到的第9位數(shù)據(jù)S2RB8為1后,同時(shí)還要接收到停止位的中間時(shí)置1。S2RI為1表示串行口2已接收到一幀數(shù)據(jù),正向CPU申請中斷(接收中斷),S2RI必須由用戶的中斷服務(wù)程序清0。第十五頁,共53頁。S2TI:串行口2發(fā)送中斷標(biāo)志。串行口2以方式0發(fā)送時(shí),每當(dāng)發(fā)送完8位數(shù)據(jù),由硬件置1;若以方式1、方式2或方式3發(fā)送時(shí),在發(fā)送停止位的開始時(shí)置1。S2TI=1表示串行口2已發(fā)送完一幀數(shù)據(jù),正在向CPU申請中斷(發(fā)送中斷)。值得注意的是,CPU響應(yīng)發(fā)送中斷請求,轉(zhuǎn)向執(zhí)行中斷服務(wù)程序時(shí)并不將S2TI清0,S2TI必須由用戶在中斷服務(wù)程序中清0。

第十六頁,共53頁。

3.ADC_CONTR寄存器

ADC_CONTR為A/D轉(zhuǎn)換控制寄存器,字節(jié)地址為BCH,ADC_POWER:ADC電源控制位。當(dāng)ADC_POWER為0時(shí),關(guān)閉ADC電源;當(dāng)ADC_POWER為1時(shí),打開ADC電源。ADC_FLAG:ADC轉(zhuǎn)換結(jié)束標(biāo)志位,可用于請求A/D轉(zhuǎn)換的中斷。當(dāng)A/D轉(zhuǎn)換完成后ADC_FLAG置1,要用軟件清0。不管是A/D轉(zhuǎn)換完成后由該位申請產(chǎn)生中斷,還是由軟件查詢該標(biāo)志位A/D轉(zhuǎn)換是否結(jié)束,當(dāng)A/D轉(zhuǎn)換完成后,ADC_FLAG為1,一定要軟件清0。ADC_START:ADC轉(zhuǎn)換啟動(dòng)控制位,設(shè)置為1時(shí),開始轉(zhuǎn)換,轉(zhuǎn)換結(jié)束后為0。

A/D轉(zhuǎn)換控制寄ADC_CONTR中的其他位與中斷無關(guān),將在后續(xù)相關(guān)章節(jié)介紹。第十七頁,共53頁。4.PCON寄存器

PCON為電源控制寄存器,與低壓檢測中斷有關(guān),PCON格式如下:第十八頁,共53頁。LVDF:低壓檢測標(biāo)志位,同時(shí)也是低壓檢測中斷請求標(biāo)志位。在正常工作和空閑工作狀態(tài)時(shí),如果內(nèi)部工作電壓VCC低于低壓檢測門檻電壓,該位自動(dòng)置1,與低壓檢測中斷是否被允許無關(guān)。即在內(nèi)部工作電壓VCC低于低壓檢測門檻電壓時(shí),不管有沒有允許低壓檢測中斷,該位都自動(dòng)為1。該位要用軟件清0,清0后,如內(nèi)部工作電壓VCC繼續(xù)低于低壓檢測門檻電壓,該位又被自動(dòng)設(shè)置為1。在進(jìn)入掉電工作狀態(tài)前,如果低壓檢測電路未被允許可產(chǎn)生中斷,則在進(jìn)入掉電模式后,該低壓檢測電路不工作以降低功耗。如果被允許可產(chǎn)生低壓檢測中斷,則在進(jìn)入掉電模式后,該低壓檢測電路繼續(xù)工作,在內(nèi)部工作電壓VCC低于低壓檢測門檻電壓后,產(chǎn)生低壓檢測中斷,可將MCU從掉電狀態(tài)喚醒。第十九頁,共53頁。

5.CCON寄存器

CCON寄存器是可編程計(jì)數(shù)器陣列(PCA)模塊控制寄存器,地址為D8H,可位尋址。CCON寄存器格式如下:CF:PCA計(jì)數(shù)器陣列溢出標(biāo)志位。當(dāng)PCA計(jì)數(shù)器溢出時(shí),CF由硬件置1。如果CMOD寄存器的ECF位置1,則CF標(biāo)志可用來產(chǎn)生中斷。CF位可通過硬件或軟件置1,但只可通過軟件清0。CR:PCA計(jì)數(shù)器陣列運(yùn)行控制位。該位為1時(shí),啟動(dòng)PCA計(jì)數(shù)器陣列計(jì)數(shù);該位為0時(shí),關(guān)閉PCA計(jì)數(shù)器。CCF2:PCA模塊2中斷標(biāo)志。當(dāng)出現(xiàn)匹配或捕獲時(shí)該位由硬件置1。該位必須通過軟件清0。CCF1:PCA模塊1中斷標(biāo)志。與CCF2功能類似。CCF0:PCA模塊0中斷標(biāo)志。與CCF2功能類似。第二十頁,共53頁。6.SPSTAT寄存器

SPSTAT寄存器是SPI狀態(tài)寄存器,地址為CDH。SPIF:SPI傳輸完成標(biāo)志。當(dāng)一次串行傳輸完成時(shí),SPIF置1,此時(shí),如果SPI中斷被打開(ESPI=1,EA=1),則產(chǎn)生中斷。當(dāng)SPI處于主模式且SSIG=0時(shí),如果為輸入并被驅(qū)動(dòng)為低電平,SPIF也將置1,表示“模式改變”。SPIF標(biāo)志通過軟件向其寫入1而清0。WCOL:SPI寫沖突標(biāo)志。在數(shù)據(jù)傳輸?shù)倪^程中如果對SPI數(shù)據(jù)寄存器SPDAT執(zhí)行寫操作,WCOL將置1,WCOL標(biāo)志通過軟件向其寫入1而清0。第二十一頁,共53頁。使用單片機(jī)的外部中斷0和外部中斷1,當(dāng)外部中斷0發(fā)出中斷請求后點(diǎn)亮藍(lán)色LED燈,當(dāng)外部中斷1發(fā)出中斷請求后點(diǎn)亮黃色LED燈。如果在信號同時(shí)到達(dá)的條件下,需要指定那個(gè)LED燈先亮,如何實(shí)現(xiàn)?如果兩個(gè)中斷的請求信號同時(shí)到達(dá)單片機(jī),哪個(gè)LED燈先點(diǎn)亮?第二十二頁,共53頁。5.3中斷允許及其優(yōu)先級管理STC15F2K60S2單片機(jī)的中斷允許控制及優(yōu)先級控制分別由中斷允許寄存器IE、IE2、INT_CLKO(AUXR2)以及中斷優(yōu)先級控制寄存器IP、IP2等控制。中斷允許寄存器

STC15F2K60S2單片機(jī)中的各中斷源是否開放或禁止,是由內(nèi)部的中斷允許寄存器IE、IE2、INT_CLKO控制。中斷采用兩級控制方式,即總中斷和各中斷源分別獨(dú)立控制。第二十三頁,共53頁。EA:CPU的總中斷允許控制位,EA=1,CPU開放總中斷,EA=0,CPU屏蔽所有的中斷申請。EA的作用是使中斷允許形成兩級控制。即各中斷源首先受EA控制;其次還受各中斷源自己的中斷允許控制位控制。ELVD:低壓檢測中斷允許位。ELVD=1,允許低壓檢測中斷;ELVD=0,禁止低壓檢測中斷。EADC:A/D轉(zhuǎn)換中斷允許位。EADC=1,允許A/D轉(zhuǎn)換中斷;EADC=0,禁止A/D轉(zhuǎn)換中斷。1.IE寄存器

IE寄存器主要負(fù)責(zé)總中斷允許控制和外部中斷0、外部中斷1、定時(shí)器T0、定時(shí)器T1、串口1、A/D轉(zhuǎn)換、低壓檢測等中斷源中斷允許控制,IE的字節(jié)地址為A8H,可位尋址。第二十四頁,共53頁。ES:串行口1中斷允許位。ES=1,允許串行口1中斷;ES=0,禁止串行口1中斷。ET1:定時(shí)/計(jì)數(shù)器T1的溢出中斷允許位。ET1=1,允許T1中斷;ET1=0,禁止T1中斷。EX1:外部中斷1中斷允許位。EX1=1,允許外部中斷1中斷;EX1=0,禁止外部中斷1中斷。ET0:定時(shí)/計(jì)數(shù)器T0的溢出中斷允許位。ET0=1,允許T0中斷;ET0=0禁止T0中斷。EX0:外部中斷0中斷允許位。EX0=1,允許外部中斷0中斷;EX0=0禁止外部中斷0中斷。第二十五頁,共53頁。ET2:定時(shí)器T2中斷允許位。ET2=1時(shí),允許T2中斷;ET2=0,禁止T2中斷。ESPI:SPI中斷允許位。ESPI=1,允許SPI中斷;SPI=0,禁止SPI中斷。ES2:串行口2中斷允許位。ES2=1,允許串行口2中斷;ES2=0,禁止串行口2中斷。

STC15F2K60S2單片機(jī)復(fù)位以后,IE和IE2被清0,所有的中斷被禁止。若要開放某些中斷源,則可通過程序把IE和IE2中的相應(yīng)控制位置1,同時(shí)還必須把總中斷EA置1。

2.IE2寄存器

IE2寄存器主要負(fù)責(zé)定時(shí)器T2、SPI和串口2等中斷源的中斷允許控制,地址為AFH。其格式如下:第二十六頁,共53頁。EX4:外部中斷4()中斷允許位,EX4=1時(shí)允許外部中斷4中斷,EX4=0時(shí),禁止外部中斷4中斷,外部中斷4只能下沿觸發(fā)。EX3:外部中斷3()中斷允許位,EX3=1時(shí)允許外部中斷3中斷,EX3=0時(shí),禁止外部中斷3中斷,外部中斷3只能下沿觸發(fā)。EX2:外部中斷2()中斷允許位,EX2=1時(shí)允許外部中斷2中斷,EX2=0時(shí),禁止外部中斷2中斷,外部中斷2只能下沿觸發(fā)。

T2CLKO、T1CLKO、T0CLKO是時(shí)鐘輸出控制位,與中斷無關(guān),將在后續(xù)章節(jié)中介紹。

3.INT_CLKO寄存器

INT_CLKO(AUXR2)為外部中斷2、外部中斷3、外部中斷4中斷允許和時(shí)鐘輸出控制寄存器,地址為8FH。其格式如下:第二十七頁,共53頁。中斷優(yōu)先級管理寄存器

STC15F2K60S2單片機(jī)中除了外部中斷2()、外部中斷3()、外部中斷4()、定時(shí)器T2中斷等4個(gè)中斷源固定為最低優(yōu)先級中斷外,其它中斷源(外部中斷0、定時(shí)器T0中斷、外部中斷1、定時(shí)器T1中斷、串口1中斷、A/D轉(zhuǎn)換中斷、低壓檢測中斷(LVD)、CCP/PWM/PCA中斷、串口2中斷、SPI中斷等)都具有兩個(gè)中斷優(yōu)先級,即高優(yōu)先級和低優(yōu)先級,可實(shí)現(xiàn)兩級中斷服務(wù)程序嵌套。中斷源的優(yōu)先級由特殊功能寄存器IP和IP2中相應(yīng)的位進(jìn)行設(shè)置。下面分別介紹這兩個(gè)優(yōu)先級管理寄存器。第二十八頁,共53頁。PPCA:PCA中斷優(yōu)先級控制位。

PPCA=0時(shí),PCA中斷為低優(yōu)先級中斷(優(yōu)先級0);

PPCA=1時(shí),PCA中斷為高優(yōu)先級中斷(優(yōu)先級1)。PLVD:低壓檢測中斷優(yōu)先級控制位。

PLVD=0時(shí),低壓檢測中斷為低優(yōu)先級中斷(優(yōu)先級0);

PLVD=1時(shí),低壓檢測中斷為高優(yōu)先級中斷(優(yōu)先級1)。PADC:A/D轉(zhuǎn)換中斷優(yōu)先級控制位。

PADC=0時(shí),A/D轉(zhuǎn)換中斷為低優(yōu)先級中斷(優(yōu)先級0);

PADC=1時(shí),A/D轉(zhuǎn)換中斷為高優(yōu)先級中斷(優(yōu)先級1)。PS:串口1中斷優(yōu)先級控制位。

PS=0時(shí),串口1中斷為低優(yōu)先級中斷(優(yōu)先級0);

PS=1時(shí),串口1中斷為高優(yōu)先級中斷(優(yōu)先級1)。1.IP寄存器IP為中斷優(yōu)先級控制寄存器,地址為B8H,可位尋址。第二十九頁,共53頁。PT1:定時(shí)器1中斷優(yōu)先級控制位。

PT1=0時(shí),定時(shí)器1中斷為低優(yōu)先級中斷(優(yōu)先級0);

PT1=1時(shí),定時(shí)器1中斷為高優(yōu)先級中斷(優(yōu)先級1)。PX1:外部中斷1優(yōu)先級控制位。

PX1=0時(shí),外部中斷1為低優(yōu)先級中斷(優(yōu)先級0);

PX1=1時(shí),外部中斷1為高優(yōu)先級中斷(優(yōu)先級1)。PT0:定時(shí)器0中斷優(yōu)先級控制位。

PT0=0時(shí),定時(shí)器0中斷為低優(yōu)先級中斷(優(yōu)先級0);

PT0=1時(shí),定時(shí)器0中斷為高優(yōu)先級中斷(優(yōu)先級1)。PX0:外部中斷0優(yōu)先級控制位。

PX0=0時(shí),外部中斷0為低優(yōu)先級中斷(優(yōu)先級0);

PX0=1時(shí),外部中斷0為高優(yōu)先級中斷(優(yōu)先級1)。第三十頁,共53頁。PSPI:SPI中斷優(yōu)先級控制位。

PSPI=0時(shí),SPI中斷為低優(yōu)先級中斷(優(yōu)先級0);

PSPI=1時(shí),SPI中斷為高優(yōu)先級中斷(優(yōu)先級1)。PS2:串口2中斷優(yōu)先級控制位。

PS2=0時(shí),串口2中斷為低優(yōu)先級中斷(優(yōu)先級0);

PS2=1時(shí),串口2中斷為高優(yōu)先級中斷(優(yōu)先級1)。

2.IP2寄存器

IP2為中斷優(yōu)先級控制寄存器,主要對串行口2、SPI中斷源的中斷優(yōu)先級設(shè)置,地址為B5H。其格式如下:第三十一頁,共53頁。

中斷優(yōu)先級控制寄存器IP、IP2的各位都可由用戶程序置1和清0。但I(xiàn)P寄存器可位操作,所以可用位操作指令或字節(jié)操作指令更新IP的內(nèi)容。而IP2寄存器的內(nèi)容只能用字節(jié)操作指令來更新。STC15F2K60S2單片機(jī)復(fù)位后IP、IP2均為00H,各個(gè)中斷源均為低優(yōu)先級中斷。

STC15F2K60S2單片機(jī)高優(yōu)先級的中斷請求可以打斷低優(yōu)先級的中斷,反之,低優(yōu)先級的中斷請求不可以打斷高優(yōu)先級及相同優(yōu)先級的中斷。當(dāng)兩個(gè)相同優(yōu)先級的中斷同時(shí)產(chǎn)生時(shí),將由查詢次序來決定系統(tǒng)響應(yīng)哪個(gè)中斷。STC15F2K60S2單片機(jī)的各個(gè)中斷的向量地址、查詢次序、優(yōu)先級、請求標(biāo)志及中斷允許位如表5-1所示。第三十二頁,共53頁。表5-1STC15F2K60S2單片機(jī)中斷向量地址/優(yōu)先級/請求標(biāo)志/允許位第三十三頁,共53頁。

當(dāng)單片機(jī)系統(tǒng)中有多個(gè)中斷源同時(shí)向CPU請求中斷時(shí),CPU在響應(yīng)中斷源的中斷請求時(shí),必須遵循以下基本原則:

(1)不同優(yōu)先級中斷源同時(shí)申請中斷時(shí),先高后低。當(dāng)多個(gè)中斷源同時(shí)發(fā)出中斷請求時(shí),優(yōu)先級高的中斷將首先被響應(yīng),只有優(yōu)先級高的中斷服務(wù)程序執(zhí)行完畢后,才能響應(yīng)低優(yōu)先級的中斷。

(2)同一優(yōu)先級的多個(gè)中斷源同時(shí)申請中斷時(shí),CPU則按自然優(yōu)先級從高到低依次響應(yīng)。其自然優(yōu)先級順序如下:(3)一個(gè)正在執(zhí)行的低優(yōu)先級可被高優(yōu)先級中斷請求所中斷,待高優(yōu)先級中斷處理完畢后再返回低優(yōu)先級中斷,實(shí)現(xiàn)中斷的嵌套。而高優(yōu)先級中斷不能被低優(yōu)先級中斷所中斷。第三十四頁,共53頁。5.4單片機(jī)中斷處理過程中斷的響應(yīng)條件當(dāng)中斷源向CPU發(fā)出中斷請求時(shí),如果中斷的條件滿足,CPU將進(jìn)入中斷響應(yīng)周期,STC15F2K60S2單片機(jī)響應(yīng)中斷的條件:(1)中斷源有請求,相應(yīng)的中斷標(biāo)志位為1;(2)CPU開放總中斷(EA=1);(3)中斷允許寄存器相應(yīng)的中斷允許位置1;(4)無同級或高級中斷正在處理。滿足以上條件,CPU一般會(huì)響應(yīng)中斷。單片機(jī)CPU在每個(gè)指令周期的最后一個(gè)時(shí)鐘周期按優(yōu)先順序查詢各中斷標(biāo)志,如果查到某個(gè)中斷標(biāo)志為1,將在下一個(gè)指令周期按優(yōu)先級的高低順序進(jìn)行處理。第三十五頁,共53頁。

在程序運(yùn)行過程中,并不是任何時(shí)刻都可以響應(yīng)中斷,如出現(xiàn)下面情況之一時(shí),單片機(jī)不響應(yīng)中斷請求。

(1)CPU正在處理同級或高優(yōu)先級中斷;(2)正在執(zhí)行的指令尚未執(zhí)行完畢,即當(dāng)前指令不能執(zhí)行一半就響應(yīng)中斷;(3)正在執(zhí)行的指令是中斷返回指令RETI或是訪問專用寄存器IE或IP的指令時(shí),必須在執(zhí)行完該指令后還要再執(zhí)行一條指令才能響應(yīng)中斷。第三十六頁,共53頁。中斷的處理過程

1.中斷響應(yīng)(1)將相應(yīng)的優(yōu)先級狀態(tài)觸發(fā)器置1(阻斷其他同級或低級的中斷請求)。(2)執(zhí)行一條硬件LCALL指令,即程序計(jì)數(shù)器PC的值壓入堆棧保存,再將中斷服務(wù)子程序的入口地址送入PC。

2.中斷處理執(zhí)行相應(yīng)的中斷服務(wù)程序。

3.中斷返回執(zhí)行完中斷服務(wù)程序后,把中斷響應(yīng)時(shí)入堆棧保存的斷點(diǎn)地址從堆棧棧頂彈出送回PC,CPU返回原來的斷點(diǎn)繼續(xù)往下執(zhí)行程序。第三十七頁,共53頁。中斷請求的撤除

STC15F2K60S2單片機(jī)的14個(gè)中斷源中有的中斷標(biāo)志可以由硬件自動(dòng)撤消,有的必須由軟件清除。中斷源向CPU發(fā)出中斷請求后,中斷請求信號分別鎖存在TCON、SCON、S2CON、ADC_CONTR、CCON、PCON、SPSTAT等特殊功能寄存器中。當(dāng)某個(gè)中斷源的請求被CPU響應(yīng)后,應(yīng)將相應(yīng)的中斷請求標(biāo)志位及時(shí)清除,否則CPU會(huì)再一次響應(yīng)該中斷。硬件自動(dòng)清除中斷標(biāo)志位:外部中斷0、外部中斷1、外部中斷2、外部中斷3、外部中斷4、定時(shí)器T0、定時(shí)器T1、定時(shí)器T2的中斷請求標(biāo)志位在響應(yīng)中斷后,硬件會(huì)自動(dòng)清0,用戶無須關(guān)心。需軟件清除中斷標(biāo)志位:串行口1中斷標(biāo)志位TI和RI、串行口2中斷標(biāo)志位S2TI和S2RI、ADC中斷標(biāo)志位ADC_FLAG、SPI中斷標(biāo)志位SPIF、PCA中斷標(biāo)志位CF/CCF0/CCF1/CCF2、低壓檢測中斷標(biāo)志位LVDF,需要在中斷服務(wù)程序中用軟件將其清0。第三十八頁,共53頁。

注意:對于STC15F2K60S2單片機(jī)外部中斷來說,由于系統(tǒng)每個(gè)時(shí)鐘對外部中斷引腳采樣1次,所以為了確保被檢測到,輸入信號應(yīng)該至少維持2個(gè)時(shí)鐘。不管是下降沿觸發(fā)還是上升沿觸發(fā),要求必須在相應(yīng)的引腳維持高電平和低電平至少1個(gè)時(shí)鐘以上,才能確保該下降沿或上升沿被CPU檢測到。第三十九頁,共53頁。5.5中斷的應(yīng)用舉例

中斷處理程序的編寫中斷處理程序一般包括中斷控制程序和中斷服務(wù)程序(函數(shù))兩部分組成。

1.中斷控制程序中斷控制程序主要完成中斷的初始化,一般放在主程序即可,主要完成以下幾個(gè)任務(wù):(1)根據(jù)需要設(shè)定相關(guān)變量或寄存器的初始值;(2)根據(jù)需要在IP、IP2寄存器中設(shè)定中斷優(yōu)先級;(3)在IE、IE2寄存中把相應(yīng)中斷源的對應(yīng)位置1,開放相應(yīng)的中斷;(4)CPU開放總中斷EA。第四十頁,共53頁。

2.中斷服務(wù)程序(函數(shù))中斷服務(wù)程序完成對具體中斷源的處理,不同的應(yīng)用系統(tǒng)的中斷服務(wù)程序(函數(shù))有所不同,一般包括以下幾個(gè)內(nèi)容:

(1)根據(jù)需要選擇需要保護(hù)和恢復(fù)現(xiàn)場當(dāng)CPU進(jìn)入中斷服務(wù)程序后,如果使用與主程序相同的寄存器時(shí),必定會(huì)破壞該單元中原來的數(shù)據(jù),如果不加以保護(hù),則中斷返時(shí)將導(dǎo)致主程序的混亂。因此,在進(jìn)行中斷服務(wù)程序后,應(yīng)根據(jù)需要保護(hù)現(xiàn)場,中斷返回前恢復(fù)現(xiàn)場。在C51語言編程中,則在中斷函數(shù)中聲明局部變量,也可以選擇不同的寄存器組,保護(hù)和恢復(fù)現(xiàn)場不需要過多考慮。第四十一頁,共53頁。

(2)根據(jù)需要清除中斷請求標(biāo)志位,有的標(biāo)志位不能通過硬件自動(dòng)清除,如RI和TI等,因此,要在中斷服務(wù)程序中用軟件清除相應(yīng)的標(biāo)志位,以免造成CPU再次響應(yīng)中斷。采用C51編寫中斷函數(shù),其一般格式如下:

返回值類型函數(shù)名(形式參數(shù)表)interruptn[usingn]

其中,interrupt關(guān)鍵字后的n為對應(yīng)中斷源編號,告訴編譯器中斷程序的入口地址。using是可選項(xiàng),其后面的n為選擇寄存器組,可以是0、1、2、3,分別對應(yīng)RAM中的4個(gè)寄存器組。

STC15F2K60S2單片機(jī)各個(gè)中斷源所對應(yīng)的中斷服務(wù)程序入口地址及中斷號如表5-2所示。第四十二頁,共53頁。第四十三頁,共53頁。

如果使用C語言編程中斷函數(shù)時(shí),則以中斷號來區(qū)分每一個(gè)中斷。例如:voidINT0_ISR(void)interrupt0{}//外部中斷0中斷函數(shù);voidT0_ISR(void)interrupt1{}//定時(shí)器T0中斷函數(shù);voidINT1_ISR(void)interrupt2{}//外部中斷1中斷函數(shù);voidT1_ISR(void)interrupt3{}//定時(shí)器T1中斷函數(shù);voidUART1_ISR(void)interrupt4{}//串行通信中斷函數(shù);voidADC_ISR(void)interrupt5{}//ADC中斷函數(shù);voidLVD_ISR(void)interrupt6{}//ADC中斷函數(shù);voidPCA_ISR(void)interrupt7{}//PCA中斷函數(shù);voidUART2_ISR(void)interrupt8{}//串行通信2中斷函數(shù);voidSPI_ISR(void)interrupt9{}//SPI中斷函數(shù);voidINT2_ISR(void)interrupt10{}//外部中斷2中斷函數(shù);voidINT3_ISR(void)interrupt11{}//外部中斷3中斷函數(shù);voidT2_ISR(void)interrupt12{}//定時(shí)器T2中斷函數(shù);voidINT4_ISR(void)interrupt16{}//外部中斷4中斷函數(shù);第四十四頁,共53頁。中斷應(yīng)用舉例

【例5-1】如圖5-3所示,當(dāng)按鍵K1按下時(shí),P1口的8個(gè)LED燈閃爍5次,采用中斷方式實(shí)現(xiàn),試編程實(shí)現(xiàn)。

分析:由于按鍵K1連接在INT0/P3.2口,采用外部中斷0實(shí)現(xiàn),LED燈閃爍一次,即亮一下又熄滅,共循環(huán)5次,在中斷函數(shù)中實(shí)現(xiàn)。第四十五頁,共53頁。第四十六頁,共53頁。#include<reg51.h>//包含頭文件voiddelay(unsignedinti)//延時(shí)函數(shù)

{while(--i>0);}voidmain()//主函數(shù)

{EX0=1;//開放外部中斷0IT0=1;//設(shè)定外部中斷0為下降沿觸發(fā)方式

EA=1;//開放總中斷

while(1);//等待

}voidINT0_ISR()interrupt0//外部中斷0函數(shù)

{unsignedchari;for(i=0;i<5;i++)//循環(huán)5次

{P1=0x00; delay(1000); P1=0xff; delay(1000); }}C51參考程序如下:第四十七頁,共53頁。

【例5-2】如圖5-4所示,按鍵K1接在P3.2口,按

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論