《單片機(jī)原理及應(yīng)用技術(shù)項(xiàng)目化教程》課件項(xiàng)目三_第1頁
《單片機(jī)原理及應(yīng)用技術(shù)項(xiàng)目化教程》課件項(xiàng)目三_第2頁
《單片機(jī)原理及應(yīng)用技術(shù)項(xiàng)目化教程》課件項(xiàng)目三_第3頁
《單片機(jī)原理及應(yīng)用技術(shù)項(xiàng)目化教程》課件項(xiàng)目三_第4頁
《單片機(jī)原理及應(yīng)用技術(shù)項(xiàng)目化教程》課件項(xiàng)目三_第5頁
已閱讀5頁,還剩77頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

模塊3中斷控制的花樣彩燈設(shè)計(jì)3.1項(xiàng)目描述 3.2項(xiàng)目目的與要求

3.3項(xiàng)目支撐知識(shí)鏈接3.4項(xiàng)目實(shí)施

項(xiàng)目小結(jié)項(xiàng)目拓展技能與練習(xí)

【項(xiàng)目導(dǎo)入】

早期的單片機(jī)系統(tǒng)中并沒有引入中斷機(jī)制,隨著工業(yè)技術(shù)的發(fā)展,要求在工業(yè)控制系統(tǒng)中能實(shí)時(shí)、快速、準(zhǔn)確地處理一些突發(fā)事件,由此促使了中斷技術(shù)的出現(xiàn)。如今中斷技術(shù)在單片機(jī)中的應(yīng)用越來越廣泛。在此,我們通過設(shè)計(jì)一個(gè)項(xiàng)目—中斷控制的花樣彩燈,讓同學(xué)們掌握中斷技術(shù)在單片機(jī)中的使用。

【項(xiàng)目目標(biāo)】

1.知識(shí)目標(biāo)

(1)理解中斷的概念;

(2)熟悉單片機(jī)的中斷結(jié)構(gòu)和控制;

(3)理解中斷控制寄存器的各位含義;

(4)掌握中斷的處理過程。

(5)掌握C51中斷函數(shù)的定義。

2.能力目標(biāo)

(1)編程中會(huì)使用中斷各寄存器;

(2)掌握中斷的入口地址的安排;

(3)能運(yùn)用C51語言編寫中斷應(yīng)用程序。

3.1項(xiàng)目描述

單片機(jī)的中斷技術(shù)在工業(yè)控制與測(cè)量領(lǐng)域有著廣泛的應(yīng)用。本項(xiàng)目通過用一個(gè)按鍵產(chǎn)生的中斷信號(hào)來控制花樣彩燈的閃亮方式。通過該項(xiàng)目的學(xué)習(xí),學(xué)生可掌握單片機(jī)中斷的基本概念、中斷的處理過程以及中斷服務(wù)程序的編寫,為以后單片機(jī)系統(tǒng)的開發(fā)奠定扎實(shí)的基礎(chǔ)。

3.2項(xiàng)目目的與要求

本項(xiàng)目采用外部中斷方式控制彩燈的運(yùn)行,通過按動(dòng)按鍵產(chǎn)生中斷,使得彩燈以三種方式閃亮。項(xiàng)目在實(shí)施過程中需要解決以下關(guān)鍵問題:

(1)各中斷控制寄存器的每一位的值如何確定?

(2)采用何種中斷信號(hào)?如何處理該中斷過程?

(3)按鍵按下后,中斷如何響應(yīng)?

(4)中斷服務(wù)程序如何編寫?

3.3項(xiàng)目支撐知識(shí)鏈接

3.3.1中斷系統(tǒng)概述

1.中斷的概念

