第4章AT89S51單片機的中斷系統(tǒng)_第1頁
第4章AT89S51單片機的中斷系統(tǒng)_第2頁
第4章AT89S51單片機的中斷系統(tǒng)_第3頁
第4章AT89S51單片機的中斷系統(tǒng)_第4頁
第4章AT89S51單片機的中斷系統(tǒng)_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1第4章

AT89S51單片機的中斷系統(tǒng)12內容概要介紹片內功能部件中斷系統(tǒng)的硬件結構和工作原理。掌握與中斷系統(tǒng)有關的特殊功能寄存器以及中斷系統(tǒng)的應用特性。應能熟練地進行中斷系統(tǒng)的初始化編程以及中斷服務子程序的設計。34.1AT89S51中斷技術概述中斷技術主要用于實時監(jiān)測與控制,要求單片機能及時地響應中斷請求源提出的服務請求,并作出快速響應、及時處理。這是由片內的中斷系統(tǒng)來實現(xiàn)的。當中斷請求源發(fā)出中斷請求時,如果中斷請求被允許,單片機暫時中止當前正在執(zhí)行的主程序,轉到中斷服務處理程序處理中斷服務請求。

34中斷服務處理程序處理完中斷服務請求后,再回到原來被中止的程序之處(斷點),繼續(xù)執(zhí)行被中斷的主程序。

圖4-1為整個中斷響應和處理過程。55圖4-1中斷響應和處理過程主程序斷點入口地址中斷服務程序7如果單片機沒有中斷系統(tǒng),單片機的大量時間可能會浪費在查詢是否有服務請求發(fā)生的定時查詢操作上。采用中斷技術完全消除了單片機在查詢方式中的等待現(xiàn)象,大大地提高了單片機的工作效率和實時性。784.2AT89S51中斷系統(tǒng)結構中斷系統(tǒng)結構圖如圖4-2所示。中斷系統(tǒng)有5個中斷請求源(簡稱中斷源),2個中斷優(yōu)先級,可實現(xiàn)兩級中斷服務程序嵌套。每一中斷源可用軟件獨立控制為允許中斷或關中斷狀態(tài),中斷優(yōu)先級均可用軟件來設置。IE0TCONSCONINT0IT0=0IT0=1INT1IT1=0IT1=1TF0IE1TF1T0T1TIRITXDRXDESET0EX0EX1ET1EA自然優(yōu)先級矢量地址高級中斷請求自然優(yōu)先級矢量地址低級中斷請求PX0PT0PX1PT1PSIEIP中斷標志位中斷源允許總允許中斷優(yōu)先級圖4-2AT89S51的中斷系統(tǒng)結構示意圖104.2.1中斷請求源由圖4-2可見,AT89S51中斷系統(tǒng)共有5個中斷請求源:(1)INT0*——外部中斷請求0,中斷請求信號由INT0*引腳輸入,中斷請求標志為IE0。(2)INT1*——外部中斷請求1,中斷請求信號由INT1*引腳輸入,中斷請求標志為IE1。1011(3)定時器/計數(shù)器T0計數(shù)溢出發(fā)出的中斷請求,中斷請求標志為TF0。(4)定時器/計數(shù)器T1計數(shù)溢出發(fā)出的中斷請求,中斷請求標志為TF1。(5)串行口中斷請求,中斷請求標志為發(fā)送中斷TI或接收中斷RI。124.2.2中斷請求標志寄存器中斷源是否有中斷請求,是由中斷請求標志來表示的。5個中斷請求源的中斷請求標志分別由TCON和SCON的相應位鎖存(見圖4-2)。12131.TCON寄存器為定時器/計數(shù)器的控制寄存器,字節(jié)地址為88H,可位尋址。特殊功能寄存器TCON的格式如圖4-3所示。圖4-3特殊功能寄存器TCON的格式14TCON各標志位功能如下:(1)TF1—定時器/計數(shù)器T1的溢出中斷請求標志位。當T1計數(shù)產生溢出時,由硬件使TF1置“1”,向CPU申請中斷。CPU響應TF1中斷時,TF1標志由硬件自動清“0”,TF1也可由軟件清“0”。(2)TF0—定時器/計數(shù)器T0的溢出中斷請求標志位,功能與TF1類似。1415(3)IE1—外部中斷請求1的中斷請求標志位。(4)IE0—外部中斷請求0的中斷請求標志位,功能與IE1類似。(5)IT1—選擇外部中斷請求1為跳沿觸發(fā)還是電平觸發(fā)。

