單片機(jī)的中斷原理及應(yīng)用_第1頁(yè)
單片機(jī)的中斷原理及應(yīng)用_第2頁(yè)
單片機(jī)的中斷原理及應(yīng)用_第3頁(yè)
單片機(jī)的中斷原理及應(yīng)用_第4頁(yè)
單片機(jī)的中斷原理及應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩52頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第五章:蛋盤機(jī)的中斷原理第五章:蛋盤機(jī)的中斷原理及應(yīng)用及應(yīng)用d第五章:?jiǎn)纹瑱C(jī)的中斷原理及應(yīng)用中斷概念的出現(xiàn),是計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)設(shè)計(jì)中的重大中斷概念的出現(xiàn),是計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)設(shè)計(jì)中的重大變革。中斷技術(shù)實(shí)質(zhì)上是一種資源共享技術(shù)。變革。中斷技術(shù)實(shí)質(zhì)上是一種資源共享技術(shù)。單片微機(jī)的中斷系統(tǒng)包括它的硬件和軟件編程。單片微機(jī)的中斷系統(tǒng)包括它的硬件和軟件編程。 中斷系統(tǒng)的幾個(gè)概念:中斷系統(tǒng)的幾個(gè)概念: 中斷:中斷:程序執(zhí)行過程中,允許外部或內(nèi)部事件通過硬件打斷程序執(zhí)行過程中,允許外部或內(nèi)部事件通過硬件打斷程序的執(zhí)行,使其轉(zhuǎn)向?yàn)樘幚硗獠炕騼?nèi)部事件的中斷服務(wù)程程序的執(zhí)行,使其轉(zhuǎn)向?yàn)樘幚硗獠炕騼?nèi)部事件的中斷服務(wù)程序中

2、去;完成中斷服務(wù)程序后,序中去;完成中斷服務(wù)程序后,CPU繼續(xù)原來被打斷的程序,繼續(xù)原來被打斷的程序,這樣的過程稱為中斷響應(yīng)過程,如圖這樣的過程稱為中斷響應(yīng)過程,如圖51所示。所示。 中斷源:中斷源:能產(chǎn)生中斷的外部和內(nèi)部事件。能產(chǎn)生中斷的外部和內(nèi)部事件。 中斷優(yōu)先級(jí):中斷優(yōu)先級(jí):5.1 中斷系統(tǒng)概述中斷系統(tǒng)概述 當(dāng)有幾個(gè)中斷源同時(shí)申請(qǐng)中斷時(shí),或者當(dāng)有幾個(gè)中斷源同時(shí)申請(qǐng)中斷時(shí),或者CPU正在處理某中斷源正在處理某中斷源服務(wù)程序時(shí),又有另一中斷源申請(qǐng)中斷,那么服務(wù)程序時(shí),又有另一中斷源申請(qǐng)中斷,那么CPU必須要確定必須要確定優(yōu)先去處理誰的能力,稱為中斷優(yōu)先級(jí)。優(yōu)先去處理誰的能力,稱為中斷優(yōu)先級(jí)。

3、 中斷嵌套:中斷嵌套:優(yōu)先級(jí)高的事件可以中斷優(yōu)先級(jí)高的事件可以中斷CPU正在處理的低級(jí)的中斷服正在處理的低級(jí)的中斷服務(wù)程序,待完成了高級(jí)中斷服務(wù)程序之后,再繼續(xù)被打斷的低務(wù)程序,待完成了高級(jí)中斷服務(wù)程序之后,再繼續(xù)被打斷的低級(jí)中斷服務(wù)程序。這是中斷嵌套問題。級(jí)中斷服務(wù)程序。這是中斷嵌套問題。 單片微機(jī)的中斷系統(tǒng)需要解決的問題單片微機(jī)的中斷系統(tǒng)需要解決的問題單片微機(jī)的中斷系統(tǒng)需要解決的問題主要有三點(diǎn),即:?jiǎn)纹C(jī)的中斷系統(tǒng)需要解決的問題主要有三點(diǎn),即: 當(dāng)單片微機(jī)內(nèi)部或外部有中斷申請(qǐng)時(shí),當(dāng)單片微機(jī)內(nèi)部或外部有中斷申請(qǐng)時(shí),CPU能及時(shí)響能及時(shí)響應(yīng)中斷,停下正在執(zhí)行的任務(wù),轉(zhuǎn)去處理中斷服務(wù)子程序,中

4、應(yīng)中斷,停下正在執(zhí)行的任務(wù),轉(zhuǎn)去處理中斷服務(wù)子程序,中斷服務(wù)處理后能回到原斷點(diǎn)處繼續(xù)處理原先的任務(wù);斷服務(wù)處理后能回到原斷點(diǎn)處繼續(xù)處理原先的任務(wù); 當(dāng)有多個(gè)中斷源同時(shí)申請(qǐng)中斷時(shí),應(yīng)能先響應(yīng)優(yōu)先級(jí)高當(dāng)有多個(gè)中斷源同時(shí)申請(qǐng)中斷時(shí),應(yīng)能先響應(yīng)優(yōu)先級(jí)高的中斷源,實(shí)現(xiàn)中斷優(yōu)先級(jí)的控制;的中斷源,實(shí)現(xiàn)中斷優(yōu)先級(jí)的控制; 當(dāng)?shù)蛢?yōu)先級(jí)中斷源正在享用中斷服務(wù)時(shí),若這時(shí)優(yōu)先級(jí)當(dāng)?shù)蛢?yōu)先級(jí)中斷源正在享用中斷服務(wù)時(shí),若這時(shí)優(yōu)先級(jí)比它高的中斷源也申請(qǐng)中斷,要求能停下低優(yōu)先級(jí)中斷源的服務(wù)比它高的中斷源也申請(qǐng)中斷,要求能停下低優(yōu)先級(jí)中斷源的服務(wù)程序轉(zhuǎn)去執(zhí)行更高優(yōu)先級(jí)中斷源的服務(wù)程序,實(shí)現(xiàn)中斷嵌套,并程序轉(zhuǎn)去執(zhí)行更高優(yōu)先級(jí)中斷

5、源的服務(wù)程序,實(shí)現(xiàn)中斷嵌套,并能逐級(jí)正確返回原斷點(diǎn)處。能逐級(jí)正確返回原斷點(diǎn)處。 實(shí)現(xiàn)實(shí)現(xiàn)CPU與外部設(shè)備的速度配合與外部設(shè)備的速度配合 由于應(yīng)用系統(tǒng)的許多外部設(shè)備速度較慢,可以通過中斷的方由于應(yīng)用系統(tǒng)的許多外部設(shè)備速度較慢,可以通過中斷的方法來協(xié)調(diào)快速法來協(xié)調(diào)快速CPU與慢速外部設(shè)備之間的工作。與慢速外部設(shè)備之間的工作。 實(shí)現(xiàn)實(shí)時(shí)控制實(shí)現(xiàn)實(shí)時(shí)控制在單片微機(jī)中,依靠中斷技術(shù)能實(shí)現(xiàn)實(shí)時(shí)控制。實(shí)時(shí)控制要在單片微機(jī)中,依靠中斷技術(shù)能實(shí)現(xiàn)實(shí)時(shí)控制。實(shí)時(shí)控制要求計(jì)算機(jī)能及時(shí)完成被控對(duì)象隨機(jī)提出的分析和計(jì)算任務(wù)。在自動(dòng)求計(jì)算機(jī)能及時(shí)完成被控對(duì)象隨機(jī)提出的分析和計(jì)算任務(wù)。在自動(dòng)控制系統(tǒng)中,要求各控制參量隨機(jī)地

6、在任何時(shí)刻可向計(jì)算機(jī)發(fā)出請(qǐng)控制系統(tǒng)中,要求各控制參量隨機(jī)地在任何時(shí)刻可向計(jì)算機(jī)發(fā)出請(qǐng)求,求,CPUCPU必須作出快速響應(yīng)、及時(shí)處理。必須作出快速響應(yīng)、及時(shí)處理。 計(jì)算機(jī)發(fā)出請(qǐng)求,計(jì)算機(jī)發(fā)出請(qǐng)求,CPUCPU必須作出快速響應(yīng)、及時(shí)處理。必須作出快速響應(yīng)、及時(shí)處理。 實(shí)現(xiàn)故障的及時(shí)發(fā)現(xiàn)及處理實(shí)現(xiàn)故障的及時(shí)發(fā)現(xiàn)及處理單片微機(jī)應(yīng)用中由于外界的干擾、硬件或軟件設(shè)計(jì)中存單片微機(jī)應(yīng)用中由于外界的干擾、硬件或軟件設(shè)計(jì)中存在問題等因素,在實(shí)際運(yùn)行中會(huì)出現(xiàn)硬件故障、運(yùn)算錯(cuò)誤、程在問題等因素,在實(shí)際運(yùn)行中會(huì)出現(xiàn)硬件故障、運(yùn)算錯(cuò)誤、程序運(yùn)行故障等,有了中斷技術(shù),計(jì)算機(jī)就能及時(shí)發(fā)現(xiàn)故障并自序運(yùn)行故障等,有了中斷技術(shù),計(jì)