在現(xiàn)實(shí)生活中,往往會(huì)遇到這樣的事情:你在看書—電話響了—接電話—通話完畢—從剛才停止的地方繼續(xù)看書。這是一個(gè)典型的中斷現(xiàn)象,為什么會(huì)出現(xiàn)此現(xiàn)象呢?就是因?yàn)楫?dāng)你正做一件事情(看書)時(shí),突然出現(xiàn)了一個(gè)重要的事情要處理(接電話),而一個(gè)人又不能同時(shí)完成兩項(xiàng)任務(wù),這時(shí)就必須采取穿插著去做的方法來實(shí)現(xiàn)。與生活中的中斷現(xiàn)象相似,在單片機(jī)執(zhí)行程序的過程中,由于內(nèi)部或者外部發(fā)生某一突發(fā)事件去請(qǐng)求CPU處理(中斷發(fā)生);CPU暫時(shí)中斷當(dāng)前程序的執(zhí)行,轉(zhuǎn)去處理所發(fā)生的事件(中斷響應(yīng)和中斷服務(wù));待處理完畢后,再返回來執(zhí)行原來被中斷的程序(中斷返回)。這一處理過程稱為中斷。在中斷系統(tǒng)中,常用到以下幾個(gè)概念:CPU正常情況下運(yùn)行的程序稱為主程序;向CPU提出中斷申請(qǐng)的設(shè)備稱為中斷源;中斷源向CPU所發(fā)出的請(qǐng)求中斷的信號(hào)稱為中斷請(qǐng)求;CPU在滿足條件的情況下,接受中斷申請(qǐng),終止現(xiàn)行的執(zhí)行轉(zhuǎn)而為申請(qǐng)中斷的對(duì)象服務(wù)稱為中斷響應(yīng);為服務(wù)對(duì)象服務(wù)的程序稱為中斷服務(wù)程序;現(xiàn)行程序被中斷的地址稱為斷點(diǎn);中斷服務(wù)程序結(jié)束后,返回到原來的程序稱為中斷返回。單片機(jī)中斷過程示意圖如圖3-1所示。圖3-1單片機(jī)中斷過程示意圖此處需要注意兩點(diǎn),分別是:保護(hù)斷點(diǎn)和保護(hù)現(xiàn)場(chǎng)。

保護(hù)斷點(diǎn)指的是當(dāng)CPU響應(yīng)外設(shè)提出的中斷請(qǐng)求時(shí),在轉(zhuǎn)入中斷服務(wù)程序之前,把主程序斷點(diǎn)(程序計(jì)數(shù)器PC的當(dāng)前值)保存起來,以便中斷服務(wù)程序執(zhí)行結(jié)束返回到主程序后,從斷點(diǎn)處又開始繼續(xù)執(zhí)行主程序。保護(hù)現(xiàn)場(chǎng)指的是CPU執(zhí)行中斷處理程序時(shí),可能要使用主程序中使用過的累加器、寄存器或標(biāo)志位,為了使這些單元的值在中斷服務(wù)程序中不被沖掉,在進(jìn)入中斷服務(wù)程序前,要將有關(guān)寄存器保護(hù)起來。中斷服務(wù)程序執(zhí)行完時(shí),還必須恢復(fù)原寄存器的內(nèi)容及原程序中斷處的地址,即恢復(fù)現(xiàn)場(chǎng)和恢復(fù)斷點(diǎn)。

2.89C51中斷系統(tǒng)的結(jié)構(gòu)

89C51系列單片機(jī)的中斷系統(tǒng)有5個(gè)中斷源,分別是、、T0、T1和串行端口。4個(gè)中斷控制寄存器TCON、SCON、IE、IP用于控制中斷類型、鎖存中斷標(biāo)志以及控制中斷的開/關(guān)和中斷源的優(yōu)先級(jí)別。5個(gè)中斷源有兩個(gè)優(yōu)先級(jí),可實(shí)現(xiàn)二級(jí)中斷服務(wù)嵌套,由片內(nèi)特殊功能寄存器中的中斷允許寄存器IE控制CPU是否響應(yīng)中斷請(qǐng)求,由中斷優(yōu)先級(jí)寄存器IP安排各中斷源的優(yōu)先級(jí),同一優(yōu)先級(jí)內(nèi)各中斷同時(shí)提出中斷請(qǐng)求時(shí),由內(nèi)部的查詢邏輯確定其響應(yīng)次序。

89C51單片機(jī)的中斷系統(tǒng)包括中斷請(qǐng)求標(biāo)志位(在相關(guān)的特殊功能寄存器中)、中斷允許寄存器IE、中斷優(yōu)先級(jí)寄存器IP及內(nèi)部硬件查詢電路,如圖3-2所示,圖中反映出了89C51單片機(jī)中斷系統(tǒng)的功能和控制情況。圖3-289C51中斷系統(tǒng)內(nèi)部結(jié)構(gòu)圖

3.中斷的功能

隨著計(jì)算機(jī)技術(shù)的應(yīng)用,人們發(fā)現(xiàn)中斷技術(shù)不僅解決了快速主機(jī)與慢速I/O設(shè)備的數(shù)據(jù)傳送問題,而且還具有如下功能:

(1)提高CPU的工作效率。中斷請(qǐng)求發(fā)生于時(shí)間不確定的事件(如定時(shí)時(shí)間到的處理)中,在中斷請(qǐng)求發(fā)生時(shí)需要CPU暫停當(dāng)前的工作。因此采用中斷技術(shù)使CPU避免了不必要的等待和查詢,大大提高了CPU的工作效率,實(shí)現(xiàn)了CPU與外圍部件或外部設(shè)備的并行工作。

(2)處理故障。把那些可以預(yù)知的故障(如除數(shù)為0、掉電等)作為中斷源,編制相應(yīng)的故障處理中斷服務(wù)程序,這樣當(dāng)故障發(fā)生時(shí),CPU就能及時(shí)發(fā)現(xiàn)并自動(dòng)進(jìn)行處理。

(3)實(shí)現(xiàn)實(shí)時(shí)控制。在實(shí)時(shí)測(cè)控系統(tǒng)中,要求單片機(jī)能對(duì)現(xiàn)場(chǎng)的許多隨機(jī)參數(shù)、信息進(jìn)行快速分析、運(yùn)算并及時(shí)處理,而中斷機(jī)制正好滿足了這種在任何時(shí)刻提出處理請(qǐng)求的實(shí)時(shí)控制。

(4)實(shí)現(xiàn)人機(jī)交互。用戶需要對(duì)單片機(jī)的工作進(jìn)行干預(yù)時(shí),可以通過按鍵請(qǐng)求使單片機(jī)按照用戶的意圖進(jìn)行工作。3.3.2中斷的處理過程

1.中斷源

89C51系列單片機(jī)有5個(gè)中斷源:(P3.2),(P3.3),定時(shí)器/計(jì)數(shù)器T0、T1的溢出中斷,串行端口的發(fā)送(TXD)和接收(RXD)中斷(只占一個(gè)中斷源)。下面分別作一介紹。

(1)?

(P3.2):外部中斷0請(qǐng)求信號(hào)輸入引腳???/p>

由IT0(TCON.0)選擇其為低電平有效還是下降沿有效。當(dāng)CPU檢測(cè)到P3.2引腳上出現(xiàn)有效的中斷信號(hào)時(shí),中斷標(biāo)志IE0(TCON.1)置1,開始向CPU申請(qǐng)中斷。

(2)?

(P3.3):外部中斷1請(qǐng)求信號(hào)輸入引腳??捎蒊T1(TCON.2)選擇其為低電平有效還是下降沿有效。當(dāng)

CPU檢測(cè)到P3.3引腳上出現(xiàn)有效的中斷信號(hào)時(shí),中斷標(biāo)志IE1(TCON.3)置1,開始向CPU申請(qǐng)中斷。

(3)?T0(P3.4):內(nèi)部中斷,片內(nèi)定時(shí)器/計(jì)數(shù)器T0溢出時(shí)發(fā)出中斷請(qǐng)求。當(dāng)定時(shí)器/計(jì)數(shù)器T0發(fā)生溢出時(shí),置位TF0,向CPU申請(qǐng)中斷。

(4)?T1(P3.5):內(nèi)部中斷,片內(nèi)定時(shí)器/計(jì)數(shù)器T1溢出

時(shí)發(fā)出中斷請(qǐng)求。當(dāng)定時(shí)器/計(jì)數(shù)器T1發(fā)生溢出時(shí),置位TF1,向CPU申請(qǐng)中斷。

(5)串行端口:內(nèi)部中斷,包括串行接收中斷RI和串行發(fā)送中斷TI。當(dāng)接口接收完一幀串行數(shù)據(jù)時(shí)置位RI,或當(dāng)串行接口發(fā)送完一幀串行數(shù)據(jù)時(shí)置位TI,向CPU申請(qǐng)中斷。

2.中斷申請(qǐng)標(biāo)志(TCON和SCON)

在中斷系統(tǒng)中,應(yīng)用何種中斷,采用何種觸發(fā)方式,是由定時(shí)器/計(jì)數(shù)器控制寄存器TCON和串行端口控制寄存器SCON的相應(yīng)位規(guī)定的。TCON和SCON均屬于特殊功能寄存器,字節(jié)地址分別為88H和98H,兩者都可以進(jìn)行位尋址。