IT1=0,電平觸發(fā)方式,引腳上低電平有效,并把IE1置“1”。轉向中斷服務程序時,由硬件自動把IE1清“0”。

IT1=1,跳沿觸發(fā)方式,加到引腳上的外部中斷請求輸入信號電平從高到低的負跳變有效,并把IE1置“1”。轉向中斷服務程序時,由硬件自動把IE1清“0”。16(6)IT0—選擇外部中斷請求0為跳沿觸發(fā)方式還是電平觸發(fā)方式,其意義與IT1類似。AT89S51復位后,TCON被清“0”,5個中斷源的中斷請求標志均為0。TR1(D6位)、TR0(D4位)這2位與中斷系統(tǒng)無關,將在第6章定時器/計數(shù)器中介紹。16172.SCON寄存器串行口控制寄存器,字節(jié)地址為98H,可位尋址。

低二位鎖存串行口的發(fā)送中斷和接收中斷的中斷請求標志TI和RI,格式如圖4-4所示。

17圖4-4SCON中的中斷請求標志位18各標志位的功能:(1)TI—串行口的發(fā)送中斷請求標志位。每發(fā)送完一幀串行數(shù)據(jù)后,TI自動置“1”。TI標志必須由軟件清“0”。(2)RI—串行口接收中斷請求標志位。串行口接收完一個串行數(shù)據(jù)幀,硬件自動使RI中斷請求標志置“1”。必須在中斷服務程序中用指令對RI清“0”。194.3中斷允許與中斷優(yōu)先級的控制中斷允許控制由中斷允許寄存器IE控制。

中斷優(yōu)先級控制由中斷優(yōu)先級寄存器IP控制。4.3.1中斷允許寄存器IEAT89S51的對各中斷源的開放或屏蔽,是由中斷允許寄存器IE控制的。IE字節(jié)地址為A8H,可位尋址,格式如圖4-5所示。1920

圖4-5中斷允許寄存器IE的格式IE對中斷的開放和關閉實現(xiàn)兩級控制??偟拈_關中斷控制位EA(IE.7位),EA=0時,所有的中斷請求被屏蔽;EA=1時,開放中斷,但5個中斷源的中斷請求是否允許,還要由IE中的低5位所對應的5個中斷請求允許控制位的狀態(tài)來決定(圖4-5)。2021IE中各位功能如下:(1)EA—中斷允許總開關控制位。

EA=0,所有的中斷請求被屏蔽。

EA=1,所有的中斷請求被開放。(2)ES——串行口中斷允許位。 ES=0,禁止串行口中斷。 ES=1,允許串行口中斷。(3)ET1——定時器/計數(shù)器T1的溢出中斷允許位。 ET1=0,禁止T1溢出中斷。

ET1=1,允許T1溢出中斷。

2122(4)EX1——外部中斷1中斷允許位。

EX1=0,禁止外部中斷1中斷。

EX1=1,允許外部中斷1中斷。(5)ET0——定時器/計數(shù)器T0的溢出中斷允許位。

ET0=0,禁止T0溢出中斷。

ET0=1,允許T0溢出中斷。(6)EX0——外部中斷0中斷允許位。

EX0=0,禁止外部中斷0中斷。 EX0=1,允許外部中斷0中斷。23AT89S51復位以后,IE被清“0”,所有中斷請求被禁止。IE中與各個中斷源相應的位可用指令置“1”或清“0”。若使某一個中斷源被允許中斷,除了IE相應的位被置“1”外,還必須使EA位置“1”。改變IE的內容,可由位操作指令來實現(xiàn)(即SETBbit;CLRbit),也可用字節(jié)操作指令實現(xiàn)。2324【例4-1】若允許片內2個定時器/計數(shù)器中斷,并禁止其他中斷源的中斷請求,請編寫設置IE的相應程序段。(1)用位操作指令CLR ES ;禁止串行口中斷CLR EX0 ;禁止外部中斷0中斷CLR EX1 ;禁止外部中斷1中斷SETB ET0 ;允許定時器/計數(shù)器T0中斷SETB ET1 ;允許定時器/計數(shù)器T1中斷SETB EA ;總中斷開關位開放(2)用字節(jié)操作指令MOV IE,#8AH上述兩段程序對IE的設置是相同的。24254.3.2中斷優(yōu)先級寄存器IPAT89S51的中斷請求源有兩個中斷優(yōu)先級,由軟件分別設置為高優(yōu)先級中斷或低優(yōu)先級中斷,可實現(xiàn):