7、算機(jī)就能及時(shí)發(fā)現(xiàn)故障并自動(dòng)處理。動(dòng)處理。 實(shí)現(xiàn)人機(jī)聯(lián)系實(shí)現(xiàn)人機(jī)聯(lián)系比如通過鍵盤向單片微機(jī)發(fā)出中斷請(qǐng)求,可以實(shí)時(shí)干預(yù)比如通過鍵盤向單片微機(jī)發(fā)出中斷請(qǐng)求,可以實(shí)時(shí)干預(yù)計(jì)算機(jī)的工作。計(jì)算機(jī)的工作。80C5180C51的中斷系統(tǒng)包括中斷源、中斷允許寄存器的中斷系統(tǒng)包括中斷源、中斷允許寄存器IEIE、中、中斷優(yōu)先級(jí)寄存器斷優(yōu)先級(jí)寄存器IPIP、中斷矢量等。、中斷矢量等。在在80C5180C51中,只有兩級(jí)中斷優(yōu)先級(jí)。圖中,只有兩級(jí)中斷優(yōu)先級(jí)。圖5252是是80C5180C51的中的中斷系統(tǒng)結(jié)構(gòu)示意圖。斷系統(tǒng)結(jié)構(gòu)示意圖。5.2 80C51 5.2 80C51 的中斷系統(tǒng)的中斷系統(tǒng) 80C51 1中有五個(gè)中

8、斷源;中有五個(gè)中斷源;80C5280C52中增加了一個(gè)中斷源中增加了一個(gè)中斷源定時(shí)定時(shí)器計(jì)數(shù)器器計(jì)數(shù)器T2T2,即有六個(gè)中斷源。每一個(gè)中斷源都能被程控為高優(yōu),即有六個(gè)中斷源。每一個(gè)中斷源都能被程控為高優(yōu)先級(jí)或低優(yōu)先級(jí)。先級(jí)或低優(yōu)先級(jí)。80C5180C51五個(gè)中斷源中包括二個(gè)外部中斷源和三個(gè)五個(gè)中斷源中包括二個(gè)外部中斷源和三個(gè)內(nèi)部中斷源。內(nèi)部中斷源。二個(gè)外部中斷源二個(gè)外部中斷源INT0INT0和和INT1INT1,外部設(shè)備的中斷請(qǐng)求信號(hào)、掉,外部設(shè)備的中斷請(qǐng)求信號(hào)、掉電等故障信號(hào)都可以從電等故障信號(hào)都可以從INT0INT0或或INT1INT1引腳輸入。引腳輸入。三個(gè)內(nèi)部中斷源為定時(shí)器三個(gè)內(nèi)部中斷

9、源為定時(shí)器/ /計(jì)數(shù)器計(jì)數(shù)器T0T0和和T1T1的定時(shí)的定時(shí)/ /計(jì)數(shù)謚出中計(jì)數(shù)謚出中斷源和串行口發(fā)送或接收中斷源。斷源和串行口發(fā)送或接收中斷源。80C5180C51的五個(gè)中斷源可以分為三類,即:的五個(gè)中斷源可以分為三類,即:1. 1. 外部中斷外部中斷外部中斷是由外部信號(hào)引起的,共有二個(gè)外部中斷,它們外部中斷是由外部信號(hào)引起的,共有二個(gè)外部中斷,它們的中斷請(qǐng)求信號(hào)分別從引腳的中斷請(qǐng)求信號(hào)分別從引腳INT0 (P3.2) INT0 (P3.2) 和和INT1 (P3.3) INT1 (P3.3) 上引入。上引入。外部中斷請(qǐng)求有二種信號(hào)觸發(fā)方式,即電平有效方式和跳外部中斷請(qǐng)求有二種信號(hào)觸發(fā)方式,

10、即電平有效方式和跳變有效方式,可通過設(shè)置有關(guān)控制位進(jìn)行定義。變有效方式,可通過設(shè)置有關(guān)控制位進(jìn)行定義。當(dāng)設(shè)定為電平有效方式時(shí),若當(dāng)設(shè)定為電平有效方式時(shí),若INT0INT0或或INT1INT1引腳上采樣到有引腳上采樣到有效的低電平,則向效的低電平,則向CPUCPU提出中斷請(qǐng)求;當(dāng)設(shè)定為跳變有效方式時(shí),提出中斷請(qǐng)求;當(dāng)設(shè)定為跳變有效方式時(shí),若若INT0INT0或或INT1INT1引腳上采樣到有效負(fù)跳變,則向引腳上采樣到有效負(fù)跳變,則向CPUCPU提出中斷請(qǐng)求。提出中斷請(qǐng)求。 定時(shí)中斷定時(shí)中斷定時(shí)中斷是為滿足定時(shí)或計(jì)數(shù)的需要而設(shè)置的。當(dāng)計(jì)數(shù)定時(shí)中斷是為滿足定時(shí)或計(jì)數(shù)的需要而設(shè)置的。當(dāng)計(jì)數(shù)器發(fā)生計(jì)數(shù)溢

11、出時(shí),表明設(shè)定的定時(shí)時(shí)間到或計(jì)數(shù)值已滿,這器發(fā)生計(jì)數(shù)溢出時(shí),表明設(shè)定的定時(shí)時(shí)間到或計(jì)數(shù)值已滿,這時(shí)可以向時(shí)可以向CPUCPU申請(qǐng)中斷。由于定時(shí)器申請(qǐng)中斷。由于定時(shí)器/ /計(jì)數(shù)器在單片微機(jī)芯片內(nèi)計(jì)數(shù)器在單片微機(jī)芯片內(nèi)部,所以定時(shí)中斷屬于內(nèi)部中斷。部,所以定時(shí)中斷屬于內(nèi)部中斷。80C5180C51有二個(gè)二個(gè)源,即:有二個(gè)二個(gè)源,即: TF0 TF0(P3P34 4)T0T0溢出中斷。溢出中斷。 TF1 TF1(P3P35 5)T1T1溢出中斷。溢出中斷。 串行中斷串行中斷串行中斷是為串行數(shù)據(jù)傳送的需要而設(shè)置的。每當(dāng)串行串行中斷是為串行數(shù)據(jù)傳送的需要而設(shè)置的。每當(dāng)串行口發(fā)送或接收一組串行數(shù)據(jù)時(shí),就產(chǎn)

12、生一個(gè)中斷請(qǐng)求。口發(fā)送或接收一組串行數(shù)據(jù)時(shí),就產(chǎn)生一個(gè)中斷請(qǐng)求。RXRX,TXTX串行中斷。串行中斷。當(dāng)當(dāng)CPUCPU響應(yīng)中斷時(shí),由硬件直接產(chǎn)生一個(gè)固定的地址,即響應(yīng)中斷時(shí),由硬件直接產(chǎn)生一個(gè)固定的地址,即矢量地址,由矢量地址指出每個(gè)中斷源設(shè)備的中斷服務(wù)程序的矢量地址,由矢量地址指出每個(gè)中斷源設(shè)備的中斷服務(wù)程序的入口,這種方法通常稱為矢量中斷。很顯然,每個(gè)中斷源分別入口,這種方法通常稱為矢量中斷。很顯然,每個(gè)中斷源分別有自已的中斷服務(wù)程序,而每個(gè)中斷服務(wù)程序又有自已的矢量有自已的中斷服務(wù)程序,而每個(gè)中斷服務(wù)程序又有自已的矢量地址。當(dāng)?shù)刂?。?dāng)CPUCPU識(shí)別出某個(gè)中斷源時(shí),由硬件直接給出一個(gè)與該

13、中識(shí)別出某個(gè)中斷源時(shí),由硬件直接給出一個(gè)與該中斷源相對(duì)應(yīng)的矢量地址,從而轉(zhuǎn)入各自中斷服務(wù)程序。中斷矢斷源相對(duì)應(yīng)的矢量地址,從而轉(zhuǎn)入各自中斷服務(wù)程序。中斷矢量地址見表量地址見表5 51 1。 INT0,INT1,T0 INT0,INT1,T0 及及 T1T1的中斷標(biāo)志存放在的中斷標(biāo)志存放在 TCONTCON(定時(shí)器計(jì)(定時(shí)器計(jì)數(shù)器控制)寄存器中;串行口的中斷標(biāo)志存放在數(shù)器控制)寄存器中;串行口的中斷標(biāo)志存放在 SCONSCON(串行口控(串行口控制)寄存器中。制)寄存器中。 定時(shí)器計(jì)數(shù)器控制寄存器定時(shí)器計(jì)數(shù)器控制寄存器TCONTCON字節(jié)地址為字節(jié)地址為88H88H,其格式如下,其格式如下:IT

14、1IT1(TCONTCON2 2)、)、IT0IT0(TCONTCON0 0)分別為)分別為T0T0、T1T1的中斷申請(qǐng)的中斷申請(qǐng)觸發(fā)方式控制位。觸發(fā)方式控制位。5.3 5.3 中斷的控制中斷的控制TF1TF1(TCONTCON7 7)T1T1計(jì)數(shù)溢出,由硬件置位,響應(yīng)中斷時(shí)由硬計(jì)數(shù)溢出,由硬件置位,響應(yīng)中斷時(shí)由硬件復(fù)位。不用中斷時(shí)用軟件清件復(fù)位。不用中斷時(shí)用軟件清0 0。 TF0TF0(TCONTCON5 5)T0T0計(jì)數(shù)溢出,由硬件置位,響應(yīng)中斷時(shí)由硬計(jì)數(shù)溢出,由硬件置位,響應(yīng)中斷時(shí)由硬件復(fù)位。不用中斷時(shí)用軟件清件復(fù)位。不用中斷時(shí)用軟件清0 0。IE1IE1(TCONTCON3 3)IE1