1)定時(shí)器/計(jì)數(shù)器控制寄存器TCON

TCON是定時(shí)器/計(jì)數(shù)器控制寄存器,其字節(jié)地址為88H,可進(jìn)行位尋址。這個(gè)寄存器有兩個(gè)作用,即除了控制定時(shí)器/計(jì)數(shù)器T0、T1的溢出中斷和鎖存T0、T1的溢出中斷標(biāo)志位外,還控制外部中斷的觸發(fā)方式和鎖存外部中斷請(qǐng)求標(biāo)志。其格式如下:

TCON寄存器各控制位的含義如下:

IT0(TCON.0):選擇外部中斷的中斷觸發(fā)方式。當(dāng)IT0=0時(shí),為電平觸發(fā)方式,低電平有效;當(dāng)IT0=1時(shí),為邊沿觸發(fā)方式,下降沿有效(即P3.2引腳信號(hào)出現(xiàn)負(fù)跳變有效)。

IT1(TCON.2):選擇外部中斷的中斷觸發(fā)方式。當(dāng)IT1=0時(shí)外部中斷的中斷觸發(fā)方式為電平觸發(fā)方式,低電平有效;當(dāng)IT1=1時(shí),外部中斷的中斷觸發(fā)方式為邊沿觸發(fā)方式,負(fù)跳變有效(1→0)。

IE0(TCON.1):外部中斷的中斷請(qǐng)求標(biāo)志。當(dāng)IE0=1時(shí),表示外部中斷向CPU請(qǐng)求中斷。

IE1(TCON.3):外部中斷的中斷請(qǐng)求標(biāo)志。當(dāng)IE1=1時(shí),表示外部中斷向CPU請(qǐng)求中斷。

TF0(TCON.5):片內(nèi)定時(shí)器/計(jì)數(shù)器T0溢出中斷請(qǐng)求標(biāo)志。定時(shí)器/計(jì)數(shù)器的核心為加法器,當(dāng)定時(shí)器/計(jì)數(shù)器T0發(fā)生定時(shí)或計(jì)數(shù)溢出時(shí),由硬件置位TF0,向CPU申請(qǐng)中斷,CPU響應(yīng)中斷后,會(huì)自動(dòng)對(duì)TF0清零。

TF0(TCON.5):片內(nèi)定時(shí)器/計(jì)數(shù)器T0溢出中斷請(qǐng)求標(biāo)志。定時(shí)器/計(jì)數(shù)器的核心為加法器,當(dāng)定時(shí)器/計(jì)數(shù)器T0發(fā)生定時(shí)或計(jì)數(shù)溢出時(shí),由硬件置位TF0,向CPU申請(qǐng)中斷,CPU響應(yīng)中斷后,會(huì)自動(dòng)對(duì)TF0清零。

TF1(TCON.7):片內(nèi)定時(shí)器/計(jì)數(shù)器T1溢出中斷請(qǐng)求標(biāo)志。其操作功能與TF0類同。

TR0(TCON.4):定時(shí)器/計(jì)數(shù)器T0的啟動(dòng)/停止控制位,由軟件進(jìn)行設(shè)定。TR0=0,停止T0定時(shí)(或者計(jì)數(shù));TR0=1,啟動(dòng)T0定時(shí)(或者計(jì)數(shù))。

TR1(TCON.6):定時(shí)器/計(jì)數(shù)器T1的啟動(dòng)/停止控制位,由軟件進(jìn)行設(shè)定。TR1=0,停止T1定時(shí)(或者計(jì)數(shù));TR1=1,啟動(dòng)T1定時(shí)(或者計(jì)數(shù))。

2)串行端口控制寄存器SCON

SCON為串行端口控制寄存器,其字節(jié)地址為98H,也可以進(jìn)行位尋址。串行端口的接收和發(fā)送數(shù)據(jù)中斷請(qǐng)求標(biāo)志位(RI、TI)被鎖存在端口控制寄存器SCON中,其格式如下:

SCON寄存器各位的含義如下:

RI(SCON.0):串行端口接收中斷請(qǐng)求標(biāo)志位。在串行端口允許接收時(shí),每接收完一幀數(shù)據(jù),由硬件自動(dòng)將RI位置1。同樣,CPU響應(yīng)中斷時(shí)不會(huì)清除RI,RI位的清0必須由用戶用指令來完成。