兩級中斷嵌套AT89S51正在執(zhí)行低優(yōu)先級中斷的服務程序時,可被高優(yōu)先級中斷請求所中斷,待高優(yōu)先級中斷處理完畢后,再返回低優(yōu)先級中斷服務程序。兩級中斷嵌套的過程如圖4-6所示。2526

26圖4-6兩級中斷嵌套的過程27各中斷源的中斷優(yōu)先級關系,可歸納為兩條基本規(guī)則:(1)低優(yōu)先級可被高優(yōu)先級中斷,高優(yōu)先級不能被低優(yōu)先級中斷。如果某一中斷源被設置為高優(yōu)先級中斷,則不能被任何其他的中斷源的中斷請求所中斷。(2)任何一種中斷一旦得到響應,不會被同級中斷源所中斷。中斷優(yōu)先級寄存器IP,其字節(jié)地址為B8H,可位尋址。只要用程序改變其內容,可進行各中斷源中斷優(yōu)先級的設置,IP寄存器的格式如圖4-7所示。2728

圖4-7IP寄存器的格式中斷優(yōu)先級寄存器IP各位的含義如下:(1)PS—串行口中斷優(yōu)先級控制位

1:高優(yōu)先級

0:低優(yōu)先級(2)PT1—定時器T1中斷優(yōu)先級控制位

1:高優(yōu)先級

0:低優(yōu)先級2829(3)PX1—外部中斷1中斷優(yōu)先級控制位

1:高優(yōu)先級

0:低優(yōu)先級(4)PT0—定時器T0中斷優(yōu)先級控制位

1:高優(yōu)先級

0:低優(yōu)先級(5)PX0—外部中斷0中斷優(yōu)先級控制位

1:高優(yōu)先級

0:低優(yōu)先級中斷優(yōu)先級控制寄存器IP用位操作指令或字節(jié)操作指令可更新IP的內容,以改變中斷優(yōu)先級。AT89S51復位以后,IP的內容為0,各個中斷源均為低優(yōu)先級中斷。2930AT89S51的中斷系統(tǒng)有兩個不可尋址的“優(yōu)先級激活觸發(fā)器”。一個指示某高優(yōu)先級的中斷正在執(zhí)行,所有后來的中斷均被阻止;另一個觸發(fā)器指示某低優(yōu)先級的中斷正在執(zhí)行,所有同級的中斷都被阻止,但不阻斷高優(yōu)先級的中斷請求。在同時收到幾個同優(yōu)先級的中斷請求時,哪一個中斷請求能優(yōu)先得到響應,取決于內部的查詢順序。這相當于在同一個優(yōu)先級內,還同時存在另一個輔助優(yōu)先級結構,其查詢順序見表4-1。3031

表4-1同級中斷的查詢次序

由此可見,各中斷源在同一個優(yōu)先級的條件下,外部中斷0的中斷優(yōu)先權最高,串行口中斷優(yōu)先權最低。3132【例4-2】IP寄存器初始化,AT89S51的兩個外中斷請求為高優(yōu)先級,其他中斷請求為低優(yōu)先級。(1)用位操作指令SETBPX0 ;外中斷0設置為高優(yōu)先級SETBPX1 ;外中斷1設置為高優(yōu)先級CLRPS ;串行口設置為低優(yōu)先級CLRPT0 ;定時器/計數(shù)器T0為低優(yōu)先級CLRPT1 ;定時器/計數(shù)器T1為低優(yōu)先級(2)用字節(jié)操作指令MOVIP,#05H32334.4響應中斷請求的條件中斷請求被響應,必須滿足以下必要條件:(1)總中斷允許開關接通,即IE寄存器中的中斷總允許位EA=1。(2)該中斷源發(fā)出中斷請求,即對應的中斷請求標志為“1”。(3)該中斷源的中斷允許位置“1”,即該中斷被允許。(4)無同級或更高級中斷正在被服務。當CPU查詢到有效的中斷請求時,在滿足上述條件時,緊接著就進行中斷響應。3334中斷響應的過程:首先由硬件自動生成一條長調用指令“LCALLaddr16”。就是程序存儲區(qū)中相應的中斷入口地址。例如,對于外部中斷1的響應,硬件自動生成的長調用指令為

