單片機(jī)原理及接口技術(shù)-第5章課件_第1頁(yè)
單片機(jī)原理及接口技術(shù)-第5章課件_第2頁(yè)
單片機(jī)原理及接口技術(shù)-第5章課件_第3頁(yè)
單片機(jī)原理及接口技術(shù)-第5章課件_第4頁(yè)
單片機(jī)原理及接口技術(shù)-第5章課件_第5頁(yè)
已閱讀5頁(yè),還剩44頁(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)介

單片機(jī)原理及接口技術(shù)主編:張毅剛

主講:張毅剛第5章AT89C51單片機(jī)的中斷系統(tǒng)在單片機(jī)中,中斷技術(shù)主要用于實(shí)時(shí)測(cè)控。就是要求單片機(jī)能快速響應(yīng)和及時(shí)處理單片機(jī)外部事件或內(nèi)部事件所提出的中斷服務(wù)請(qǐng)求,由于中斷請(qǐng)求是隨機(jī)發(fā)出的,就要求單片機(jī)內(nèi)有一個(gè)中斷系統(tǒng)。本章應(yīng)重點(diǎn)掌握中斷系統(tǒng)有關(guān)的特殊功能寄存器,掌握中斷系統(tǒng)的特性并能正確使用,中斷系統(tǒng)軟件設(shè)計(jì):初始化編程,中斷服務(wù)子程序設(shè)計(jì)。

CPU正在執(zhí)行程序時(shí),單片機(jī)外部或內(nèi)部發(fā)生的某一事件,請(qǐng)求CPU迅速去處理。5.1中斷的概念

CPU暫時(shí)中止當(dāng)前的工作,轉(zhuǎn)到中斷服務(wù)處理程序處理所發(fā)生的事件。處理完該事件后,再回到原來(lái)被中止的地方,繼續(xù)原來(lái)的工作,這稱為中斷。

此過(guò)程,稱為CPU的中斷響應(yīng)過(guò)程。中斷源:產(chǎn)生中斷的請(qǐng)求源稱為中斷源。中斷源向CPU提出的處理請(qǐng)求,稱為中斷請(qǐng)求。中斷系統(tǒng):能夠?qū)崿F(xiàn)中斷處理功能的部件稱為中斷系統(tǒng);中斷嵌套:正在執(zhí)行低級(jí)中斷服務(wù)程序時(shí),被高優(yōu)先級(jí)中斷請(qǐng)求中斷。 采用中斷技術(shù)完全消除了單片機(jī)采用軟件定時(shí)查詢操作方式中的處理不及時(shí)現(xiàn)象,大大地提高了CPU的工作效率。因此,單片機(jī)的片內(nèi)硬件中都帶有中斷系統(tǒng)。5.1中斷的概念8051有5個(gè)中斷請(qǐng)求源,兩個(gè)中斷優(yōu)先級(jí),實(shí)現(xiàn)兩級(jí)中斷嵌套。五個(gè)中斷請(qǐng)求源:(1).INT0

——外部中斷請(qǐng)求0,由引腳INT0(12腳P3.2)輸入,中斷請(qǐng)求標(biāo)志為IE0。(2).INT1

——外部中斷請(qǐng)求1,由引腳INT1(13腳P3.3)輸入,中斷請(qǐng)求標(biāo)志為IE1。(3).定時(shí)器/計(jì)數(shù)器T0溢出中斷請(qǐng)求,中斷請(qǐng)求標(biāo)志為TF0。(4).定時(shí)器/計(jì)數(shù)器T1溢出中斷請(qǐng)求,中斷請(qǐng)求標(biāo)志為TF1。(5).串行口中斷請(qǐng)求,中斷請(qǐng)求標(biāo)志為TI或RI。5.2AT89C51中斷系統(tǒng)的結(jié)構(gòu)5.2.1中斷請(qǐng)求源5.2AT89C51中斷系統(tǒng)的結(jié)構(gòu)5.2.1中斷請(qǐng)求源特殊功能寄存器TCON和SCON的相應(yīng)位鎖存5個(gè)中斷請(qǐng)求源的中斷請(qǐng)求標(biāo)志。1.TCON寄存器——定時(shí)器/計(jì)數(shù)器的控制寄存器,字節(jié)地址為88H。5.2AT89C51中斷系統(tǒng)的結(jié)構(gòu)5.2.2中斷請(qǐng)求標(biāo)志寄存器各標(biāo)志位的功能:

(1).TF1——T1溢出中斷請(qǐng)求標(biāo)志位。