15、IE11 1時(shí),外部中斷時(shí),外部中斷1 1向向CPUCPU申請(qǐng)中斷。申請(qǐng)中斷。IE0IE0(TCONTCONl l)IE0IE01 1時(shí),外部中斷時(shí),外部中斷0 0向向CPUCPU申請(qǐng)中斷。申請(qǐng)中斷。串行口控制寄存器串行口控制寄存器SCONSCON字節(jié)地址為字節(jié)地址為98H98H,其格式如下:,其格式如下:低二位鎖存接收中斷源低二位鎖存接收中斷源RIRI和發(fā)送中斷源和發(fā)送中斷源TITI。 TITI(SCONSCON1 1):串行口發(fā)送中斷源。):串行口發(fā)送中斷源。發(fā)送完一幀,由硬件置位。響應(yīng)中斷后,必須用軟件清發(fā)送完一幀,由硬件置位。響應(yīng)中斷后,必須用軟件清 0 0。RIRI(SCONSCON

16、0 0):串行口接收中斷源。):串行口接收中斷源。接收完一幀,由硬件置位。響應(yīng)中斷后,必須用軟件清接收完一幀,由硬件置位。響應(yīng)中斷后,必須用軟件清0 0。中斷允許和禁止由中斷允許寄存器中斷允許和禁止由中斷允許寄存器IEIE控制??刂啤V袛嘣试S寄存器中斷允許寄存器IEIE的字節(jié)地址為的字節(jié)地址為A8HA8H,其格式如下:,其格式如下:IEIE寄存器中各位設(shè)置:為寄存器中各位設(shè)置:為0 0時(shí),禁止中斷;為時(shí),禁止中斷;為 1 1時(shí),允許中斷。時(shí),允許中斷。系統(tǒng)復(fù)位后系統(tǒng)復(fù)位后IEIE寄存器中各位均為寄存器中各位均為0 0,即此時(shí)禁止所有中斷。,即此時(shí)禁止所有中斷。與中斷有關(guān)的控制位共與中斷有關(guān)的控

17、制位共6 6位,即:位,即: EX0(IE0 0)外部中斷外部中斷0 0中斷允許位。中斷允許位。 ET0(IE1 1)定時(shí)器計(jì)數(shù)器定時(shí)器計(jì)數(shù)器T0T0中斷允許位。中斷允許位。 EX1(IE2 2)外部中斷外部中斷1 1中斷允許位。中斷允許位。 ET1(IE3 3)一)一定時(shí)器計(jì)數(shù)器定時(shí)器計(jì)數(shù)器T1T1中斷允許位。中斷允許位。 ES(IE4 4)串行口中斷允許位。串行口中斷允許位。 EA(IE7 7)CPU中斷允許位。當(dāng)中斷允許位。當(dāng)EA1 1,允許,允許所有中斷開放,總允許后,各中斷的允許或禁止由各中斷源的所有中斷開放,總允許后,各中斷的允許或禁止由各中斷源的中斷允許控制位進(jìn)行設(shè)置;當(dāng)中斷允許

18、控制位進(jìn)行設(shè)置;當(dāng)EA0 0時(shí),屏蔽所有中斷。時(shí),屏蔽所有中斷。80C5180C51通過中斷允許控制寄存器對(duì)中斷的允許通過中斷允許控制寄存器對(duì)中斷的允許( (開放開放) ) 。實(shí)行二級(jí)控制,即以實(shí)行二級(jí)控制,即以EAEA位作為總控制位,以各中斷源的位作為總控制位,以各中斷源的中斷允許位作為分控制位。只有當(dāng)總控制位中斷允許位作為分控制位。只有當(dāng)總控制位EAEA有效時(shí),即開放有效時(shí),即開放中斷系統(tǒng),這時(shí)各分控制位才能對(duì)相應(yīng)中斷源分別進(jìn)行開放或中斷系統(tǒng),這時(shí)各分控制位才能對(duì)相應(yīng)中斷源分別進(jìn)行開放或禁止。禁止。在在80C5180C51中有高、低兩個(gè)中斷優(yōu)先級(jí),通過中斷優(yōu)先級(jí)中有高、低兩個(gè)中斷優(yōu)先級(jí),通

19、過中斷優(yōu)先級(jí)寄存器寄存器IP來設(shè)定。來設(shè)定。中斷優(yōu)先級(jí)寄存器中斷優(yōu)先級(jí)寄存器IP的字節(jié)地址為的字節(jié)地址為B8HB8H,其格式如下:,其格式如下:IPIP寄存器中各位設(shè)置:為寄存器中各位設(shè)置:為0 0時(shí),為低中斷優(yōu)先級(jí);為時(shí),為低中斷優(yōu)先級(jí);為1 1時(shí),時(shí),設(shè)為高中斷優(yōu)先級(jí)。設(shè)為高中斷優(yōu)先級(jí)。級(jí)級(jí)系統(tǒng)復(fù)位后系統(tǒng)復(fù)位后IPIP寄存器中各位均為寄存器中各位均為0 0,即此時(shí)全部設(shè)定為低,即此時(shí)全部設(shè)定為低中斷優(yōu)先級(jí)。中斷優(yōu)先級(jí)。中斷優(yōu)先級(jí)控制,除了中斷優(yōu)先級(jí)控制寄存器之外,還中斷優(yōu)先級(jí)控制,除了中斷優(yōu)先級(jí)控制寄存器之外,還有二個(gè)不可尋址的優(yōu)先級(jí)狀態(tài)觸發(fā)器,其中一個(gè)用于指示某一有二個(gè)不可尋址的優(yōu)先級(jí)狀

20、態(tài)觸發(fā)器,其中一個(gè)用于指示某一高優(yōu)先級(jí)中斷正在進(jìn)行服務(wù),而屏蔽其它高優(yōu)先級(jí)中斷;另一高優(yōu)先級(jí)中斷正在進(jìn)行服務(wù),而屏蔽其它高優(yōu)先級(jí)中斷;另一個(gè)用于指示某一低優(yōu)先級(jí)中斷正在進(jìn)行服務(wù),從而屏蔽其它低個(gè)用于指示某一低優(yōu)先級(jí)中斷正在進(jìn)行服務(wù),從而屏蔽其它低優(yōu)先級(jí)中斷,但不能屏蔽高優(yōu)先級(jí)中斷。優(yōu)先級(jí)中斷,但不能屏蔽高優(yōu)先級(jí)中斷。 在中斷執(zhí)行過程中,高中斷優(yōu)先級(jí)可以中斷低中斷優(yōu)先在中斷執(zhí)行過程中,高中斷優(yōu)先級(jí)可以中斷低中斷優(yōu)先級(jí)的中斷過程。但是若在中斷服務(wù)程序中,關(guān)掉所有中斷級(jí)的中斷過程。但是若在中斷服務(wù)程序中,關(guān)掉所有中斷(CLR EA)或關(guān)掉部分中斷時(shí)除外。)或關(guān)掉部分中斷時(shí)除外。當(dāng)當(dāng)CPU同時(shí)接收到二

21、個(gè)不同優(yōu)先級(jí)的中斷請(qǐng)求時(shí),先響同時(shí)接收到二個(gè)不同優(yōu)先級(jí)的中斷請(qǐng)求時(shí),先響應(yīng)高優(yōu)先級(jí)的中斷,如果應(yīng)高優(yōu)先級(jí)的中斷,如果CPUCPU同時(shí)接收到的是幾個(gè)同一優(yōu)先級(jí)的同時(shí)接收到的是幾個(gè)同一優(yōu)先級(jí)的中斷請(qǐng)求時(shí),則由內(nèi)部的硬件查詢序列確定它們的優(yōu)先服務(wù)次中斷請(qǐng)求時(shí),則由內(nèi)部的硬件查詢序列確定它們的優(yōu)先服務(wù)次序,即在同一優(yōu)先級(jí)內(nèi)有一個(gè)由內(nèi)部查詢序列確定的笫二個(gè)優(yōu)序,即在同一優(yōu)先級(jí)內(nèi)有一個(gè)由內(nèi)部查詢序列確定的笫二個(gè)優(yōu)先級(jí)結(jié)構(gòu)。其排列如下:先級(jí)結(jié)構(gòu)。其排列如下: 中斷源中斷源中斷優(yōu)先級(jí)中斷優(yōu)先級(jí) 外部中斷外部中斷0 0最高最高 定時(shí)器定時(shí)器T0T0中斷中斷 外部中斷外部中斷1 1 定時(shí)器定時(shí)器T1T1中斷中斷