LCALL0013H首先將程序計數(shù)器PC的內容壓入堆棧以保護斷點,再將中斷入口地址裝入PC,使程序轉向響應中斷請求的中斷入口地址。各中斷源服務程序的入口地址,如表4-2所示。3435

表4-2中斷入口地址表

兩個中斷入口間只相隔8字節(jié),難以安放一個完整的中斷服務程序。因此,通常在中斷入口地址處放置一條無條件轉移指令,使程序執(zhí)行轉向中斷服務程序入口。3536中斷響應是有條件的,當遇到下列三種情況之一時,中斷響應被封鎖:(1)CPU正在處理同級或更高優(yōu)先級的中斷。(2)所查詢的機器周期不是當前正在執(zhí)行指令的最后一個機器周期。只有在當前指令執(zhí)行完畢后,才能進行中斷響應,以確保當前指令執(zhí)行的完整性。(3)正在執(zhí)行的指令是RETI或是訪問IE或IP的指令。因為按照AT89S51中斷系統(tǒng)的規(guī)定,在執(zhí)行完這些指令后,需要再執(zhí)行完一條指令,才能響應新的中斷請求。如果存在上述三種情況之一,CPU將丟棄中斷查詢結果,不能對中斷進行響應。36374.5外部中斷的響應時間使用外部中斷時,需考慮從外部中斷請求到轉向中斷入口地址所需的時間。外部中斷的最短響應時間為3個機器周期。其中中斷請求標志位查詢占1個機器周期,而這個機器周期恰好處于指令的最后一個機器周期。在這個機器周期結束后,中斷即被響應,CPU接著執(zhí)行一條硬件子程序調用指令LCALL到相中斷服務程序入口,需要2個機器周期。3738外部中斷響應的最長時間為8個機器周期。在CPU進行中斷標志查詢時,剛好才開始執(zhí)行RETI或訪問IE或IP的指令,需執(zhí)行完指令再繼續(xù)執(zhí)行一條指令后,才響應中斷。執(zhí)行RETI或訪問IE或IP的指令,最長需要2個機器周期。接著再執(zhí)行一條指令,最長指令(乘法指令MUL和除法指令DIV)來算,也只有4個機器周期。再加上硬件子程序調用指令LCALL的執(zhí)行,需要2個機器周期,所以,外部中斷響應的最長時間為8個機器周期。39如果已經在處理同級或更高級中斷,外部中斷請求的響應時間取決于正在執(zhí)行的中斷服務程序的處理時間,這種情況下,響應時間就無法計算了。這樣,在一個單一中斷的系統(tǒng)里,AT89S51單片機對外部中斷請求的響應時間總是在3~8個機器周期之間。39404.6外部中斷的觸發(fā)方式選擇兩種觸發(fā)方式:電平觸發(fā)方式和跳沿觸發(fā)方式。4.6.1電平觸發(fā)方式外部中斷申請觸發(fā)器的狀態(tài)隨著CPU在每個機器周期采樣到的外部中斷輸入引腳的電平變化而變化。在中斷服務程序返回之前,外部中斷請求輸入必須無效(即外部中斷請求輸入已由低電平變?yōu)楦唠娖剑駝t會再次響應中斷。所以本方式適合于外部中斷以低電平輸入且中斷服務程序能清除外部中斷請求源(即外部中斷輸入電平又變?yōu)楦唠娖剑┑那闆r。40414.6.2跳沿觸發(fā)方式外部中斷申請觸發(fā)器能鎖存外部中斷輸入線上的負跳變。即使不能響應,中斷請求標志不丟失。相繼連續(xù)兩次采樣,一個機器周期為高,下一個機器周期采樣為低,則中斷申請觸發(fā)器置1,直到CPU響應此中斷時,才清0。輸入的負脈沖寬度至少保持12個時鐘周期,才能被采樣到。適合于以負脈沖形式輸入的外部中斷請求。41424.7中斷請求的撤銷某中斷請求被響應后,就存在著中斷請求的撤銷問題。1.定時器/計數(shù)器中斷請求的撤銷