T1計(jì)數(shù)溢出時(shí),由硬件置“1”TF1,向CPU申請(qǐng)中斷,CPU響應(yīng)TF1中斷時(shí),硬件自動(dòng)清“0”TF1,TF1也可由軟件清0。(2).TF0——T0的溢出中斷請(qǐng)求標(biāo)志位,功能和TF1類似。溢出:計(jì)數(shù)到最大,再加1=0,溢出。1.TCON寄存器——定時(shí)器/計(jì)數(shù)器的控制寄存器,字節(jié)地址為88H。5.2AT89C51中斷系統(tǒng)的結(jié)構(gòu)5.2.2中斷請(qǐng)求標(biāo)志寄存器(3).IE1——外部中斷請(qǐng)求1的中斷請(qǐng)求標(biāo)志位。IE1=1表示外部中斷1有中斷請(qǐng)求。響應(yīng)中斷時(shí),硬件自動(dòng)清“0”

IE1。(4).IE0——外部中斷請(qǐng)求0的中斷請(qǐng)求標(biāo)志位。(5).IT1——選擇外部中斷請(qǐng)求1中斷觸發(fā)方式,由軟件置“1”或清“0”

IT1=0,選擇電平觸發(fā)方式,“0”有效。

IT1=1,選擇跳沿觸發(fā)方式?!啊庇行В?6).IT0——選擇外部中斷請(qǐng)求0中斷觸發(fā)方式,意義與IT1類似。注意:TR1、TR02個(gè)位與中斷無(wú)關(guān)。2.SCON寄存器

——串行口控制寄存器,字節(jié)地址為98H。5.2AT89C51中斷系統(tǒng)的結(jié)構(gòu)5.2.2中斷請(qǐng)求標(biāo)志寄存器各標(biāo)志位的功能:

(1).TI——發(fā)送中斷請(qǐng)求標(biāo)志位。串口每發(fā)送完一幀串行數(shù)據(jù)后,硬件自動(dòng)置“1”TI。必須在中斷服務(wù)程序中用軟件對(duì)TI標(biāo)志清“0”。(2).RI——接收中斷請(qǐng)求標(biāo)志位。串口接收完一個(gè)數(shù)據(jù)幀,硬件自動(dòng)置“1”RI標(biāo)志。必須在中斷服務(wù)程序中用軟件對(duì)RI標(biāo)志清“0”。5.3中斷控制

5.3.1中斷允許寄存器

IE

IE中斷允許寄存器

,字節(jié)地址A8H,可位尋址。CPU對(duì)中斷源的開(kāi)放或屏蔽,由IE中斷允許寄存器進(jìn)行控制。IE對(duì)中斷的開(kāi)放和關(guān)閉為兩級(jí)控制

總的開(kāi)關(guān)中斷控制位

EA(IE.7位):EA=0,所有中斷請(qǐng)求被屏蔽。EA=1,CPU開(kāi)放中斷,但五個(gè)中斷源的中斷請(qǐng)求是否允許,還要由IE中的5個(gè)中斷請(qǐng)求允許控制位決定。5.3中斷控制

5.3.1中斷允許寄存器

IEIE中其它各位的功能如下:

(1).ES:串行口中斷允許位。0:禁止中斷;1:允許中斷。(2).ET1:定時(shí)器/計(jì)數(shù)器T1的溢出中斷允許位

0:禁止中斷;1:允許中斷(3).EX1:外部中斷1中斷允許位。0:禁止中斷;1:允許中斷(4).ET0:定時(shí)器/計(jì)數(shù)器T0的溢出中斷允許位

0:禁止中斷;1:允許中斷(5).EX0:外部中斷0中斷允許位。0:禁止中斷;1:允許中斷AT89C51復(fù)位后,IE清0,所有中斷請(qǐng)求被禁止。5.3中斷控制

5.3.1中斷允許寄存器

IE改變IE的內(nèi)容,可用字節(jié)操作指令,也可用位操作指令。

例5-1

若允許片內(nèi)2個(gè)定時(shí)器/計(jì)數(shù)器中斷,禁止其它中斷源的中斷請(qǐng)求。編寫設(shè)置IE的相應(yīng)程序段(1).

用字節(jié)操作指令編寫

MOVIE,#8AH ;8AH=10001010B100010105.3中斷控制

5.3.1中斷允許寄存器

IE(2).用位操作指令編寫

CLRES ;禁止串行口中斷

CLREX1 ;禁止外部中斷1中斷

CLREX0 ;禁止外部中斷0中斷

SETBET0 ;允許定時(shí)器/計(jì)數(shù)器T0中斷