TI(SCON.1):串行端口發(fā)送中斷請(qǐng)求標(biāo)志位。CPU將一個(gè)數(shù)據(jù)寫入發(fā)送緩沖器SBUF時(shí),就啟動(dòng)發(fā)送,每發(fā)送完一幀串行數(shù)據(jù)后,硬件置位TI。但CPU響應(yīng)中斷時(shí),并不清除TI,必須在中斷服務(wù)程序中由軟件對(duì)TI清0。在中斷系統(tǒng)中,將串行端口的接收中斷RI和發(fā)送中斷TI經(jīng)邏輯或運(yùn)算后作為內(nèi)部的一個(gè)中斷源。當(dāng)CPU響應(yīng)串行端口中斷請(qǐng)求時(shí),CPU并不清楚是接收中斷請(qǐng)求還是發(fā)送中斷請(qǐng)求,所以用戶在編寫串行端口中斷服務(wù)程序時(shí),在程序中必須識(shí)別是RI還是TI產(chǎn)生的中斷請(qǐng)求,從而執(zhí)行相應(yīng)的中斷服務(wù)程序。另外,SCON其他各位的功能和作用與串行通信有關(guān),將在項(xiàng)目5中介紹。

3.中斷允許控制

89C51對(duì)中斷源的開放或屏蔽是由中斷允許寄存器IE控制的,IE的字節(jié)地址為A8H,既可以按字節(jié)尋址,也可以按位尋址。當(dāng)單片機(jī)復(fù)位時(shí)IE被清為0。通過對(duì)IE各位的置1或清0操作,可實(shí)現(xiàn)打開或屏蔽某個(gè)中斷。IE的格式如下:

IE寄存器各位的含義如下:

EA(IE.7):中斷允許總控制位,其狀態(tài)由用戶通過程序進(jìn)行控制。EA=0,中斷禁止,即關(guān)中斷;EA=1,中斷總允許,即開中斷。對(duì)各中斷源的中斷請(qǐng)求是否允許還取決于各中斷源的中斷允許控制位的狀態(tài)。

EX0(IE.0):外中斷0(即)的中斷允許控制位。EX0=0,禁止中斷;EX0=1,允許中斷。

ET0(IE.1):定時(shí)器T0的中斷允許控制位。ET0=0,禁止T0中斷;ET0=1,允許T0中斷。

EX1(IE.2):外中斷1(即)的中斷允許控制位。EX1=0,禁止中斷;EX1=1,允許中斷。

ET1(IE.3):定時(shí)器T1的中斷允許控制位。中斷總允許時(shí),ET1=0,禁止T1中斷;ET1=1,允許T1中斷。

ES(IE.4):串行口中斷允許控制位。中斷總允許時(shí),ES=0,禁止串行口中斷;ES=1,允許串行口中斷。

89C51系統(tǒng)復(fù)位后,IE寄存器中各位均被清0,禁止所有的中斷。在應(yīng)用時(shí),由軟件進(jìn)行設(shè)定,既可以使用位操作,也可以使用字節(jié)操作來實(shí)現(xiàn)對(duì)IE的設(shè)置。

4.中斷優(yōu)先級(jí)控制及中斷嵌套

1)中斷優(yōu)先級(jí)

89C51單片機(jī)有兩個(gè)中斷優(yōu)先級(jí),即可實(shí)現(xiàn)二級(jí)中斷服務(wù)程序嵌套。每個(gè)中斷源的中斷優(yōu)先級(jí)都是由中斷優(yōu)先級(jí)寄存器IP中的相應(yīng)位的狀態(tài)來控制的。IP的狀態(tài)也由軟件設(shè)定,某位設(shè)定為1時(shí),相應(yīng)的中斷源為高優(yōu)先級(jí)中斷;某位設(shè)定為0時(shí),相應(yīng)的中斷源為低優(yōu)先級(jí)中斷。IP寄存器的字節(jié)地址為B8H,既可以按字節(jié)訪問,又可以按位訪問。其格式如下:

IP寄存器的各位的含義如下:

PX0(IP.0):外中斷0的中斷優(yōu)先級(jí)控制位。PX0=0時(shí),外中斷0為低中斷優(yōu)先級(jí);PX0=1時(shí),外中斷0為高中斷優(yōu)先級(jí)。

PT0(IP.1):定時(shí)器T0的中斷優(yōu)先級(jí)控制位。PT0=0時(shí),T0為低中斷優(yōu)先級(jí);PT0=1時(shí),T0為高中斷優(yōu)先級(jí)。