硬件自動把中斷請求標志位(TF0或TF1)清0,自動撤銷。2.外部中斷請求的撤銷(1)跳沿方式外部中斷請求的撤銷包括兩項:中斷標志位清0和外中斷信號的撤銷。

中斷標志位清0是在中斷響應后由硬件自動完成的。

外中斷請求信號的撤銷,由于跳沿信號過后也就消失了,自動撤銷。4243(2)電平方式外部中斷請求的撤銷電平方式外中斷請求的撤銷,其中斷請求標志自動撤銷,但中斷請求信號的低電平可能繼續(xù)存在,為此,除了標志位清“0”之外,還需在中斷響應后把中斷請求信號輸入引腳從低電平強制改變?yōu)楦唠娖?,如圖4-8所示。

43圖4-8電平方式的外部中斷請求的撤銷電路44由圖4-8,用D觸發(fā)器鎖存外來的中斷請求低電平,并通過D觸發(fā)器的輸出端Q接到INT0*(或INT1*)。所以,增加的D觸發(fā)器不影響中斷請求。中斷響應后,利用D觸發(fā)器的SD端接AT89S51的P1.0端。因此,只要P1.0端輸出一個負脈沖就可以使D觸發(fā)器置“1”,撤銷低電平的中斷請求信號。負脈沖可在中斷服務程序中增加如下指令:

ORLP1,#01H ;P1.0為“1” ANLP1,#0FEH ;P1.0為“0” ORLP1,#01H ;P1.0為“1”

44453.串行口中斷請求的撤銷響應串行口的中斷后,CPU無法知道是接收中斷還是發(fā)送中斷,還需測試這兩個中斷標志位,以判定是接收操作還是發(fā)送操作,然后才清除。所以串行口中斷請求的撤銷只能使用軟件的方法,在中斷服務程序中進行,即用如下指令在中斷服務程序中對串行口中斷標志位進行清除:

CLRTI ;清TI標志位 CLRRI ;清RI標志位

45464.8中斷服務子程序的設計1.中斷服務子程序設計的任務任務有下列4條:(1)設置中斷允許控制寄存器IE,允許相應中斷請求源中斷。(2)設置中斷優(yōu)先級寄存器IP,確定所使用的中斷源優(yōu)先級。(3)若是外部中斷源,還要設置中斷請求的觸發(fā)方式決定采用電平觸發(fā)方式還是跳沿觸發(fā)方式。(4)編寫中斷服務子程序,處理中斷請求。4647前3條一般放在主程序的初始化程序段中?!纠?-3】假設允許外部中斷0中斷,設定為高級中斷,采用跳沿觸發(fā)方式,其他中斷源為低級中斷。初始化程序如下:SETBEA;

EA位置1,總中斷開關位開放SETBEX0;EX0位置1,允許外部中斷0產生中斷SETBPX0;PX0位置1,外部中斷0為高優(yōu)先級中斷SETBIT0;IT0位置1,外部中斷0為跳沿觸發(fā)方式47482.采用中斷時的主程序結構程序必須先從主程序起始地址0000H執(zhí)行。所以,在0000H起始地址的幾個字節(jié)中,用無條件轉移指令,跳向主程序。另外,各中斷入口地址之間依次相差8字節(jié),中斷服務子程序稍長就超過8字節(jié),這樣中斷服務子程序就占用了其他的中斷入口地址,影響其他中斷源的中斷處理。為此一般在進入中斷后,用一條無條件轉移指令,把中斷服務子程序跳轉到遠離其他中斷入口的入口地址處。4849常用的主程序結構如下:

ORG 0000H

LJMPMAIN

ORG

X1X2X3X4H;某中斷源的中斷入口

LJMP

INT;INT為某中斷源的中斷入口標號 ……