SETBET1 ;允許定時(shí)器/計(jì)數(shù)器T1中斷

SETBEA ;CPU開(kāi)中斷100010105.3.2中斷優(yōu)先級(jí)寄存器IP

AT89C51有兩個(gè)中斷優(yōu)先級(jí):低優(yōu)先級(jí)、高優(yōu)先級(jí)??蓪?shí)現(xiàn)兩級(jí)中斷嵌套。可歸納為下面兩條基本規(guī)則:(1).低優(yōu)先級(jí)可被高優(yōu)先級(jí)中斷,反之則不能。(2).同級(jí)中斷不會(huì)被它的同級(jí)中斷源所中斷。5.3中斷控制

5.3.2中斷優(yōu)先級(jí)寄存器IP

IP中斷優(yōu)先級(jí)寄存器,其字節(jié)地址為B8H,控制中斷源優(yōu)先級(jí)別。IP各位的含義如下:

(1).PS:串行口中斷優(yōu)先級(jí)控制位1:高優(yōu)先級(jí);0:低優(yōu)先級(jí)(2).PT1:定時(shí)器T1中斷優(yōu)先級(jí)控制位

1:高優(yōu)先級(jí);0:低優(yōu)先級(jí)(3).PX1:外部中斷1中斷優(yōu)先級(jí)控制位1:高優(yōu)先級(jí);0:低優(yōu)先級(jí)(4).PT0:定時(shí)器T0中斷優(yōu)先級(jí)控制位

1:高優(yōu)先級(jí);0:低優(yōu)先級(jí)(5).PX0:外部中斷0中斷優(yōu)先級(jí)控制位1:高優(yōu)先級(jí);0:低優(yōu)先級(jí)由軟件可改變各中斷源的中斷優(yōu)先級(jí)。5.3中斷控制

5.3.2中斷優(yōu)先級(jí)寄存器IP89C51的中斷系統(tǒng)有兩個(gè)不可尋址的“優(yōu)先級(jí)激活觸發(fā)器”:一個(gè)用來(lái)指示某高優(yōu)先級(jí)的中斷正在執(zhí)行,所有后來(lái)中斷均被阻止。另一個(gè)用來(lái)指示某低優(yōu)先級(jí)的中斷正在執(zhí)行,所有同級(jí)中斷都被阻止,但不阻斷高優(yōu)先級(jí)的中斷請(qǐng)求。表5-1中斷查詢次序中斷源中斷級(jí)別外部中斷0 最高T0溢出中斷外部中斷1T1溢出中斷串行口中斷 最低

同時(shí)收到幾個(gè)同一優(yōu)先級(jí)的中斷請(qǐng)求時(shí),優(yōu)先響應(yīng)哪一個(gè)中斷,取決于內(nèi)部的查詢順序。查詢順序如表5-1:改變IP的內(nèi)容,可用字節(jié)操作指令,也可用位操作指令。5.3中斷控制

5.3.2中斷優(yōu)先級(jí)寄存器IP例5-2設(shè)置IP寄存器,使2個(gè)外中斷請(qǐng)求為高優(yōu)先級(jí),其它為低優(yōu)先級(jí)(1).用位操作指令

SETBPX0 ;2個(gè)外中斷為高優(yōu)先級(jí)

SETBPX1 CLRPS ;串口為低優(yōu)先級(jí)中斷

CLRPT0 ;2個(gè)定時(shí)器/計(jì)數(shù)器低優(yōu)先級(jí)中斷

CLRPT1(2).用字節(jié)操作指令

MOVIP,#05H ;或MOV0B8H,#05H;000001015.3中斷控制

中斷響應(yīng)的主要過(guò)程:首先由硬件自動(dòng)生成一條長(zhǎng)調(diào)用指令:

LCALL addr165.4響應(yīng)中斷請(qǐng)求的條件

表5-2 中斷入口地址表中斷源

入口地址外部中斷0

0003H定時(shí)器/計(jì)數(shù)器T0 000BH外部中斷1 0013H定時(shí)器/計(jì)數(shù)器T1 001BH串行口中斷 0023H接著就由CPU執(zhí)行該指令,將PC的內(nèi)容壓入堆棧以保護(hù)斷點(diǎn),再將中斷入口地址裝入PC。各中斷源服務(wù)程序入口地址固定。如表5-2所示:一般是在入口地址處放一條跳轉(zhuǎn)指令,轉(zhuǎn)移到相應(yīng)中斷服務(wù)程序。遇到下列三種情況之一時(shí),不能立即響應(yīng)中斷(1).CPU正在處理同級(jí)的或更高優(yōu)先級(jí)的中斷。(2).硬件查詢到中斷標(biāo)志時(shí)機(jī)器周期不是當(dāng)前正在執(zhí)行指令的最后一個(gè)機(jī)器周期。只有當(dāng)前指令執(zhí)行完畢后,才能響應(yīng)中斷。(3).正在執(zhí)行的指令是RETI或是訪問(wèn)IE或IP的指令。需要再去執(zhí)行完一條指令,才能響應(yīng)新的中斷請(qǐng)求。