22、串行口中斷串行口中斷 定時(shí)器定時(shí)器T2T2中斷中斷最低最低80C5180C51是一個(gè)二級(jí)中斷系統(tǒng)。但是通過軟件可以模仿第三是一個(gè)二級(jí)中斷系統(tǒng)。但是通過軟件可以模仿第三優(yōu)先級(jí)。優(yōu)先級(jí)。利用利用80C5180C51芯片內(nèi)硬件可以為一些需要多于二個(gè)優(yōu)先級(jí)的芯片內(nèi)硬件可以為一些需要多于二個(gè)優(yōu)先級(jí)的應(yīng)用提供服務(wù)。只要編寫一段比較簡(jiǎn)單的程序產(chǎn)生模擬的笫三應(yīng)用提供服務(wù)。只要編寫一段比較簡(jiǎn)單的程序產(chǎn)生模擬的笫三優(yōu)先級(jí)。優(yōu)先級(jí)。首先,把高于優(yōu)先級(jí)首先,把高于優(yōu)先級(jí)1 1的中斷在的中斷在IPIP寄存器中指定為優(yōu)先級(jí)寄存器中指定為優(yōu)先級(jí)1 1,假,假定優(yōu)先級(jí)定優(yōu)先級(jí)1 1的中斷是可被優(yōu)先級(jí)的中斷是可被優(yōu)先級(jí)2 2的

23、中斷所中斷,則優(yōu)先級(jí)的中斷所中斷,則優(yōu)先級(jí)1 1的中的中斷服務(wù)子程序如下:斷服務(wù)子程序如下:PUSH IEMOV IE,MASKACALL LABEL( (執(zhí)行服務(wù)子程序執(zhí)行服務(wù)子程序) )POP IERETLABEL:RETI只要任何一個(gè)優(yōu)先級(jí)中斷只要任何一個(gè)優(yōu)先級(jí)中斷1 1被響應(yīng),中斷允許寄存器被響應(yīng),中斷允許寄存器IEIE就就被重新定義以至禁止所有除優(yōu)先級(jí)被重新定義以至禁止所有除優(yōu)先級(jí)2 2之外的中斷。那么,對(duì)之外的中斷。那么,對(duì)LABEL的調(diào)用執(zhí)行了中斷返回指令的調(diào)用執(zhí)行了中斷返回指令RETI,它對(duì)正在進(jìn)行中的優(yōu),它對(duì)正在進(jìn)行中的優(yōu)先級(jí)先級(jí)1 1的中斷觸發(fā)器清零。這時(shí),任何已被允許的優(yōu)

24、先級(jí)的中斷觸發(fā)器清零。這時(shí),任何已被允許的優(yōu)先級(jí)1 1的中斷的中斷可以被服務(wù),但沒有被允許的中斷優(yōu)先級(jí)可以被服務(wù),但沒有被允許的中斷優(yōu)先級(jí)1 1的中斷就不能再被允的中斷就不能再被允許,而只能允許中斷優(yōu)先級(jí)許,而只能允許中斷優(yōu)先級(jí)2 2的中斷。的中斷。把把IE退棧,恢復(fù)原來的允許字節(jié),然后用子程序返回指退棧,恢復(fù)原來的允許字節(jié),然后用子程序返回指令令RET完成服務(wù)子程序完成服務(wù)子程序( (不能采用不能采用RETI指令指令) )。 INT0,INT1 INT0,INT1的中斷觸發(fā)方式有兩種:電平觸發(fā)方式,低電平有的中斷觸發(fā)方式有兩種:電平觸發(fā)方式,低電平有效;跳變觸發(fā)方式,電平發(fā)生由高到低的跳變時(shí)

25、觸發(fā)。效;跳變觸發(fā)方式,電平發(fā)生由高到低的跳變時(shí)觸發(fā)。 這兩種觸發(fā)方式可由設(shè)置這兩種觸發(fā)方式可由設(shè)置TCONTCON寄存器中的寄存器中的IT1IT1(TCONTCON2 2)、)、 IT0IT0(TCONTCON0 0)中斷申請(qǐng)觸發(fā)方式控制位來選擇:)中斷申請(qǐng)觸發(fā)方式控制位來選擇: 設(shè)置設(shè)置IT1IT1、IT0IT00 0,選擇電平觸發(fā)方式;,選擇電平觸發(fā)方式; 設(shè)置設(shè)置IT1IT1、IT0IT0l l,選擇跳變觸發(fā)方式,即當(dāng),選擇跳變觸發(fā)方式,即當(dāng)INT0,INT1INT0,INT1引腳檢引腳檢測(cè)到前一個(gè)機(jī)器周期為高電平、后一個(gè)機(jī)器周期為低電平時(shí),則測(cè)到前一個(gè)機(jī)器周期為高電平、后一個(gè)機(jī)器周期

26、為低電平時(shí),則置位置位IE0IE0、IE1IE1且向且向CPUCPU申請(qǐng)中斷。申請(qǐng)中斷。 由于由于CPUCPU每個(gè)機(jī)器周期采樣每個(gè)機(jī)器周期采樣INT0,INT1INT0,INT1引腳信號(hào)一次,為確保引腳信號(hào)一次,為確保中斷請(qǐng)求被采樣到中斷請(qǐng)求被采樣到, ,外部中斷源送外部中斷源送INT0,INT1INT0,INT1引腳的中斷請(qǐng)求信號(hào)應(yīng)引腳的中斷請(qǐng)求信號(hào)應(yīng)至少保持一個(gè)機(jī)器周期。至少保持一個(gè)機(jī)器周期。如果是跳變觸發(fā)方式,外部中斷源送如果是跳變觸發(fā)方式,外部中斷源送INT0,INT1INT0,INT1引腳的中斷引腳的中斷請(qǐng)求信號(hào)高、低電平應(yīng)至少各保持一個(gè)機(jī)器周期,才能確保請(qǐng)求信號(hào)高、低電平應(yīng)至少各保

27、持一個(gè)機(jī)器周期,才能確保CPUCPU采采集到電平的跳變。集到電平的跳變。如果是電平觸發(fā)方式,則外部中斷源送如果是電平觸發(fā)方式,則外部中斷源送INT0,INT1INT0,INT1引腳請(qǐng)求引腳請(qǐng)求中斷的低電平有效信號(hào),應(yīng)一直保持到中斷的低電平有效信號(hào),應(yīng)一直保持到CPUCPU響應(yīng)中斷為止。響應(yīng)中斷為止。CPUCPU響應(yīng)中斷請(qǐng)求,轉(zhuǎn)向中斷服務(wù)程序執(zhí)行,在其執(zhí)行中響應(yīng)中斷請(qǐng)求,轉(zhuǎn)向中斷服務(wù)程序執(zhí)行,在其執(zhí)行中斷返回指令(斷返回指令(RETIRETI)之前,中斷請(qǐng)求信號(hào)必須撤除,否則將會(huì))之前,中斷請(qǐng)求信號(hào)必須撤除,否則將會(huì)再一次引起中斷而出錯(cuò)。再一次引起中斷而出錯(cuò)。 中斷請(qǐng)求撤除的方式有三種,即:中斷

28、請(qǐng)求撤除的方式有三種,即: 1 1 由單片微機(jī)內(nèi)部硬件自動(dòng)復(fù)位。由單片微機(jī)內(nèi)部硬件自動(dòng)復(fù)位。對(duì)于定時(shí)器計(jì)數(shù)器對(duì)于定時(shí)器計(jì)數(shù)器T0T0、T1 T1 的溢出中斷和采用跳變觸發(fā)的溢出中斷和采用跳變觸發(fā)方式的外部中斷請(qǐng)求,在方式的外部中斷請(qǐng)求,在CPUCPU響應(yīng)中斷后,由內(nèi)部硬件自動(dòng)清除。響應(yīng)中斷后,由內(nèi)部硬件自動(dòng)清除。中斷標(biāo)志中斷標(biāo)志TF0TF0和和TF1TF1、IE0IE0和和IE1IE1,而自動(dòng)撤除中斷請(qǐng)求。,而自動(dòng)撤除中斷請(qǐng)求。( (硬件置硬件置位,硬件清除位,硬件清除) ) 2 2應(yīng)用軟件清除相應(yīng)標(biāo)志。應(yīng)用軟件清除相應(yīng)標(biāo)志。對(duì)于串行接收發(fā)送中斷請(qǐng)求和對(duì)于串行接收發(fā)送中斷請(qǐng)求和80C5280C

29、52中的定時(shí)器計(jì)數(shù)中的定時(shí)器計(jì)數(shù)器器T2T2的溢出和捕獲中斷請(qǐng)求,在的溢出和捕獲中斷請(qǐng)求,在CPUCPU響應(yīng)中斷后,必須在中斷服響應(yīng)中斷后,必須在中斷服務(wù)程序中應(yīng)用軟件清除務(wù)程序中應(yīng)用軟件清除RIRI、TITI、TF2TF2和和 EXF2EXF2這些中斷標(biāo)志,才這些中斷標(biāo)志,才能撤除中斷。能撤除中斷。( (硬件置位,軟件清除硬件置位,軟件清除) ) 。3 3采用外加采用外加 硬件結(jié)合軟件清除中斷請(qǐng)求。硬件結(jié)合軟件清除中斷請(qǐng)求。對(duì)于采用電平觸發(fā)方式的外部中斷請(qǐng)求,中斷標(biāo)志的撤對(duì)于采用電平觸發(fā)方式的外部中斷請(qǐng)求,中斷標(biāo)志的撤消是自動(dòng)的,但中斷請(qǐng)求信號(hào)的低電平可能繼續(xù)存在,在以后消是自動(dòng)的,但中斷請(qǐng)