ORGY1Y2Y3Y4H;Y1Y2Y3Y4H為主程序入口MAIN:主程序INT:中斷服務子程序注意:如果有多個中斷源,就有多個“ORGX1X2X3X4H”的入口地址,多個“中斷入口地址”必須依次由小到大排列。主程序MAIN的起始地址Y1Y2Y3Y4H,根據(jù)具體情況來安排。49503.中斷服務子程序的流程中斷服務子程序的基本流程如圖4-9所示。下面對有關中斷服務子程序執(zhí)行過程中的一些問題進行說明。50圖4-9中斷子服務程序的基本流程51(1)現(xiàn)場保護和現(xiàn)場恢復現(xiàn)場是指單片機中某些寄存器和存儲器單元中的數(shù)據(jù)或狀態(tài)。為使中斷服務子程序的執(zhí)行不破壞這些數(shù)據(jù)或狀態(tài),因此要送入堆棧保存起來,這就是現(xiàn)場保護?,F(xiàn)場保護一定要位于中斷處理程序的前面。中斷處理結束后,在返回主程序前,則需要把保存的現(xiàn)場內容從堆棧中彈出恢復原有內容,這就是現(xiàn)場恢復?,F(xiàn)場恢復一定要位于中斷處理的后面。AT89S51的堆棧操作指令:“PUSHdirect”和“POPdirect”,是供現(xiàn)場保護和現(xiàn)場恢復使用的。5152(2)關中斷和開中斷現(xiàn)場保護前和現(xiàn)場恢復前關中斷,是為防止此時有高一級的中斷進入,避免現(xiàn)場被破壞?,F(xiàn)場保護和現(xiàn)場恢復之后的開中斷是為下一次的中斷做好準備,也為了允許有更高級的中斷進入。這樣,中斷處理可以被打斷,但原來的現(xiàn)場保護和現(xiàn)場恢復不允許更改,除了現(xiàn)場保護和現(xiàn)場恢復的片刻外,仍然保持著中斷嵌套的功能。但有時候,一個重要的中斷,必須執(zhí)行完畢,不允許被其他的中斷嵌套??稍诂F(xiàn)場保護前先關閉總中斷開關位,待中斷處理完畢后再開總中斷開關位。這樣,需把圖4-9中的“中斷處理”步驟前后的“開中斷”和“關中斷”去掉。5253(3)中斷處理應用設計者根據(jù)任務的具體要求,來編寫中斷處理部分的程序。(4)中斷返回中斷服務子程序最后一條指令必須是返回指令RETI。CPU執(zhí)行完這條指令后,把響應中斷時所置1的不可尋址的優(yōu)先級狀態(tài)觸發(fā)器清0,然后從堆棧中彈出棧頂上的兩個字節(jié)的斷點地址送到程序計數(shù)器PC,彈出的第一個字節(jié)送入PCH,彈出的第二個字節(jié)送入PCL,從斷點處重新執(zhí)行主程序。5354【例4-4】

根據(jù)圖4-9流程,編寫中斷服務程序。設現(xiàn)場保護只將PSW寄存器和累加器A的內容壓入堆棧中保護。一個典型的中斷服務子程序如下:INT: CLR EA ;CPU關中斷

PUSHPSW

;現(xiàn)場保護

PUSHAcc

SETBEA ;總中斷允許

中斷處理段

CLR EA ;關中斷

POP Acc

;現(xiàn)場恢復

POP PSW

SETB EA ;總中斷允許

RETI

;中斷返回,恢復斷點5455上述程序幾點說明:(1)本例的現(xiàn)場保護假設僅僅涉及PSW和A的內容,如有其他需要保護的內容,只需在相應位置再加幾條PUSH和POP指令即可。注意,堆棧的操作是先進后出。(2)“中斷處理程序段”,設計者應根據(jù)中斷任務的具體要求,來編寫中斷處理程序。(3)如果不允許被其他的中斷所中斷,可將“中斷處理程序段”前后的“SETBEA”和“CLREA”兩條指令去掉。(4)最后一條指令必須是返回指令RETI,不可缺少,CPU執(zhí)行完這條指令后,返回斷點處,重新執(zhí)行被中斷的主程序。55564.9多外部中斷源系統(tǒng)設計實際的應用中,兩個外部中斷請求源往往不夠用,需對外部中斷源進行擴充,如圖4-10所示。系統(tǒng)有5個外部中斷請求源IR0~IR4,高電平有效。最高級的請求源IR0直接接到AT89S51的一個外部中斷請求輸入端INT0*,其余4個請求源IR1~IR4通過各自的OC門(集電極開路門)連到AT89S51的另一個外中斷源輸入端INT1*