PX1(IP.2):外中斷1的中斷優(yōu)先級(jí)控制位。PX1=0時(shí),外中斷1為低中斷優(yōu)先級(jí);PX1=1時(shí),外中斷1為高中斷優(yōu)

先級(jí)。

PT1(IP.3):定時(shí)器T1的中斷優(yōu)先級(jí)控制位。PT1=0時(shí),T1為低中斷優(yōu)先級(jí);PT1=1時(shí),T1為高中斷優(yōu)先級(jí)。

PS(IP.4):串行中斷源的中斷優(yōu)先級(jí)控制位。PS=0時(shí),串行中斷為低中斷優(yōu)先級(jí);PS=1時(shí),串行中斷為高中斷優(yōu)先級(jí)。

若某幾個(gè)控制位為1,則相應(yīng)的中斷源就規(guī)定為高級(jí)中斷;反之,若某幾個(gè)控制位為0,則相應(yīng)的中斷源就規(guī)定為低級(jí)中斷。

對(duì)同時(shí)到來的優(yōu)先級(jí)中斷請(qǐng)求,將按照自然優(yōu)先級(jí)來確定中斷響應(yīng)次序,如表3-1所示。

2)中斷嵌套

當(dāng)CPU正在執(zhí)行中斷服務(wù)程序時(shí),如果出現(xiàn)了另一個(gè)優(yōu)先級(jí)比它高的中斷請(qǐng)求,則CPU就暫時(shí)中止執(zhí)行原來優(yōu)先級(jí)較低的中斷源的服務(wù)程序,保護(hù)當(dāng)前的斷點(diǎn),轉(zhuǎn)去響應(yīng)優(yōu)先級(jí)更高的中斷請(qǐng)求并為其服務(wù)。待服務(wù)結(jié)束后,再去執(zhí)行優(yōu)先級(jí)別較低的原中斷服務(wù)程序。該過程被稱為中斷嵌套(類似于子程序的嵌套),該中斷系統(tǒng)稱為多級(jí)中斷系統(tǒng)。中斷嵌套的過程如圖3-3所示。圖3-3中斷嵌套示意圖

5.中斷處理過程

89C51單片機(jī)的中斷處理過程可分為三個(gè)階段,即中

斷響應(yīng)、中斷處理和中斷返回,如圖3-4所示。單片機(jī)工作時(shí),在每個(gè)機(jī)器周期中都去查詢各個(gè)中斷標(biāo)記位,如果是“1”,就說明有中斷請(qǐng)求;接下來判斷中斷請(qǐng)求是否滿足響應(yīng)條件,若滿足響應(yīng)條件,就進(jìn)入中斷處理;中斷處理完畢,進(jìn)行中斷返回,繼續(xù)執(zhí)行指令。圖3-4中斷處理過程的三個(gè)階段

1)中斷響應(yīng)

中斷響應(yīng)的條件是:①中斷源有中斷請(qǐng)求;②此中斷源的中斷允許位為1;③?CPU開中斷(即EA=1)。同時(shí)滿足這三個(gè)條件時(shí),CPU才有可能響應(yīng)中斷。

圖3-5所示為某中斷的響應(yīng)時(shí)序。從中斷源提出中斷申請(qǐng),到CPU響應(yīng)中斷(如果滿足了響應(yīng)中斷響應(yīng)條件),需要經(jīng)歷一定的時(shí)間。圖3-5中斷的響應(yīng)時(shí)序

89C51的中斷響應(yīng)時(shí)間(從標(biāo)志置1到進(jìn)入相應(yīng)的中斷服務(wù))至少有3個(gè)完整的機(jī)器周期。中斷控制系統(tǒng)對(duì)各中斷標(biāo)志進(jìn)行查詢需要1個(gè)機(jī)器周期,如果響應(yīng)條件具備,則CPU執(zhí)行中斷系統(tǒng)提供的相應(yīng)向量地址的硬件長(zhǎng)調(diào)用指令要占用2個(gè)機(jī)器周期。

此外,如果中斷響應(yīng)過程受阻,則要增加等待時(shí)間。若同級(jí)或高級(jí)中斷正在進(jìn)行,則所需要的附加等待時(shí)間取決于正在執(zhí)行的中斷服務(wù)程序的長(zhǎng)短,等待的時(shí)間不確定。若沒有同級(jí)或高級(jí)中斷正在進(jìn)行,則所需要的附加時(shí)間在3~5個(gè)機(jī)器周期之間。