如果存在上述三種情況之一,CPU將丟棄中斷查詢結(jié)果,不能立即對(duì)中斷進(jìn)行響應(yīng)。但中斷標(biāo)志仍然存在,滿足條件后仍會(huì)響應(yīng)。5.4響應(yīng)中斷請(qǐng)求的條件

設(shè)計(jì)者使用外部中斷時(shí),有時(shí)需要考慮從外部中斷請(qǐng)求有效

(外部中斷請(qǐng)求標(biāo)志IE0或IE1置“1”)到轉(zhuǎn)入中斷入口地址所需要的響應(yīng)時(shí)間。外部中斷的最短的響應(yīng)時(shí)間為3個(gè)機(jī)器周期:(1).中斷請(qǐng)求標(biāo)志位查詢占1個(gè)機(jī)器周期。(2).子程序調(diào)用指令LCALL轉(zhuǎn)到相應(yīng)的中斷服務(wù)程序入口,需2個(gè)機(jī)器周期。5.5外部中斷的響應(yīng)時(shí)間外部中斷響應(yīng)的最長(zhǎng)的響應(yīng)時(shí)間為8個(gè)機(jī)器周期:(1).發(fā)生在CPU進(jìn)行中斷標(biāo)志查詢時(shí),剛好是開(kāi)始執(zhí)行RETI或是訪問(wèn)IE或IP的指令,則需把當(dāng)前指令執(zhí)行完再繼續(xù)執(zhí)行一條指令后,才能響應(yīng)中斷,當(dāng)前指令執(zhí)行完最長(zhǎng)需2個(gè)機(jī)器周期。(2).接著再執(zhí)行一條指令,按最長(zhǎng)指令

(乘法指令MUL和除法指令DIV)來(lái)算,也只有4個(gè)機(jī)器周期。(3).加上硬件子程序調(diào)用指令LCALL的執(zhí)行,需要2個(gè)機(jī)器周期。所以,外部中斷響應(yīng)最長(zhǎng)時(shí)間為8個(gè)機(jī)器周期。如果已在處理同級(jí)或更高級(jí)中斷,響應(yīng)時(shí)間無(wú)法計(jì)算。在一個(gè)單一中斷的系統(tǒng)里,AT89C51單片機(jī)對(duì)外部中斷請(qǐng)求的響應(yīng)的時(shí)間總是在3~8個(gè)機(jī)器周期之間。5.5外部中斷的響應(yīng)時(shí)間外部中斷有觸發(fā)兩種觸發(fā)方式:電平觸發(fā)方式和跳沿觸發(fā)方式

CPU每個(gè)機(jī)器周期自動(dòng)采樣外部中斷輸入引腳(12、13)的電平。在中斷服務(wù)程序返回之前,當(dāng)次外部中斷請(qǐng)求輸入必須無(wú)效,否則CPU返回主程序后會(huì)再次響應(yīng)中斷。(1).電平觸發(fā)方式①設(shè)置電平觸發(fā)方式:編程對(duì)TCON寄存器的IT0(1)位清“0”。②適合情況:適合于外部中斷以低電平輸入,且中斷服務(wù)程序能清除外部中斷請(qǐng)求

(使中斷請(qǐng)求電平又變?yōu)椤?”)的情況。5.6外部中斷的觸發(fā)方式選擇5.6.1電平觸發(fā)方式(2).跳沿觸發(fā)方式——下降沿觸發(fā)①設(shè)置跳沿觸發(fā)方式:編程對(duì)TCON寄存器的IT0(1)位置“1”②適合情況:適合于外部中斷以負(fù)脈沖形式輸入的外部中斷。

CPU若連續(xù)兩個(gè)機(jī)器周期采樣外部中斷輸入引腳(12、13)的電平,一個(gè)采樣輸入為高,下一個(gè)采樣輸入為低,則認(rèn)為有下降沿,因此中斷請(qǐng)求輸入的負(fù)脈沖寬度至少保持1個(gè)機(jī)器周期。5.6外部中斷的觸發(fā)方式選擇5.6.2跳沿觸發(fā)方式