30、求信號(hào)的低電平可能繼續(xù)存在,在以后機(jī)器周期采樣時(shí)又會(huì)把已清機(jī)器周期采樣時(shí)又會(huì)把已清“0”0”的的IE0IE0、IE1IE1標(biāo)志重新置標(biāo)志重新置“1”1”,再次申請(qǐng)中斷。為保證在再次申請(qǐng)中斷。為保證在CPUCPU響應(yīng)中斷后、執(zhí)行返回指令前,撤響應(yīng)中斷后、執(zhí)行返回指令前,撤除中斷請(qǐng)求,必須考慮另外的措施,保證在中斷響應(yīng)后把中斷除中斷請(qǐng)求,必須考慮另外的措施,保證在中斷響應(yīng)后把中斷請(qǐng)求信號(hào)從低電平強(qiáng)制改變?yōu)楦唠娖健?稍谙到y(tǒng)中加入如圖請(qǐng)求信號(hào)從低電平強(qiáng)制改變?yōu)楦唠娖???稍谙到y(tǒng)中加入如圖5-3 5-3 所示電路。所示電路。從圖從圖5-3 5-3 中可看到,用中可看到,用D D觸發(fā)器鎖存外部中斷請(qǐng)求低電平

31、,并通過觸發(fā)器鎖存外部中斷請(qǐng)求低電平,并通過觸發(fā)器輸出端觸發(fā)器輸出端Q Q送或,所以送或,所以D D觸發(fā)器對(duì)外部中斷請(qǐng)求沒有影響。但觸發(fā)器對(duì)外部中斷請(qǐng)求沒有影響。但在中斷響應(yīng)后,為了撤消低電平引起的中斷請(qǐng)求,可利用在中斷響應(yīng)后,為了撤消低電平引起的中斷請(qǐng)求,可利用D D觸發(fā)器觸發(fā)器的直接置位端的直接置位端SDSD來實(shí)現(xiàn)。采用來實(shí)現(xiàn)。采用80C5180C51的一根的一根I/OI/O口線來控制口線來控制SDSD端。端。只要在只要在SDSD端輸入一個(gè)負(fù)脈沖即可使端輸入一個(gè)負(fù)脈沖即可使D D觸發(fā)器置觸發(fā)器置“1”1”,從而撤消了,從而撤消了低電平的中斷請(qǐng)求信號(hào)。低電平的中斷請(qǐng)求信號(hào)。( (硬件置位,硬

32、、軟件結(jié)合清除硬件置位,硬、軟件結(jié)合清除) ) 。所需負(fù)脈沖可以通過在中斷服務(wù)程序中增加以下二條指令所需負(fù)脈沖可以通過在中斷服務(wù)程序中增加以下二條指令得到:得到:ANL P1,#0FEH ;Q置置1(SD為直接置位端,低電平有效為直接置位端,低電平有效)ORL P1,#01H ;SD無效無效 使使P1.0輸出一個(gè)負(fù)脈沖,其持續(xù)時(shí)間輸出一個(gè)負(fù)脈沖,其持續(xù)時(shí)間為二個(gè)機(jī)器周期,足以使為二個(gè)機(jī)器周期,足以使D D觸發(fā)器置位,撤除低電平中斷請(qǐng)求。第二條指令是必要的,否則觸發(fā)器置位,撤除低電平中斷請(qǐng)求。第二條指令是必要的,否則D D觸發(fā)器的觸發(fā)器的Q Q端始終輸出端始終輸出“1”1”,無法再接受外部中斷請(qǐng)

33、求。,無法再接受外部中斷請(qǐng)求。從中斷請(qǐng)求發(fā)生直到被響應(yīng)去執(zhí)行中斷服務(wù)程序,這是從中斷請(qǐng)求發(fā)生直到被響應(yīng)去執(zhí)行中斷服務(wù)程序,這是一個(gè)很復(fù)雜的過程。而整個(gè)過程均在一個(gè)很復(fù)雜的過程。而整個(gè)過程均在CPUCPU的控制下有規(guī)律的進(jìn)行。的控制下有規(guī)律的進(jìn)行。中斷響應(yīng)過程的時(shí)序如圖中斷響應(yīng)過程的時(shí)序如圖5 54 4所示。所示。 中斷采樣中斷采樣中斷采樣是針對(duì)外部中斷請(qǐng)求信號(hào)進(jìn)行的,而內(nèi)部中斷中斷采樣是針對(duì)外部中斷請(qǐng)求信號(hào)進(jìn)行的,而內(nèi)部中斷請(qǐng)求都發(fā)生在芯片內(nèi)部,可以直接置位請(qǐng)求都發(fā)生在芯片內(nèi)部,可以直接置位TCONTCON或或SCONSCON中的中斷請(qǐng)中的中斷請(qǐng)求標(biāo)志。在每個(gè)機(jī)器周期的求標(biāo)志。在每個(gè)機(jī)器周期的

34、S5P2(S5P2(笫五狀態(tài)的第二節(jié)拍笫五狀態(tài)的第二節(jié)拍) )期間,期間,各中斷標(biāo)志采樣相應(yīng)的中斷源,并置入相應(yīng)標(biāo)志。各中斷標(biāo)志采樣相應(yīng)的中斷源,并置入相應(yīng)標(biāo)志。5.4 5.4 中斷響應(yīng)過程和響應(yīng)時(shí)間中斷響應(yīng)過程和響應(yīng)時(shí)間 中斷查詢中斷查詢 若查詢到某中斷標(biāo)志為若查詢到某中斷標(biāo)志為1,則按優(yōu)先級(jí)的高低進(jìn)行處理,則按優(yōu)先級(jí)的高低進(jìn)行處理,即響應(yīng)中斷。即響應(yīng)中斷。80C51的中斷請(qǐng)求都匯集在的中斷請(qǐng)求都匯集在TCON和和SCON二個(gè)特殊功二個(gè)特殊功能寄存器中。而能寄存器中。而CPU則在下一機(jī)器周期的則在下一機(jī)器周期的S6期間按優(yōu)先級(jí)的期間按優(yōu)先級(jí)的順序查詢各中斷標(biāo)志。先查詢高級(jí)中斷,再查詢低級(jí)中斷

35、。同順序查詢各中斷標(biāo)志。先查詢高級(jí)中斷,再查詢低級(jí)中斷。同級(jí)中斷按內(nèi)部中斷優(yōu)先級(jí)序列查詢。如果查詢到有中斷標(biāo)志位級(jí)中斷按內(nèi)部中斷優(yōu)先級(jí)序列查詢。如果查詢到有中斷標(biāo)志位為為“1” ,則表明有中斷請(qǐng)求發(fā)生,接著從相鄰的下一個(gè)機(jī)器,則表明有中斷請(qǐng)求發(fā)生,接著從相鄰的下一個(gè)機(jī)器周期的周期的S1狀態(tài)開始進(jìn)行中斷響應(yīng)。狀態(tài)開始進(jìn)行中斷響應(yīng)。由于中斷請(qǐng)求是隨機(jī)發(fā)生的,由于中斷請(qǐng)求是隨機(jī)發(fā)生的,CPU無法預(yù)先得知,因此無法預(yù)先得知,因此中斷查詢要在指令執(zhí)行的每個(gè)機(jī)器周期中不停地重復(fù)執(zhí)行。中斷查詢要在指令執(zhí)行的每個(gè)機(jī)器周期中不停地重復(fù)執(zhí)行。 中斷響應(yīng)中斷響應(yīng) 響應(yīng)中斷后,由硬件自動(dòng)生成長(zhǎng)調(diào)用指令響應(yīng)中斷后,由硬

36、件自動(dòng)生成長(zhǎng)調(diào)用指令“LCALL”, 其格式為其格式為L(zhǎng)CALL addr16,而,而addr16就是各中斷源的中斷矢量就是各中斷源的中斷矢量地址地址(參見表參見表5-1)。先將程序計(jì)數(shù)器先將程序計(jì)數(shù)器PC的內(nèi)容壓入堆棧進(jìn)行保護(hù),先低位的內(nèi)容壓入堆棧進(jìn)行保護(hù),先低位地址,后高位地址,同時(shí)堆棧指針地址,后高位地址,同時(shí)堆棧指針SP加加2。將對(duì)應(yīng)中斷源的中斷矢量地址裝入程序計(jì)數(shù)器將對(duì)應(yīng)中斷源的中斷矢量地址裝入程序計(jì)數(shù)器PC,去,去執(zhí)行中斷服務(wù)程序。由于各中斷矢量區(qū)僅執(zhí)行中斷服務(wù)程序。由于各中斷矢量區(qū)僅8個(gè)字節(jié),通常是在個(gè)字節(jié),通常是在中斷矢量區(qū)中安排一條無條件轉(zhuǎn)移指令,使程序執(zhí)行轉(zhuǎn)向在其中斷矢量區(qū)