,同時還連到P1口的P1.0~P1.3腳,供AT89S51查詢。圖4-10所示電路,除了IR0優(yōu)先權級別最高外,其余4個外部中斷源的中斷優(yōu)先權取決于查詢順序。565757圖4-10中斷和查詢相結合的多外部中斷請求源系統(tǒng)58若圖4-10中的4個外設中有一個外設提出高電平有效的中斷請求信號,則中斷請求通過4個集電極開路OC門的輸出公共點,即INT1*腳的電平就會變低。究竟是哪個外設提出的請求,要通過程序查詢P1.0~P1.3引腳上的邏輯電平來確定。本例假設某一時刻只能有一個外設提出中斷請求,并設IR1~IR4這4個中斷請求源的高電平可由相應的中斷服務子程序清“0”,則中斷服務子程序如下:ORG 0013H ;INT1*的中斷入口LJMP INT1 ……ORG 0100H5859INT1: PUSH PSW ;保護現(xiàn)場 PUSH Acc JB P1.0,IR1;如P1.0為高,則IR1有請求,跳IR1處理 JB P1.1,IR2;如P1.1為高,則IR2有請求,跳IR2處理

JB P1.2,IR3;如P1.2為高,則IR3有請求,跳IR3處理

JB P1.3,IR4;如P1.3為高,則IR4有請求,跳IR4處理INTIR:POP Acc ;恢復現(xiàn)場 POP PSW RETI ;中斷返回5960IR1:

AJMP INTIR;IR1處理完,跳INTIR處執(zhí)行IR2:

AJMPINTIR;IR2處理完,跳INTIR處執(zhí)行IR3:

AJMPINTIR;IR3處理完,跳INTIR處執(zhí)行IR4:

AJMPINTIR;IR4處理完,跳INTIR處執(zhí)行查詢法擴展外部中斷源比較簡單,但是擴展的外部中斷源個數(shù)較多時,查詢時間稍長。60IR1的中斷處理子程序IR2的中斷處理子程序IR3的中斷處理子程序IR4的中斷處理子程序614.9.2用優(yōu)先權編碼器擴展外部中斷源當需要處理的外部中斷源數(shù)目較多而又要求響應速度很快時,上述的軟件查詢方法常常滿足不了時間上的要求。因為在外部中斷源很多的情況下,響應優(yōu)先級最高的中斷和響應優(yōu)先級最低的中斷所需的查詢時間可能相差很大。如果采用硬件對外部中斷源進行優(yōu)先級排隊就可避免這個問題。下面介紹采用優(yōu)先權編碼器擴展外部中斷源的方法。74LS148是一種優(yōu)先權編碼器,利用74LS148擴展AT89S51外部中斷源的電路如圖4-11所示,74LS148的真值表見表4-1。74LS148具有8個輸入端“0~7”,用作8個外部中斷請求IR0*~IR7*輸入端,3個編碼輸出端A2~A0與單片機的P1.3~P1.1口線相連,編碼器輸出控制端與單片機的外中斷請求輸入腳INT1*相連。62圖4-11擴展8個外部中斷源的硬件電路6364在使能端EI*端為低電平的情況下,只要其8輸入端中任一輸入為低電平,就有一組相應的編碼從A2~A0端輸出,且同時編碼器輸出端輸出為低電平。如果8中斷源IR0*~IR7*中有多個中斷請求時(低有效),其優(yōu)先權最高的一組編碼就出現(xiàn)在單片機的P1.3~P1.1口線上,此時GS*端為低電平,則AT89S51的INT1*端就為低電平,若中斷被允許,就可以響應外部中斷源所提出的中斷請求。65例如,中斷請求源IR1*、IR4*與IR6*同時發(fā)出中斷請求的情況下,GS*端為低電平,向INT1*發(fā)出中斷請求,同時A2~A0端僅輸出中斷優(yōu)先級最高的編碼“001”,當單片機響應該中斷請求信號后,進入INT1*中斷服務子程序,然后讀入從P1.3~P1.1輸入的編碼“001”,從而去響應的中斷請求。為了使程序轉向各中斷源的中斷服務子程序,必須在AT89S51的INT1*的中斷服務程序中編寫如下引導程序:66ORG0013H ;中斷入口

AJMP INT1P ;跳向的中斷處理子程序

ORG0040HINT1P:ORL P1,#00001110B ;中斷服務程序,設置P1.3、

;P1.2、P1.1為輸入

MOV A,P1 ;P1口內容送累加器

ANLA,#00001110B ;屏蔽除P1.3、P1.2、P1.1以;外的位

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論