1.定時(shí)器/計(jì)數(shù)器中斷請(qǐng)求標(biāo)志TF0、TF1的建立與撤消

建立:計(jì)數(shù)器計(jì)數(shù)溢出時(shí),硬件會(huì)自動(dòng)對(duì)TF0或TF1置“1”;撤銷:中斷請(qǐng)求被響應(yīng)后。硬件會(huì)自動(dòng)對(duì)TF0或TF1清“0”。2.串行口中斷請(qǐng)求標(biāo)志TI、RI的建立與撤消建立:串口每發(fā)送完一幀串行數(shù)據(jù)后,硬件自動(dòng)對(duì)TI置“1”;串口接收完一個(gè)數(shù)據(jù)幀,硬件自動(dòng)對(duì)RI置“1”。撤銷:只能采用軟件撤銷。這是因?yàn)镃PU響應(yīng)串行口中斷后,還需測(cè)試這兩個(gè)中斷標(biāo)志,判斷是接收中斷還是發(fā)送中斷,因此不能響應(yīng)中斷后自動(dòng)撤銷。

CLRTI;清TI標(biāo)志位

CLRRI;清RI標(biāo)志位5.7中斷請(qǐng)求的撤消如果中斷程序中沒(méi)有對(duì)TI、RI清“0”,則中斷返回后又會(huì)重新進(jìn)入中斷程序。2.外部中斷請(qǐng)求標(biāo)志IE0、IE1的建立與撤消

建立:外部中斷請(qǐng)求引腳信號(hào)有效,硬件自動(dòng)對(duì)IE0或IE1置“1”;撤銷:中斷請(qǐng)求被響應(yīng)后。硬件會(huì)自動(dòng)對(duì)IE0或IE1清“0”。電平方式的外部中斷請(qǐng)求的完全撤消,除了將中斷標(biāo)志位清“0”之外,還需在中斷響應(yīng)后把中斷請(qǐng)求信號(hào)引腳從低電平強(qiáng)制改變?yōu)楦唠娖?。否則又會(huì)再次進(jìn)入中斷。5.7中斷請(qǐng)求的撤消IE0=1

↓中斷響應(yīng)↓IE0=0↓中斷服務(wù)↓IE0=10可以采用軟硬件結(jié)合的方法實(shí)現(xiàn),如圖所示。P1.0端輸出負(fù)脈沖就可使D觸發(fā)器置“1”,從而撤消了低電平中斷請(qǐng)求信號(hào)。00↑1采用跳沿觸發(fā)多好!1.中斷系統(tǒng)程序設(shè)計(jì)步驟和任務(wù)

(1).主程序初始化中的中斷設(shè)置①.設(shè)置中斷允許控制寄存器IE;②.設(shè)置中斷優(yōu)先級(jí)寄存器IP;③.對(duì)外中斷源,設(shè)置是采用電平觸發(fā)還是跳沿觸發(fā)。(2).中斷矢量填寫,C語(yǔ)言采用interrupt

n

進(jìn)行中斷矢量處理。(3).編寫中斷服務(wù)程序,處理中斷請(qǐng)求①.保護(hù)、恢復(fù)現(xiàn)場(chǎng),C語(yǔ)言不需要;②.處理中斷事務(wù)。5.8中斷服務(wù)程序的設(shè)計(jì)例5-3

假設(shè)允許外部中斷0中斷,并設(shè)定它為高級(jí)中斷,其它中斷源為低級(jí)中斷,采用跳沿觸發(fā)方式。在主程序中進(jìn)行初始化時(shí)編寫如下程序段:

SETBEA ;CPU開(kāi)中斷

SETBEX0 ;允許外中斷0產(chǎn)生中斷

SETBPX0 ;外中斷0為高級(jí)中斷

SETBIT0 ;外中斷0為跳沿觸發(fā)方式

SETBEX1 ;允許外中斷1產(chǎn)生中斷

SETBES ;允許串行口產(chǎn)生中斷

SETBET0 ;允許T0產(chǎn)生中斷

SETBET1 ;允許T1產(chǎn)生中斷5.8中斷服務(wù)程序的設(shè)計(jì)2.采用中斷時(shí)的主程序結(jié)構(gòu)常用的主程序結(jié)構(gòu)如下:

ORG0000H

LJMPMAIN

ORG中斷入口地址

(0003H)

LJMPINT ;中斷矢量填寫

?

ORG0030HMAIN:

主程序

?INT:

中斷服務(wù)程序5.8中斷服務(wù)程序的設(shè)計(jì)3.中斷服務(wù)程序的流程(1).現(xiàn)場(chǎng)保護(hù)和現(xiàn)場(chǎng)恢復(fù)現(xiàn)場(chǎng)保護(hù):現(xiàn)場(chǎng)是指進(jìn)入中斷時(shí)單片機(jī)寄存器和存儲(chǔ)器單元中的數(shù)據(jù)或狀態(tài)。中斷發(fā)生是不可預(yù)知的,為了使中斷服務(wù)子程序的執(zhí)行不破壞這些數(shù)據(jù)或狀態(tài),以免在中斷返回后影響主程序的運(yùn)行結(jié)果,就要把不希望破壞的數(shù)據(jù)或狀態(tài)送入堆棧保存起來(lái)?,F(xiàn)場(chǎng)保護(hù)一定要位于中斷處理程序的最前面。要保護(hù)的內(nèi)容:根據(jù)中斷處理程序的具體情況來(lái)決定。一般原則是,要保護(hù)中斷服務(wù)子程序影響的那些寄存器或存儲(chǔ)單元,例如PSW,Acc等。5.8中斷服務(wù)程序的設(shè)計(jì)現(xiàn)場(chǎng)恢復(fù):中斷處理結(jié)束后,在返回主程序前,則需要把保存的現(xiàn)場(chǎng)內(nèi)容從堆棧中彈出,以恢復(fù)那些寄存器和存儲(chǔ)器單元中的原有內(nèi)容?,F(xiàn)場(chǎng)恢復(fù)一定要位于中斷處理程序的后面。AT89C51單片機(jī)的堆棧操作指令“PUSHdirect”和“POPdirect”,主要是供現(xiàn)場(chǎng)保護(hù)和現(xiàn)場(chǎng)恢復(fù)使用。注意堆棧后進(jìn)先出原則,例如

PUSH Acc PUSH PSW

? POP PSW POP Acc5.8中斷服務(wù)程序的設(shè)計(jì)(2).關(guān)中斷和開(kāi)中斷現(xiàn)場(chǎng)保護(hù)前和現(xiàn)場(chǎng)恢復(fù)前關(guān)中斷,是為了防止此時(shí)有高一級(jí)的中斷進(jìn)入,避免現(xiàn)場(chǎng)被破壞;現(xiàn)場(chǎng)保護(hù)后開(kāi)中斷是為了允許有更高級(jí)的中斷進(jìn)入;現(xiàn)場(chǎng)恢復(fù)后開(kāi)中斷是為下一次的中斷做好準(zhǔn)備,這樣除現(xiàn)場(chǎng)保護(hù)和現(xiàn)場(chǎng)恢復(fù)的片刻不能被中斷外,仍然保持著中斷嵌套的功能,又避免現(xiàn)場(chǎng)被破壞。若一個(gè)重要的中斷,必須執(zhí)行完畢,不允許被其他的中斷嵌套。對(duì)此可在現(xiàn)場(chǎng)保護(hù)之前先關(guān)閉總中斷開(kāi)關(guān)位,徹底關(guān)閉其他中斷請(qǐng)求,待中斷處理完畢后再開(kāi)總中斷開(kāi)關(guān)位。5.8中斷服務(wù)程序的設(shè)計(jì)(3).中斷處理中斷處理是中斷源請(qǐng)求中斷的具體目的。設(shè)計(jì)者應(yīng)根據(jù)具體要求,來(lái)編寫該部分的程序。(4).中斷返回中斷服務(wù)子程序執(zhí)行的最后一條指令必須是中斷返回指令RETI。CPU執(zhí)行完這條指令后,把響應(yīng)中斷時(shí)所置“1”的不可尋址的優(yōu)先級(jí)狀態(tài)觸發(fā)器清“0”,然后從堆棧中彈出棧頂上的兩個(gè)字節(jié)的斷點(diǎn)地址送到程序計(jì)數(shù)器PC,彈出的第1個(gè)字節(jié)送入PCH,第2個(gè)字節(jié)送入PCL,CPU從斷點(diǎn)處重新執(zhí)行被中斷的程序。5.8中斷服務(wù)程序的設(shè)計(jì)關(guān)于現(xiàn)場(chǎng)保護(hù)的說(shuō)明若中斷程序中改變了PSW、A、R0的值,則中斷服務(wù)程序中現(xiàn)場(chǎng)保護(hù)需將PSW、A和R0的內(nèi)容保護(hù)。INT: CLR EA ;CPU關(guān)中斷

PUSHPSW ;現(xiàn)場(chǎng)保護(hù)

PUSHACC PUSH00H ;保護(hù)R0