37、中安排一條無條件轉(zhuǎn)移指令,使程序執(zhí)行轉(zhuǎn)向在其它地址中存放的中斷服務(wù)程序。它地址中存放的中斷服務(wù)程序。中斷服務(wù)程序由中斷矢量地址開始執(zhí)行,直至遇到中斷服務(wù)程序由中斷矢量地址開始執(zhí)行,直至遇到RETI指令為止。指令為止。 執(zhí)行中斷返回指令執(zhí)行中斷返回指令RETI,一是撤銷中斷申請(qǐng),一是撤銷中斷申請(qǐng),彈出斷點(diǎn)地址進(jìn)入彈出斷點(diǎn)地址進(jìn)入PC,先彈出高位地址,后彈出低位地址,先彈出高位地址,后彈出低位地址,同時(shí)堆棧指針同時(shí)堆棧指針SP減減2,恢復(fù)原程序的斷點(diǎn)地址執(zhí)行;二是恢復(fù),恢復(fù)原程序的斷點(diǎn)地址執(zhí)行;二是恢復(fù)中斷觸發(fā)器原先狀態(tài)。中斷觸發(fā)器原先狀態(tài)。中斷響應(yīng)是有條件的,在接受中斷申請(qǐng)時(shí),如遇下列情中斷響應(yīng)

38、是有條件的,在接受中斷申請(qǐng)時(shí),如遇下列情況之一時(shí),硬件生成的長(zhǎng)調(diào)用指令況之一時(shí),硬件生成的長(zhǎng)調(diào)用指令“LCALL”將被封鎖:將被封鎖: CPU正在執(zhí)行同級(jí)或高一級(jí)的中斷服務(wù)程序中。因?yàn)楫?dāng)一個(gè)正在執(zhí)行同級(jí)或高一級(jí)的中斷服務(wù)程序中。因?yàn)楫?dāng)一個(gè)中斷被響應(yīng)時(shí),其對(duì)應(yīng)的中斷優(yōu)先級(jí)觸發(fā)器被置中斷被響應(yīng)時(shí),其對(duì)應(yīng)的中斷優(yōu)先級(jí)觸發(fā)器被置“1”,封鎖了同,封鎖了同級(jí)和低級(jí)中斷;級(jí)和低級(jí)中斷;查詢中斷請(qǐng)求的機(jī)器周期不是執(zhí)行當(dāng)前指令的最后一個(gè)周期。查詢中斷請(qǐng)求的機(jī)器周期不是執(zhí)行當(dāng)前指令的最后一個(gè)周期。目的在于使當(dāng)前指令執(zhí)行完畢后,才能進(jìn)行中斷響應(yīng),以確保當(dāng)目的在于使當(dāng)前指令執(zhí)行完畢后,才能進(jìn)行中斷響應(yīng),以確保當(dāng)前指

39、令的完整執(zhí)行;前指令的完整執(zhí)行;當(dāng)前正在執(zhí)行當(dāng)前正在執(zhí)行RETI指令或執(zhí)行對(duì)指令或執(zhí)行對(duì)IE、IP的讀寫操作指令。的讀寫操作指令。80C51中斷系統(tǒng)的特性規(guī)定,在執(zhí)行完這些指令之后,必須再繼中斷系統(tǒng)的特性規(guī)定,在執(zhí)行完這些指令之后,必須再繼續(xù)執(zhí)行一條指令,然后才能響應(yīng)中斷。續(xù)執(zhí)行一條指令,然后才能響應(yīng)中斷。可以看出,中斷的執(zhí)行過程與調(diào)用子程序有許多相似點(diǎn),比如:可以看出,中斷的執(zhí)行過程與調(diào)用子程序有許多相似點(diǎn),比如: 都是中斷當(dāng)前正在執(zhí)行的程序,轉(zhuǎn)去執(zhí)行子程序或中斷都是中斷當(dāng)前正在執(zhí)行的程序,轉(zhuǎn)去執(zhí)行子程序或中斷服務(wù)程序。服務(wù)程序。 都是由硬件自動(dòng)地把斷點(diǎn)地址壓入堆棧,然后通過軟件都是由硬件自

40、動(dòng)地把斷點(diǎn)地址壓入堆棧,然后通過軟件完成現(xiàn)場(chǎng)保護(hù)。完成現(xiàn)場(chǎng)保護(hù)。 執(zhí)行完子程序或中斷服務(wù)程序后,都要通過軟件完成執(zhí)行完子程序或中斷服務(wù)程序后,都要通過軟件完成現(xiàn)場(chǎng)恢復(fù),并通過執(zhí)行返回指令,重新返回到斷點(diǎn)處,繼續(xù)往現(xiàn)場(chǎng)恢復(fù),并通過執(zhí)行返回指令,重新返回到斷點(diǎn)處,繼續(xù)往下執(zhí)行程序。下執(zhí)行程序。 二者都可以實(shí)現(xiàn)嵌套,如中斷嵌套和子程序嵌套。二者都可以實(shí)現(xiàn)嵌套,如中斷嵌套和子程序嵌套。但是中斷的執(zhí)行與調(diào)用子程序也有一些大的差別,比如:但是中斷的執(zhí)行與調(diào)用子程序也有一些大的差別,比如: 中斷請(qǐng)求信號(hào)可以由外部設(shè)備發(fā)出,是隨機(jī)的,比如中斷請(qǐng)求信號(hào)可以由外部設(shè)備發(fā)出,是隨機(jī)的,比如故障產(chǎn)生的中斷請(qǐng)求,比如按

41、鍵中斷等;子程序調(diào)用卻是由軟故障產(chǎn)生的中斷請(qǐng)求,比如按鍵中斷等;子程序調(diào)用卻是由軟件編排好的。件編排好的。 中斷響應(yīng)后由固定的矢量地址轉(zhuǎn)入中斷服務(wù)程序,而中斷響應(yīng)后由固定的矢量地址轉(zhuǎn)入中斷服務(wù)程序,而子程序地址由軟件設(shè)定。子程序地址由軟件設(shè)定。 中斷響應(yīng)是受控的,其響應(yīng)時(shí)間會(huì)受一些因素影響;中斷響應(yīng)是受控的,其響應(yīng)時(shí)間會(huì)受一些因素影響;子程序響應(yīng)時(shí)間是固定的。子程序響應(yīng)時(shí)間是固定的。 當(dāng)單片微機(jī)應(yīng)用于實(shí)時(shí)控制系統(tǒng)時(shí),往往非常在意中斷的當(dāng)單片微機(jī)應(yīng)用于實(shí)時(shí)控制系統(tǒng)時(shí),往往非常在意中斷的響應(yīng)時(shí)間,比如出現(xiàn)故障后,響應(yīng)時(shí)間,比如出現(xiàn)故障后,CPU在多長(zhǎng)時(shí)間里能夠響應(yīng)和處理。在多長(zhǎng)時(shí)間里能夠響應(yīng)和處理

42、。一般來說,在單級(jí)中斷系統(tǒng)中,中斷的響應(yīng)時(shí)間最短為一般來說,在單級(jí)中斷系統(tǒng)中,中斷的響應(yīng)時(shí)間最短為3個(gè)個(gè)機(jī)器周期,最長(zhǎng)為機(jī)器周期,最長(zhǎng)為8個(gè)機(jī)器周期。個(gè)機(jī)器周期。當(dāng)中斷請(qǐng)求標(biāo)志位查詢占當(dāng)中斷請(qǐng)求標(biāo)志位查詢占1個(gè)機(jī)器周期,而這個(gè)機(jī)器周期個(gè)機(jī)器周期,而這個(gè)機(jī)器周期又恰好是指令的最后一個(gè)機(jī)器周期,在這個(gè)機(jī)器周期結(jié)束后,又恰好是指令的最后一個(gè)機(jī)器周期,在這個(gè)機(jī)器周期結(jié)束后,CPU即響應(yīng)中斷,產(chǎn)生硬件長(zhǎng)調(diào)用即響應(yīng)中斷,產(chǎn)生硬件長(zhǎng)調(diào)用LCALL指令,執(zhí)行這條長(zhǎng)調(diào)指令,執(zhí)行這條長(zhǎng)調(diào)用指令需要用指令需要2個(gè)機(jī)器周期,這樣,中斷響應(yīng)時(shí)間為個(gè)機(jī)器周期,這樣,中斷響應(yīng)時(shí)間為3個(gè)機(jī)器周期。個(gè)機(jī)器周期。中斷響應(yīng)時(shí)間最長(zhǎng)