2)中斷處理

如果一個(gè)中斷被響應(yīng),則按下列過程進(jìn)行處理:

(1)給相應(yīng)的優(yōu)先級(jí)觸發(fā)器狀態(tài)置1,指明CPU正在響應(yīng)的中斷優(yōu)先級(jí)的級(jí)別,同時(shí)屏蔽所有同級(jí)或更低級(jí)的中斷請(qǐng)求,允許更高級(jí)的中斷請(qǐng)求。

(2)執(zhí)行一個(gè)硬件生成子程序調(diào)用指令,使控制轉(zhuǎn)到相應(yīng)的中斷入口向量地址,并清除中斷源的中斷請(qǐng)求標(biāo)志(TI和RI除外)。

(3)在執(zhí)行中斷服務(wù)程序之前,CPU只保護(hù)一個(gè)地址(PC的值),如果主程序和中斷服務(wù)子程序都用到一些公共存儲(chǔ)空間(如A、PSW、DPTR等),那么執(zhí)行中斷服務(wù)子程序前將這些數(shù)據(jù)保存起來,以免返回主程序時(shí)出現(xiàn)錯(cuò)誤。

(4)轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序入口,即將被響應(yīng)的中斷入口向量地址送入PC中,執(zhí)行中斷服務(wù)程序。51單片機(jī)的五個(gè)中斷源都有各自的入口地址,見表3-1。

6.中斷的應(yīng)用

1)具體的中斷服務(wù)程序

CPU響應(yīng)中斷結(jié)束后即轉(zhuǎn)至中斷服務(wù)程序的入口,從中斷服務(wù)程序的第一條指令開始到返回指令為止。不同的中斷服務(wù)的內(nèi)容及要求各不相同,其處理過程也有所區(qū)別。一般情況下,中斷處理包括兩部分內(nèi)容:一是保護(hù)現(xiàn)場(chǎng),二是為中斷源服務(wù)。

C51編譯器支持在C源程序中直接開發(fā)中斷過程,在中斷服務(wù)程序中,必須指定對(duì)應(yīng)的中斷號(hào),用中斷號(hào)確定該中斷服務(wù)程序是哪個(gè)中斷所對(duì)應(yīng)的中斷服務(wù)程序。

中斷服務(wù)程序格式:

Void函數(shù)名(參數(shù))interruptnusingm

{函數(shù)體語句;}

其中,interrupt后面的n是中斷號(hào);關(guān)鍵字using后面的m是所選擇的寄存器組,取值范圍為0~3,定義中斷時(shí)using是個(gè)選項(xiàng),可以省略不用。

2)中斷服務(wù)程序舉例

【例3-1】利用單片機(jī)的外部中斷0響應(yīng)按鍵開關(guān)信號(hào),當(dāng)有按鍵按下時(shí)會(huì)觸發(fā)中斷,中斷發(fā)生時(shí)將LED狀態(tài)取反,產(chǎn)生LED的亮滅由按鍵(中斷)控制,電路圖如圖3-6所示。圖3-6中斷控制的單個(gè)LED燈

C51程序如下:

#include<reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

sbitLED=P0^0;

/*********主程序************/

voidmain()

{LED=1;

EA=1; //允許中斷

EX0=1; //使用外部中斷0

T0=1; //選擇外部的中斷的中斷觸發(fā)方式

while(1);

}

/*********INT0中斷函數(shù)************/

voidEX_INT0()interrupt0

{LED=~LED;//控制LED亮滅

}

【例3-2】設(shè)計(jì)中斷計(jì)數(shù),要求每次按下按鍵時(shí)觸發(fā)中斷,中斷程序累加計(jì)數(shù),計(jì)數(shù)值顯示在3只數(shù)碼管上,按下清零鍵時(shí)數(shù)碼管清零,硬件電路如圖3-7所示。圖3-7中斷控制的計(jì)數(shù)電路C51程序如下:

#include<reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

//0~9的段碼

ucharcodeDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};

//計(jì)數(shù)值分解后各個(gè)待顯示的數(shù)位

ucharDSY_Buffer[]={0,0,0};

ucharCount=0;

sbitClear_Key=P3^6;

//數(shù)碼管上顯示計(jì)數(shù)值voidShow_Count_ON_DSY()