SETBEA ;CPU開(kāi)中斷5.8中斷服務(wù)程序的設(shè)計(jì)因?yàn)橹袛嗍请S機(jī)的,若不進(jìn)行現(xiàn)場(chǎng)保護(hù),則中斷返回后會(huì)使被中斷的程序出錯(cuò)。例如:

······MOV A,30HADD A,40HMOV @R0,AMOV A,31HADDCA,41HINC R0MOV @R0,A中斷程序改變A,結(jié)果錯(cuò)誤改變R0,放錯(cuò)單元改變PSW,結(jié)果錯(cuò)誤例5-4

根據(jù)圖5-9的中斷服務(wù)程序流程,編出中斷服務(wù)程序。假設(shè),現(xiàn)場(chǎng)保護(hù)只需將PSW和A的內(nèi)容保護(hù)。典型的中斷子服務(wù)程序如下:INT: CLR EA ;CPU關(guān)中斷

PUSHPSW ;現(xiàn)場(chǎng)保護(hù)

PUSHACC ;

SETBEA

;CPU開(kāi)中斷 中斷處理程序段

CLREA

;CPU關(guān)中斷

POPACC ;現(xiàn)場(chǎng)恢復(fù)

POPPSW SETBEA ;CPU開(kāi)中斷

RETI ;中斷返回,恢復(fù)斷點(diǎn)5.8中斷服務(wù)程序的設(shè)計(jì)

AT89C51的兩個(gè)外部中斷請(qǐng)求源往往不夠用。需對(duì)外部中斷源進(jìn)行擴(kuò)充。外部中斷源擴(kuò)充必須滿足兩條:①.任何一個(gè)外部中斷源的中斷請(qǐng)求都能使外部中斷0或1產(chǎn)生中斷請(qǐng)求;②.CPU響應(yīng)中斷后,能夠通過(guò)查詢的方式找到是哪一個(gè)中斷源的中斷請(qǐng)求。本節(jié)介紹一種擴(kuò)充外部中斷源的方法。將外部中斷按中斷請(qǐng)求的輕重緩急進(jìn)行排隊(duì)分為兩組,把其中高優(yōu)先級(jí)別的中斷請(qǐng)求源分為一組接到89C51的一個(gè)外部中斷請(qǐng)求源,并設(shè)置高優(yōu)先級(jí)。其余為另一組連到89C51的另一個(gè)外中斷源輸入端。5.9多外部中斷源系統(tǒng)設(shè)計(jì)電路如圖,5個(gè)外部中斷請(qǐng)求源IR0~I(xiàn)R4,均為高電平有效,這時(shí)可按中斷請(qǐng)求的輕重緩急進(jìn)行排隊(duì),把其中最高級(jí)別的中斷請(qǐng)求源IR0直接接到AT89C51的一個(gè)外部中斷請(qǐng)求源INT0輸入端,并設(shè)置高優(yōu)先級(jí)。IR1~I(xiàn)R4的OC門連到89C51的另一個(gè)外中斷源輸入端INT1。5.9多外部中斷源系統(tǒng)設(shè)計(jì)IR1~I(xiàn)R4任何一個(gè)或一個(gè)以上為高電平,則INT1=0,產(chǎn)生中斷請(qǐng)求,89C51響應(yīng)中斷后,在中斷服務(wù)子程序查詢P1.0~P1.3,確定是哪一個(gè)中斷源的中斷請(qǐng)求,查詢順序就是優(yōu)先響應(yīng)的順序。例C5-4電路如圖,5個(gè)外部中斷請(qǐng)求源IR0~I(xiàn)R4,均為高電平有效,優(yōu)先級(jí):IR0→IR4,編寫程序,IR0中斷,LED1~LED4全點(diǎn)亮;IR1中斷,點(diǎn)亮LED1;IR2中斷,點(diǎn)亮LED2;IR3中斷,點(diǎn)亮LED3;IR4中斷,點(diǎn)亮LED4;思路:主程序中外部中斷0設(shè)為高優(yōu)先級(jí),外部中斷1中斷子程序中,按IR1→IR4順序查詢。5.9多外部中斷源系統(tǒng)設(shè)計(jì)

ORG 0000H LJMP STA LJMP DIT0 ;外中斷0中斷矢量0003H ORG 0013H ;外中斷1中斷矢量0013H LJMPDIT1 ORG 0030H ;主程序開(kāi)始處STA: MOV P1,#0FFH ;要輸入先輸出“1”,燈全滅

SETBEA ;CPU開(kāi)中斷

SETBEX0 ;允許外中斷0中斷