43、為中斷響應(yīng)時(shí)間最長(zhǎng)為8個(gè)機(jī)器周期。如果個(gè)機(jī)器周期。如果CPU正在執(zhí)行的正在執(zhí)行的是是RETI指令或訪問指令或訪問IP、IE指令,則等待時(shí)間不會(huì)多于指令,則等待時(shí)間不會(huì)多于2個(gè)機(jī)器個(gè)機(jī)器周期,而中斷系統(tǒng)規(guī)定把這幾條指令執(zhí)行完必須再繼續(xù)執(zhí)行一周期,而中斷系統(tǒng)規(guī)定把這幾條指令執(zhí)行完必須再繼續(xù)執(zhí)行一條指令后才能響應(yīng)中斷,如這條指令恰好是條指令后才能響應(yīng)中斷,如這條指令恰好是4個(gè)機(jī)器周期長(zhǎng)的指?jìng)€(gè)機(jī)器周期長(zhǎng)的指令令(比如乘法指令比如乘法指令MUL或除法指令或除法指令DIV) ,再加上執(zhí)行長(zhǎng)調(diào)用指,再加上執(zhí)行長(zhǎng)調(diào)用指令令LCALL所需所需2個(gè)機(jī)器周期,總共需要個(gè)機(jī)器周期,總共需要8個(gè)機(jī)器周期。個(gè)機(jī)器周期。如

44、果中斷請(qǐng)求被前面所列三個(gè)條件之一所阻止,不能產(chǎn)如果中斷請(qǐng)求被前面所列三個(gè)條件之一所阻止,不能產(chǎn)生硬件長(zhǎng)調(diào)用生硬件長(zhǎng)調(diào)用LCALL指令,那么所需的響應(yīng)時(shí)間就更長(zhǎng)些。如指令,那么所需的響應(yīng)時(shí)間就更長(zhǎng)些。如果正在處理同級(jí)或優(yōu)先級(jí)更高的中斷,那么中斷響應(yīng)的時(shí)間還果正在處理同級(jí)或優(yōu)先級(jí)更高的中斷,那么中斷響應(yīng)的時(shí)間還需取決于處理中的中斷服務(wù)程序的執(zhí)行時(shí)間。需取決于處理中的中斷服務(wù)程序的執(zhí)行時(shí)間。在在80C51系列單片微機(jī)中,一般只有兩個(gè)外部中斷請(qǐng)求系列單片微機(jī)中,一般只有兩個(gè)外部中斷請(qǐng)求輸入端輸入端INT0,INT1 。當(dāng)某個(gè)系統(tǒng)需要多個(gè)外部中斷源時(shí),可以。當(dāng)某個(gè)系統(tǒng)需要多個(gè)外部中斷源時(shí),可以通過增加通

45、過增加“OC門門” 結(jié)合軟件來擴(kuò)展;當(dāng)定時(shí)器結(jié)合軟件來擴(kuò)展;當(dāng)定時(shí)器/計(jì)數(shù)器在系統(tǒng)計(jì)數(shù)器在系統(tǒng)中有空余時(shí),也可以通過對(duì)計(jì)數(shù)器計(jì)數(shù)長(zhǎng)度的巧妙設(shè)置,使定中有空余時(shí),也可以通過對(duì)計(jì)數(shù)器計(jì)數(shù)長(zhǎng)度的巧妙設(shè)置,使定時(shí)器時(shí)器/計(jì)數(shù)器的外部輸入腳計(jì)數(shù)器的外部輸入腳(TO或或T1) 成為外部中斷請(qǐng)求輸入端。成為外部中斷請(qǐng)求輸入端。5.5 外部中斷源的擴(kuò)展外部中斷源的擴(kuò)展引入芯片本身的外部中斷請(qǐng)求輸入端(引入芯片本身的外部中斷請(qǐng)求輸入端(INT0、INT1)就)就可很方便地?cái)U(kuò)展多個(gè)外部中斷源。圖可很方便地?cái)U(kuò)展多個(gè)外部中斷源。圖55 就是占用一個(gè)就是占用一個(gè)80C51的的 INT0(或(或INT1)擴(kuò)展)擴(kuò)展4個(gè)外

46、部中斷源的電路。個(gè)外部中斷源的電路。4個(gè)擴(kuò)展外部中斷源中有一個(gè)或幾個(gè)出現(xiàn)高電平,反相器個(gè)擴(kuò)展外部中斷源中有一個(gè)或幾個(gè)出現(xiàn)高電平,反相器輸出為輸出為0,引起,引起INT0低電平觸發(fā)中斷,所以這些中斷源都是電低電平觸發(fā)中斷,所以這些中斷源都是電平觸發(fā)方式。當(dāng)滿足外部中斷請(qǐng)求條件時(shí),則平觸發(fā)方式。當(dāng)滿足外部中斷請(qǐng)求條件時(shí),則CPU響應(yīng)中斷,響應(yīng)中斷,轉(zhuǎn)入轉(zhuǎn)入0003H單元開始執(zhí)行中斷服務(wù)程序。單元開始執(zhí)行中斷服務(wù)程序。在中斷服務(wù)程序中,由軟件設(shè)定的順序查詢外中斷哪一在中斷服務(wù)程序中,由軟件設(shè)定的順序查詢外中斷哪一位是高電平,然后進(jìn)入該中斷處理程序。查詢的順序就是外部位是高電平,然后進(jìn)入該中斷處理程序

47、。查詢的順序就是外部擴(kuò)展中斷源的中斷優(yōu)先級(jí)順序。外部中斷源查詢的流程圖示于擴(kuò)展中斷源的中斷優(yōu)先級(jí)順序。外部中斷源查詢的流程圖示于圖圖56。INT0的中斷服務(wù)程序如下:的中斷服務(wù)程序如下:PINTO:PUSH PSW ;保護(hù)現(xiàn)場(chǎng);保護(hù)現(xiàn)場(chǎng) PUSH ACC JB P1.0, LOOP1 ;轉(zhuǎn)向中斷服務(wù)程序;轉(zhuǎn)向中斷服務(wù)程序1 JB P1.l,LOOP2 ;轉(zhuǎn)向中斷服務(wù)程序;轉(zhuǎn)向中斷服務(wù)程序2 JB P1.2,LOOP3 ;轉(zhuǎn)向中斷服務(wù)程序;轉(zhuǎn)向中斷服務(wù)程序3 JB P1.3,LOOP4 ;轉(zhuǎn)向中斷服務(wù)程序;轉(zhuǎn)向中斷服務(wù)程序4INTEND:POP ACC ;恢復(fù)現(xiàn)場(chǎng);恢復(fù)現(xiàn)場(chǎng) POP PSW RE

48、TILOOP1:;中斷服務(wù)程序;中斷服務(wù)程序1 AJMP INTENDLOOP2:;中斷服務(wù)程序;中斷服務(wù)程序2 AJMP INTENDLOOP3:;中斷服務(wù)程序;中斷服務(wù)程序3 AJMP INTENDLOOP4:;中斷服務(wù)程序;中斷服務(wù)程序4 AJMP INTEND從程序中可以看出,這里定義的擴(kuò)展外中斷源從程序中可以看出,這里定義的擴(kuò)展外中斷源1的優(yōu)先級(jí)最高,的優(yōu)先級(jí)最高,擴(kuò)展外中斷源擴(kuò)展外中斷源4的優(yōu)先級(jí)最低,所以查詢的順序從的優(yōu)先級(jí)最低,所以查詢的順序從P1.0開始。開始。 利用利用T0或或T1的外部事件輸入引腳的外部事件輸入引腳T0、T1作為邊沿觸發(fā)作為邊沿觸發(fā)的外部中斷源。這時(shí)應(yīng)設(shè)置

49、定時(shí)器的外部中斷源。這時(shí)應(yīng)設(shè)置定時(shí)器/計(jì)數(shù)器為計(jì)數(shù)器方式,而計(jì)計(jì)數(shù)器為計(jì)數(shù)器方式,而計(jì)數(shù)常數(shù)為滿刻度值。外部輸入的脈沖在負(fù)跳變時(shí)有效,計(jì)數(shù)器數(shù)常數(shù)為滿刻度值。外部輸入的脈沖在負(fù)跳變時(shí)有效,計(jì)數(shù)器加加1后即溢出,向后即溢出,向CPU申請(qǐng)中斷。申請(qǐng)中斷。如果以如果以T0、T1的計(jì)數(shù)脈沖輸入作為外部中斷請(qǐng)求輸入,的計(jì)數(shù)脈沖輸入作為外部中斷請(qǐng)求輸入,T0、T1的中斷矢量用做第三、笫四個(gè)擴(kuò)展的外部中斷矢量,的中斷矢量用做第三、笫四個(gè)擴(kuò)展的外部中斷矢量,T0、T1的中斷服務(wù)程序入口地址作為擴(kuò)展的外部中斷服務(wù)入口地址,的中斷服務(wù)程序入口地址作為擴(kuò)展的外部中斷服務(wù)入口地址,即實(shí)現(xiàn)了外部中斷的擴(kuò)展。即實(shí)現(xiàn)了外部

50、中斷的擴(kuò)展。當(dāng)當(dāng)T2用做波特率發(fā)生器時(shí),若用做波特率發(fā)生器時(shí),若EXEN2置置1,則,則T2EX端的端的信號(hào)產(chǎn)生負(fù)跳變時(shí),信號(hào)產(chǎn)生負(fù)跳變時(shí),EXF2將置將置1,但不會(huì)發(fā)生重裝載或捕獲操,但不會(huì)發(fā)生重裝載或捕獲操作。這時(shí),作。這時(shí),T2EX可以作為一個(gè)附加的外部中斷源??梢宰鳛橐粋€(gè)附加的外部中斷源。 例例 把外部中斷請(qǐng)求信號(hào)把外部中斷請(qǐng)求信號(hào)2連到連到T1引腳上,引腳上,T1設(shè)為方式設(shè)為方式2,即,即8位自動(dòng)重裝載方式,時(shí)間常數(shù)設(shè)為滿刻度值位自動(dòng)重裝載方式,時(shí)間常數(shù)設(shè)為滿刻度值FFH外部中斷的服務(wù)程序入口地址存放在外部中斷的服務(wù)程序入口地址存放在T1的中斷矢量區(qū)中。其初始的中斷矢量區(qū)中。其初始化