{ DSY_Buffer[2]=Count/100; //獲取3個(gè)數(shù)

DSY_Buffer[1]=Count%100/10;

DSY_Buffer[0]=Count%10;

if(DSY_Buffer[2]==0) //高位為0時(shí)不顯示

{ DSY_Buffer[2]=0x0a;

if(DSY_Buffer[1]==0)//高位為0,若第二位為0同樣不顯示

DSY_Buffer[1]=0x0a;

}

P0=DSY_CODE[DSY_Buffer[0]];

P1=DSY_CODE[DSY_Buffer[1]];

P2=DSY_CODE[DSY_Buffer[2]];

}

//主程序

voidmain(){ P0=0x00;

P1=0x00;

P2=0x00;

IE=0x81; //允許INT0中斷

IT0=1; //下降沿觸發(fā)

while(1) {

if(Clear_Key==0)Count=0; //清0

Show_Count_ON_DSY();

}

}

//INT0中斷函數(shù)

voidEX_INT0()interrupt0

{

Count++; //計(jì)數(shù)值遞增

}

3.4項(xiàng)目實(shí)施

3.4.1項(xiàng)目硬件設(shè)計(jì)

中斷控制的花樣彩燈系統(tǒng)的結(jié)構(gòu)比較簡(jiǎn)單,其硬件電路模塊包括電源電路、時(shí)鐘電路、按鍵復(fù)位電路和LED燈接口電路,具體硬件電路如圖3-8所示。圖3-8中斷控制的彩燈電路圖3.4.2項(xiàng)目軟件設(shè)計(jì)

設(shè)計(jì)中采用單片機(jī)的外部中斷方式來實(shí)現(xiàn)對(duì)按鍵輸入進(jìn)行處理。一般中斷函數(shù)和主函數(shù)之間的運(yùn)行相當(dāng)于兩個(gè)程序并行運(yùn)行,在本項(xiàng)目中,用中斷函數(shù)控制彩燈的顯示。在本程序設(shè)計(jì)中,采用的主函數(shù)和中斷函數(shù)流程圖如圖3-9所示。圖3-9彩燈設(shè)計(jì)的主函數(shù)和中斷函數(shù)流程圖另外,設(shè)計(jì)中我們采用了一個(gè)判斷變量f,當(dāng)不發(fā)生中斷時(shí),f的值不變,程序保持運(yùn)行,使彩燈按照其中的一種花樣閃亮,當(dāng)按下S鍵時(shí),單片機(jī)終止原來的程序運(yùn)行,調(diào)用中斷子函數(shù),則f的值發(fā)生一次改變,在中斷返回后,主程序再次執(zhí)行到判斷變量f的值,由于f的值已改變,所以將執(zhí)行一個(gè)彩燈控制的子程序,彩燈將按照另一種花樣變化顯示。在按鍵時(shí)會(huì)有一定的延時(shí),采用延時(shí)程序消除按鍵產(chǎn)生的抖動(dòng)。根據(jù)程序流程圖,寫出單片機(jī)C51語言程序:

#include<reg51.h>

#defineucharunsignedchar

ucharlight,f,b;

/********延時(shí)0.5s的子函數(shù)*********/

voiddelay05s()

{uchari,j,k;

for(i=5;i>0;i--)

for(j=200;j>0;j--)

for(k=250;k>0;k--);

}/********延時(shí)10ms的子函數(shù)*********/

voiddelay10ms()

{uchari,k;

for(i=20;i>0;i--)

for(k=250;k>0;k--);

}

/********左移點(diǎn)亮彩燈*********/

voidleft(){light=light<<1;

if(light==0)light=0x01;

P2=~light;

}

/********右移點(diǎn)亮彩燈*********/

voidright()

{light=light>>1;

if(light==0)light=0x01;

P2=~light;

}/********用戶自定義點(diǎn)亮彩燈*********/

voidassum()

{ucharcodedispcode[8]={0xff,0x7e,0xbd,0xdb,0xe7,0xdb,0xbd,0x7e};

if(b==7)b=0;

elseb++;

P2=dispcode[b];

}

/********主函數(shù)*********/

voidmain(){IT0=1; //設(shè)置外部中斷0下降沿觸發(fā)

EX0=1; //開外部中斷0

EA=1; //開總中斷

f=1;

light=0x01;

b=0;

whi

溫馨提示

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