SETBEX1 ;允許外中斷1產(chǎn)生中斷

SETB IT0 ;外中斷0為下降沿觸發(fā)方式

SETB IT1 ;外中斷1為下降沿觸發(fā)方式

SETBPX0 ;外中斷0為高優(yōu)先級(jí)中斷

CLR PX1 ;外中斷1為低優(yōu)先級(jí)中斷LOOP: SJMP LOOP ;等待中斷5.9多外部中斷源系統(tǒng)設(shè)計(jì)中斷矢量填寫中斷設(shè)置

ORG 0100H;外中斷0程序DIT0: MOVP1,#0FH;LED全亮

RETI ORG 0200H;外中斷1程序DIT1:

MOV P1,#0FFH;LED全滅

JNB P1.0,IR2;查詢IR1 CLR P1.4 ;LED1亮 IR2:

JNB P1.1,IR3;查詢IR2 CLR P1.5 ;LED2亮

IR3:

JNB P1.2,IR4;查詢IR3 CLR P1.6 ;LED3亮

IR4:

JNB P1.3,IRRI;查詢IR4 CLR P1.7 ;LED4亮IRRI: RETI ;中斷返回5.9多外部中斷源系統(tǒng)設(shè)計(jì)111100011110000C語(yǔ)言參考程序#include<reg51.h>

sbitP1_0=P1^0;

sbitP1_1=P1^1;

sbitP1_2=P1^2;

sbitP1_3=P1^3;

sbitP1_4=P1^4;

sbitP1_5=P1^5;

sbitP1_6=P1^6;

sbit

P1_7=P1^7;5.9多外部中斷源系統(tǒng)設(shè)計(jì)C語(yǔ)言參考程序voidmain() //主函數(shù){ P1=0xff; //LED全滅

EA=1; //總中斷允許

EX0=1; //允許外部中斷0中斷

EX1=1; //允許外部中斷1中斷

IT0=1; //選擇外部中斷0為下降沿觸發(fā)方式

IT1=1; //選擇外部中斷0為下降沿觸發(fā)方式

PX0=1; //外部中斷0為高優(yōu)先級(jí)

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

for(;;) //延時(shí)等待中斷

{;}} 5.9多外部中斷源系統(tǒng)設(shè)計(jì)中斷設(shè)置voidint0_isr(void)interrupt0 //外中斷0的中斷服務(wù)函數(shù)

{ P1=0x0f; //高4位輸出0,全點(diǎn)亮

}voidint1_isr(void)interrupt2 //外中斷1的中斷服務(wù)函數(shù)

{ P1=0x0ff; //LED全滅

if(P1_0==1)P1_4=0; //IR1中斷,點(diǎn)亮LED1 if(P1_1==1)P1_5=0; //IR2中斷,點(diǎn)亮LED2 if(P1_2==1)P1_6=0; //IR4中斷,點(diǎn)亮LED3 if(P1_3==1)P1_7=0; //IR4中斷,點(diǎn)亮LED4}5.9多外部中斷源系統(tǒng)設(shè)計(jì)在μVision_4下調(diào)試仿真調(diào)試?yán)鼵5-4

無(wú)論是匯編語(yǔ)言程序還是C語(yǔ)言程序,都是一樣調(diào)試。程序輸入后,單擊KeilC51工具欄的圖標(biāo),匯編/編譯當(dāng)前源程序,直至程序語(yǔ)法上無(wú)錯(cuò)。單擊工具欄的圖標(biāo),進(jìn)入仿真狀態(tài)。5.9多外部中斷源系統(tǒng)設(shè)計(jì)

單擊菜單“Peripherals”,在彈出外圍設(shè)備菜單中選擇I/O口P1、P3。全速運(yùn)行程序。在P1口中設(shè)置P1.3、P1.2、P1.1=0,P1.0=1然后產(chǎn)生外部中斷1,P3.3=0,↓。程序會(huì)進(jìn)入中斷程序,使P1.4=0。1FEE匯編語(yǔ)言程序結(jié)構(gòu)與設(shè)計(jì)方法1.特殊地址的轉(zhuǎn)移程序匯編語(yǔ)言程序開(kāi)始是寫好主程序入口地址和中斷入口地址的轉(zhuǎn)移指令。

ORG 0000H LJMP MAIN ;轉(zhuǎn)移到主程序

ORG 0003H LJMP MAIN ;無(wú)外部中斷0,轉(zhuǎn)移到主程序

ORG 000BH LJMP IT0P ;轉(zhuǎn)移到T0中斷服務(wù)程序

ORG 0023H LJMP COM_INT

溫馨提示

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