51、程序段如下:化程序段如下:ORG0000HAJMP MAINORG001BH;T1中斷矢量用作外部中斷中斷矢量用作外部中斷2;的中斷矢量;的中斷矢量LJMP INT2ORG0030HMAIN:MOVTMOD,#60H ;設(shè);設(shè)T1計(jì)數(shù)器方式計(jì)數(shù)器方式2MOVTL1,#0FFH;置;置T1計(jì)數(shù)常數(shù)計(jì)數(shù)常數(shù)MOVTH1,#0FFHSETB EA;開中斷;開中斷SETB ET1;允許計(jì)數(shù)器;允許計(jì)數(shù)器1中斷中斷SETB TR1;啟動(dòng)計(jì)數(shù);啟動(dòng)計(jì)數(shù)-INT2: -;外部中斷;外部中斷2服務(wù)程序服務(wù)程序80C51的中斷系統(tǒng)中,允許用戶單步運(yùn)行程序,這樣用的中斷系統(tǒng)中,允許用戶單步運(yùn)行程序,這樣用戶可以很

52、方便的進(jìn)行程序調(diào)試。一般是設(shè)置一個(gè)單步鍵戶可以很方便的進(jìn)行程序調(diào)試。一般是設(shè)置一個(gè)單步鍵(STEP) ,用以產(chǎn)生脈沖,按一次用以產(chǎn)生脈沖,按一次STEP鍵就執(zhí)行一條指令,通過檢查結(jié)果鍵就執(zhí)行一條指令,通過檢查結(jié)果來檢查每條指令執(zhí)行的正確與否。來檢查每條指令執(zhí)行的正確與否。80C51中斷結(jié)構(gòu)有一個(gè)重要特性,即執(zhí)行中斷返回指令中斷結(jié)構(gòu)有一個(gè)重要特性,即執(zhí)行中斷返回指令RETI后,必須至少執(zhí)行一條其它指令后,才能響應(yīng)新的中斷。后,必須至少執(zhí)行一條其它指令后,才能響應(yīng)新的中斷。典型方法是使用外部中斷,并將其設(shè)為電平觸發(fā)方式。典型方法是使用外部中斷,并將其設(shè)為電平觸發(fā)方式。硬件上,把按鍵產(chǎn)生的脈沖連到硬

53、件上,把按鍵產(chǎn)生的脈沖連到 INT0(P3.2)引腳,作為引腳,作為外部中斷外部中斷0的中斷請(qǐng)求信號(hào),并把電路設(shè)計(jì)為不按鍵時(shí)為低電平,的中斷請(qǐng)求信號(hào),并把電路設(shè)計(jì)為不按鍵時(shí)為低電平,按一次鍵產(chǎn)生一個(gè)正脈沖。按一次鍵產(chǎn)生一個(gè)正脈沖。5.6 80C51的單步操作的單步操作 軟件上,需編制外部中斷軟件上,需編制外部中斷0的中斷服務(wù)程序,在中斷服務(wù)程序的的中斷服務(wù)程序,在中斷服務(wù)程序的末尾為末尾為 JNB P3.2,$;INT0 =0 ,則等待,則等待JB P3.2,$;INT0=1 ,則等待,則等待RETI;中斷返回;中斷返回在沒有按鍵時(shí),在沒有按鍵時(shí),INT0=0 ,中斷請(qǐng)求有效,響應(yīng)中斷后,中斷

54、請(qǐng)求有效,響應(yīng)中斷后執(zhí)行中斷服務(wù)程序,在執(zhí)行到執(zhí)行中斷服務(wù)程序,在執(zhí)行到JNB P3.2,$指令時(shí)等待。當(dāng)按指令時(shí)等待。當(dāng)按下單步鍵后產(chǎn)生一個(gè)正脈沖,執(zhí)行中斷返回,再執(zhí)行一條指令下單步鍵后產(chǎn)生一個(gè)正脈沖,執(zhí)行中斷返回,再執(zhí)行一條指令后,后, 由于已為低電平,所以單片微機(jī)再次響應(yīng)中斷,并進(jìn)入中由于已為低電平,所以單片微機(jī)再次響應(yīng)中斷,并進(jìn)入中斷服務(wù)程序等待。從而實(shí)現(xiàn)了按一次鍵執(zhí)行一條指令的功能。斷服務(wù)程序等待。從而實(shí)現(xiàn)了按一次鍵執(zhí)行一條指令的功能。 80C51單片微機(jī)中,共有單片微機(jī)中,共有5個(gè)中斷源,由個(gè)中斷源,由4個(gè)特殊功能寄存?zhèn)€特殊功能寄存器器TCON、SCON、IE和和IP進(jìn)行管理和控制

55、。對(duì)于進(jìn)行管理和控制。對(duì)于80C5280C32單片微機(jī),增加了一個(gè)單片微機(jī),增加了一個(gè)16位的定時(shí)器計(jì)數(shù)器位的定時(shí)器計(jì)數(shù)器T2中斷請(qǐng)求。中斷請(qǐng)求。 在在80C51單片微機(jī)中,需要用軟件對(duì)以下單片微機(jī)中,需要用軟件對(duì)以下5個(gè)內(nèi)容進(jìn)行設(shè)置:個(gè)內(nèi)容進(jìn)行設(shè)置: 中斷服務(wù)程序入口地址的設(shè)定。中斷服務(wù)程序入口地址的設(shè)定。 某一中斷源中斷請(qǐng)求的允許與禁止。某一中斷源中斷請(qǐng)求的允許與禁止。 對(duì)于外部中斷請(qǐng)求,還需進(jìn)行觸發(fā)方式的設(shè)定。對(duì)于外部中斷請(qǐng)求,還需進(jìn)行觸發(fā)方式的設(shè)定。 各中斷源優(yōu)先級(jí)別的設(shè)定。各中斷源優(yōu)先級(jí)別的設(shè)定。 CPU開中斷與關(guān)中斷。開中斷與關(guān)中斷。 5.7 中斷服務(wù)程序的設(shè)計(jì)中斷服務(wù)程序的設(shè)計(jì)

56、中斷程序一般包含中斷控制程序和中斷服務(wù)程序兩部分。中斷程序一般包含中斷控制程序和中斷服務(wù)程序兩部分。 中斷控制程序即中斷初始化程序,一般不獨(dú)立編寫,而是包中斷控制程序即中斷初始化程序,一般不獨(dú)立編寫,而是包含在主程序中,根據(jù)上述的含在主程序中,根據(jù)上述的5點(diǎn)通過編寫幾條指令來實(shí)現(xiàn)。點(diǎn)通過編寫幾條指令來實(shí)現(xiàn)。例例 試編寫設(shè)置外部中斷試編寫設(shè)置外部中斷INT0和串行接口中斷為高優(yōu)先級(jí),和串行接口中斷為高優(yōu)先級(jí),外部中斷外部中斷INT1為低優(yōu)先級(jí)。屏蔽為低優(yōu)先級(jí)。屏蔽T0 和和T1中斷請(qǐng)求的初始化程中斷請(qǐng)求的初始化程序段。序段。 根據(jù)題目要求,只要能將中斷請(qǐng)求優(yōu)先級(jí)寄存器根據(jù)題目要求,只要能將中斷請(qǐng)

57、求優(yōu)先級(jí)寄存器IP的第的第0、4位置位置“l(fā)”。其余位置。其余位置“0”,將中斷請(qǐng)求允許寄存器的第,將中斷請(qǐng)求允許寄存器的第0、2、4、7位置位置“l(fā)”,其余位置,其余位置“0”就可以了。就可以了。編程如下:編程如下:ORG 0000HSJMP MAINORG 0003HLJMP INT0INT;設(shè)外部中斷中斷矢量;設(shè)外部中斷中斷矢量ORG 0013HLJMP INT1INT;設(shè)外部中斷中斷矢量;設(shè)外部中斷中斷矢量ORG 0023HLJMP SIOINT;設(shè)串行口中斷矢量;設(shè)串行口中斷矢量ORG 0030HMAIN:MOV IP,#00010001B ;設(shè)外部中斷;設(shè)外部中斷INT0和和 ;串行口中斷為高優(yōu)先級(jí);串行口中斷為高優(yōu)先級(jí)MOV IE#10010101B;允許;允許INT0、INT1、;串行口中斷,開;串行口中斷,開CPU中斷中斷 中斷服務(wù)程序是一種為中斷源的特定事態(tài)要求服務(wù)的獨(dú)立中斷服務(wù)程序是一種為中斷源的特定事態(tài)要求服務(wù)的獨(dú)立程序段,以中斷返回

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論