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

下載本文檔

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

文檔簡(jiǎn)介

1、第第5章章 單片機(jī)的中斷系統(tǒng)單片機(jī)的中斷系統(tǒng) 51單片機(jī)的中斷系統(tǒng)是8位機(jī)中功能較強(qiáng)的,可以提供5個(gè)中斷源(52系列是6個(gè)),具有兩個(gè)中斷優(yōu)先級(jí),可以實(shí)現(xiàn)兩級(jí)中斷嵌套。5.1 中斷的基本知識(shí)中斷的基本知識(shí) 5.1.1 中斷源及中斷結(jié)構(gòu) MCS-51單片機(jī)的5個(gè)中斷源分為兩種類型:一類是外部中斷源,包括 和 ;一類是內(nèi)部中斷源,包括兩個(gè)定時(shí)器/計(jì)數(shù)器(T0和T1)的溢出中斷和串行口的發(fā)送/接收中斷。MCS-51單片機(jī)中斷系統(tǒng)結(jié)構(gòu)圖5-1所示。0INT1INT1講圖圖5-1 MCS-51 單片機(jī)中斷系統(tǒng)結(jié)構(gòu)單片機(jī)中斷系統(tǒng)結(jié)構(gòu) 1. 外部中斷 它們的中斷請(qǐng)求信號(hào)有效方式分為電平觸發(fā)和脈沖觸發(fā)兩種。電

2、平方式是低電平有效,脈沖方式為負(fù)跳變觸發(fā)有效。對(duì)于電平方式,只要檢測(cè)到低電平信號(hào)即為有效申請(qǐng)。對(duì)于脈沖方式 ,則需要比較兩次檢測(cè)到的信號(hào),才能確定中斷請(qǐng)求信號(hào)是否有效。中斷請(qǐng)求信號(hào)高低電平的狀態(tài)都應(yīng)該至少維持一個(gè)機(jī)器周期,以確保電平變化能被單片機(jī)檢測(cè)到。 2. 內(nèi)部中斷除外部中斷外,內(nèi)部還有TF0、TF1、TI/RI分別為定時(shí)/計(jì)數(shù)器溢出中斷和串行口的發(fā)送/接收中斷的中斷源。5.1.2 5.1.2 中斷控制中斷控制 MCS-51單片機(jī)設(shè)置了4個(gè)專用寄存器用于中斷控制,用戶通過設(shè)置其狀態(tài)來管理中斷系統(tǒng)。 1. 定時(shí)器控制寄存器(TCON) TCON的格式如圖5-2所示。 IT0IE0IT1IE1

3、TR0 TF0 TR1TF1D7 D6 D5 D4 D3 D2 D1 D0 TCON(88H)圖圖5-2 TCON的格式的格式 在該寄存器中,TR1、TR0用于定時(shí)/計(jì)數(shù)器的啟動(dòng)控制,其余6位用于中斷控制,其作用如下: 1) IT0為外中斷0請(qǐng)求信號(hào)方式控制位。IT0=1為脈沖觸發(fā)方式(負(fù)跳變有效),IT0=0為電平方式(低電平有效)。 2) IE0為外部中斷0請(qǐng)求標(biāo)志位。當(dāng)CPU檢測(cè)到(P3.2)端有中斷請(qǐng)求信號(hào)時(shí),由硬件置位,使IE0=1請(qǐng)求中斷,中斷響應(yīng)后轉(zhuǎn)向中斷服務(wù)程序時(shí),由硬件自動(dòng)清零。 3) IT1為外部中斷1請(qǐng)求信號(hào)方式控制位,其作用同IT0。 4) IE1為外部中斷1請(qǐng)求標(biāo)志位

4、,其作用同IE0。 5) TF0(TF1)為定時(shí)/計(jì)數(shù)器溢出標(biāo)志位,此標(biāo)志的作用將在5.3節(jié)說明。 2. 串行口控制寄存器(SCON)SCON的格式如圖5-3所示。RITIRB8TB8REN SM2 SM1SM0 D7 D6 D5 D4 D3 D2 D1 D0 TCON (98H)圖圖5-3 SCON的格式的格式 SCON中的高6位用于串行口控制,低2位(RI、TI)用于中斷控制,其作用如下: 1) TI為串行口發(fā)送中斷請(qǐng)求標(biāo)志位,發(fā)送完一幀串行數(shù)據(jù)后,由硬件置1,其清零必須由軟件完成。 2) RI為串行口接收中斷請(qǐng)求標(biāo)志位,接收完一幀串行數(shù)據(jù)后,由硬件置1,其清零必須由軟件完成。 在在MCS

5、-51單片機(jī)串行口中,以單片機(jī)串行口中,以TI和和RI的邏輯的邏輯“或或”作為一作為一個(gè)內(nèi)部中斷源,二者之一置位就可以產(chǎn)生串行口中斷請(qǐng)求,然后個(gè)內(nèi)部中斷源,二者之一置位就可以產(chǎn)生串行口中斷請(qǐng)求,然后在中斷服務(wù)程序中測(cè)試這兩個(gè)標(biāo)志位,以決定是發(fā)送中斷還是接在中斷服務(wù)程序中測(cè)試這兩個(gè)標(biāo)志位,以決定是發(fā)送中斷還是接收中斷。收中斷。3. 中斷允許控制寄存器(IE)中斷允許控制寄存器的格式如圖5-4所示。EX0ET0EX1ET1ES EA D7 D6 D5 D4 D3 D2 D1 D0 IE (A8H)圖圖5-4 中斷允許控制寄存器的格式中斷允許控制寄存器的格式 寄存器中用于控制中斷的共6位,實(shí)現(xiàn)中斷管

6、理,其作用如下。EA為中斷允許總控制位。EA=1時(shí),CPU開放中斷;EA=0時(shí),CPU屏蔽所有中斷請(qǐng)求。ES、ET1、EX1、ET0、EX0為對(duì)應(yīng)的串行口中斷、定時(shí)/計(jì)數(shù)器1中斷、外部中斷1中斷、定時(shí)器/計(jì)數(shù)器0中斷、外部中斷0中斷的中斷允許位。對(duì)應(yīng)位為1時(shí),允許其中斷,對(duì)應(yīng)位為0時(shí),禁止其中斷。MCS-51單片機(jī)中斷系統(tǒng)的管理是由中斷允許總控制EA和各中斷源的控制位聯(lián)合作用實(shí)現(xiàn)的,缺一不可。MCS-51單片機(jī)系統(tǒng)復(fù)位后,IE各位均清零,即禁止所有中斷。 4. 中斷優(yōu)先級(jí)控制寄存器(IP)中斷優(yōu)先級(jí)控制寄存器的格式如圖5-5所示。PX0PT0PX1PT1PS D7 D6 D5 D4 D3 D2

7、 D1 D0 IP (B8H)圖圖5-5 中斷優(yōu)先級(jí)控制寄存器的格式中斷優(yōu)先級(jí)控制寄存器的格式圖5-5 中斷優(yōu)先級(jí)控制寄存器的格式 MCS-51單片機(jī)規(guī)定了兩個(gè)中斷優(yōu)先級(jí):高級(jí)中斷和低級(jí)中斷。用中斷優(yōu)先級(jí)寄存器(IP)的5位狀態(tài)管理5個(gè)中斷源的優(yōu)先級(jí)別,即PS、PT1、TX1、PT0、PX0分別對(duì)應(yīng)串行口中斷、定時(shí)器/計(jì)數(shù)器1中斷、外部中斷1中斷、定時(shí)器/計(jì)數(shù)器0中斷、外部中斷0中斷。當(dāng)相應(yīng)位為1時(shí),設(shè)置其為高級(jí)中斷;相應(yīng)位為0時(shí),設(shè)置其為低級(jí)中斷。5.1.3 中斷優(yōu)先級(jí)結(jié)構(gòu) MCS-51中斷系統(tǒng)具有兩級(jí)優(yōu)先級(jí)(由IP寄存器把各中斷源的優(yōu)先級(jí)分為高優(yōu)先級(jí)和低優(yōu)先級(jí)),它們遵循下列兩條基本原則:

8、1). 為了實(shí)現(xiàn)中斷嵌套,高優(yōu)先級(jí)中斷請(qǐng)求可以中斷低優(yōu)先級(jí)的中斷服務(wù),反之,則不允許;2). 同等優(yōu)先級(jí)中斷源之間不能中斷對(duì)方的中斷服務(wù)過程。為了實(shí)現(xiàn)上述兩條原則,中斷系統(tǒng)內(nèi)部包含兩個(gè)不可尋址的優(yōu)先級(jí)狀態(tài)觸發(fā)器。其中一個(gè)用來指示某個(gè)高優(yōu)先級(jí)的中斷源正在得到服務(wù),并阻止所有其他中斷的響應(yīng);另一個(gè)觸發(fā)器則指出某低優(yōu)先級(jí)的中斷正得到服務(wù),所有同級(jí)的中斷都被阻止,但不阻止高優(yōu)先級(jí)中斷源。當(dāng)同時(shí)收到幾個(gè)同一優(yōu)先能的中斷時(shí),響應(yīng)哪一個(gè)中斷源取決于內(nèi)部查詢順序。其優(yōu)先級(jí)排列如圖5-6所示。中斷源外部中斷0定時(shí)器/計(jì)數(shù)器0溢出定時(shí)器/計(jì)數(shù)器1溢出串行口外部中斷1同級(jí)內(nèi)中斷優(yōu)先級(jí)別最高最低 圖圖5-6 中斷優(yōu)先

9、級(jí)排列中斷優(yōu)先級(jí)排列5.1.4 中斷服務(wù)程序入口地址 MCS-51單片機(jī)5個(gè)中斷源的中斷服務(wù)程序入口地址如表5-1所示。表表5-1 MCS-51中斷服務(wù)程序入口地址表中斷服務(wù)程序入口地址表5.1.5 中斷請(qǐng)求的撤除在中斷請(qǐng)求被響應(yīng)前,中斷源發(fā)出的中斷請(qǐng)求由CPU鎖存在特殊功能寄存器TCON和SCON的相應(yīng)中斷標(biāo)志位中。一旦某個(gè)中斷請(qǐng)求得到響應(yīng),CPU必須把它的響應(yīng)標(biāo)志位復(fù)位成0狀態(tài),否則MCS-51就會(huì)因中斷未能得到及時(shí)撤除而重復(fù)響應(yīng)同一中斷請(qǐng)求,這是絕對(duì)不允許的。MCS-51單片機(jī)有5個(gè)中斷源,但實(shí)際上只分屬于3種中斷類型。這3種類型是:外部中斷、定時(shí)器溢出中斷和串行口中斷。對(duì)于這3種中斷類

10、型的中斷請(qǐng)求,其撤除方法是不同的。1. 定時(shí)器溢出中斷請(qǐng)求的撤除 TF0和TF1是定時(shí)器溢出中斷標(biāo)志位,它們因定時(shí)器溢出中斷請(qǐng)求的輸入而置位,因定時(shí)器溢出中斷得到響應(yīng)而自動(dòng)復(fù)位成0狀態(tài)。因此,定時(shí)器溢出中斷源的中斷請(qǐng)求是自動(dòng)撤除的,用戶根本不必專門為它們撤除。2. 串行口中斷請(qǐng)求的撤除TI和RI是串行口中斷的標(biāo)志位,中斷系統(tǒng)不能自動(dòng)將它們撤除,這是因?yàn)镸CS-51進(jìn)入串行口中斷服務(wù)程序后常需要對(duì)它們進(jìn)行檢測(cè),以測(cè)定串行口發(fā)生了接收中斷還是發(fā)送中斷。為了防止CPU再次響應(yīng)這類中斷,用戶應(yīng)在中斷服務(wù)程序的適當(dāng)位置處通過指令將它們撤除: CLR TI ; 撤除發(fā)送中斷 CLR RI ; 撤除接收中斷

11、若采用字節(jié)指令,則也可采用如下指令: ANL SCON,#0FCH ;撤除發(fā)送和接收中斷 或采用位判斷清除指令: JBC TI, rel; 判斷TI標(biāo)志是否置位,若置位則跳轉(zhuǎn)并撤除發(fā)送中斷 JBC RI, rel; 判斷RI標(biāo)志是否置位,若置位則跳轉(zhuǎn)并撤除接收中斷 3. 外部中斷的撤除外部中斷請(qǐng)求有兩種觸發(fā)方式:電平觸發(fā)和負(fù)邊沿觸發(fā)。對(duì)于這兩種不同的中斷觸發(fā)方式,MCS-51撤除它們的中斷請(qǐng)求的方法是不相同的。在負(fù)邊沿觸發(fā)方式下,外部中斷標(biāo)志IE0和IE1是依靠CPU兩次檢測(cè) 或 上觸發(fā)電平狀態(tài)而設(shè)置的。因此,芯片設(shè)計(jì)者使CPU在響應(yīng)中斷時(shí)自動(dòng)復(fù)位IE0或IE1,就可撤除 或 上的中斷請(qǐng)求,因

12、為外部中斷源在中斷服務(wù)程序時(shí)是不可能再在 或 上產(chǎn)生負(fù)邊沿,而使相應(yīng)的中斷標(biāo)志IE0或IE1置位。 在電平觸發(fā)方式下,外部中斷標(biāo)志IE0和IE1是依靠CUP檢測(cè)或上低電平而置位的。盡管CPU響應(yīng)中斷時(shí)相應(yīng)中斷標(biāo)志IE0或IE1,能自動(dòng)復(fù)位成狀態(tài),但若外部中斷源不能及時(shí)撤除它在或上的低電平,就會(huì)再次使已經(jīng)變的中斷IE0或IE1置位,這是絕對(duì)不允許的。0INT1INT0INT1INT0INT1INT因此,電平觸發(fā)型外部中斷請(qǐng)求的撤除必須使或上的低電平隨著其中斷被CPU響應(yīng)而變?yōu)楦唠娖?。一種可供采用的電平型外部中斷的撤除電路如圖5-7所示。INT08051P1.0Q DSDCP1外部中斷信號(hào)圖圖5-

13、7 電平型外部中斷的撤除電路電平型外部中斷的撤除電路由圖可見,當(dāng)外部中斷源產(chǎn)生中斷請(qǐng)求時(shí),D觸發(fā)器的復(fù)位成狀態(tài),Q端的低電平被送到 ,該低電平被8051檢測(cè)后就使中斷標(biāo)志IE0置。8051響應(yīng) 上的中斷請(qǐng)求可使 中斷服務(wù)程序執(zhí)行,故可以在中斷服務(wù)程序開頭安排如下程序來使 上的電平拉高。INSVR:ORL P1, #01H ANL P1, #0FEH CLR IE0 END 8051執(zhí)行上述程序就可使P1.0上產(chǎn)生一個(gè)寬度為兩個(gè)機(jī)器周期的負(fù)脈沖。在該負(fù)脈沖作用下,D觸發(fā)器被置位成1狀態(tài), 上的電平也因此而變高,從而撤除了其上的中斷請(qǐng)求。0INT0INT0INT0INT0INT5.1.6 中斷系統(tǒng)

14、的初始化 MCS-51中斷系統(tǒng)功能,是可以通過上述特殊功能寄存器進(jìn)行統(tǒng)一管理的,中斷系統(tǒng)初始化是指對(duì)這些特殊功能的寄存器中各控制位進(jìn)行賦值。中斷系統(tǒng)初始化步驟如下:1). 置位相應(yīng)中斷源的中斷允許;2). 設(shè)定所有中斷源的中斷優(yōu)先級(jí); 3). 若為外部中斷,則應(yīng)規(guī)定低電平還是負(fù)邊沿的中斷觸發(fā)方式。 例如,用 為低電平觸發(fā)的中斷系統(tǒng)初始化程序。 1. 采用位操作指令 SETB EA ; SETB EX0 ; 開 中斷 中斷 SETB PX0 ; 令 為 高優(yōu)先級(jí) CLR IT0 ; 令 為 電平觸發(fā)0INT0INT0INT0INT 2. 采用字節(jié)操作指令 MOV IE,#81H ; 開 中斷 O

15、RL IP,#01H ; 令 為高優(yōu)先級(jí) ORL TCON,#0FEH ; 令 電平觸發(fā) 顯然,采用位操作指令進(jìn)行中斷系統(tǒng)初始化是比較簡(jiǎn)單的。因?yàn)橛脩舨槐赜涀「骺刂莆辉诩拇嫫髦械奈恢?,只需按各控制位名稱來設(shè)置,而各控制位名稱是比較容易記憶的。0INT0INT0INT5.2 中斷的編程及應(yīng)用實(shí)例中斷的編程及應(yīng)用實(shí)例 C51語言編譯器支持在C語言源程序中直接編寫51單片機(jī)的中斷服務(wù)函數(shù)程序,從而減輕了采用匯編語言編寫中斷服務(wù)程序的煩瑣程序。為了能在C語言源程序中直接編寫中斷服務(wù)函數(shù),C51語言編譯器對(duì)函數(shù)的定義有所擴(kuò)展,增加了一個(gè)擴(kuò)展關(guān)鍵字interrupt。關(guān)鍵字interrupt是函數(shù)定義時(shí)的

16、一個(gè)選項(xiàng),加上這個(gè)選項(xiàng)即可將函數(shù)定義成中斷服務(wù)函數(shù)。 定義中斷服務(wù)函數(shù)的一般形式為: 函數(shù)類型 函數(shù)名(形式參數(shù)表) interrupt n using minterrupt 后面的n 是中斷號(hào),n的取值范圍為031。編譯器從8n+3處產(chǎn)生中斷向量,具體的中斷號(hào)n和中斷向量取決于不同的51系列單片機(jī)芯片。對(duì)于MCS-51單片機(jī)而言,外部中斷0中斷、定時(shí)器/計(jì)數(shù)器0溢出中斷、外部中斷1中斷、定時(shí)器/計(jì)數(shù)器1溢出中斷、串行口發(fā)送/接收中斷對(duì)應(yīng)的中斷號(hào)分別為0、1、2、3、4。using后面的m是選擇哪個(gè)工作寄存器區(qū),分別為0、1、2、3?!纠?-1】 外部中斷在本實(shí)例中,首先通過P1.7口點(diǎn)亮發(fā)光

17、二極管,然后外部輸入一脈沖串,則發(fā)光二極管亮、暗交替。電路如圖5-8所示。+5VP1.7AT89C510INT圖圖5-8 發(fā)光二極管交替亮、暗發(fā)光二極管交替亮、暗 編寫程序如下: #includesbit P1_7=P17;void interrupt0( ) interrupt 0 using 0 /定義定時(shí)器0 P1_7=!P1_7;void main( ) EA=1; /開中斷 IT0=1; /外部中斷0脈沖觸發(fā) EX0=1; /外部中斷0 P1_7=0; do while(1);【例5-2】如圖5-9所示,8只LED陰極接至單片機(jī)P0口,兩開關(guān)S0、S1分別接至單片機(jī)引腳P3.2和P3

18、.3。 編寫程序控制LED狀態(tài):按下S0后,如果8只LED為熄滅狀態(tài),則點(diǎn)亮,如果8只LED為點(diǎn)亮狀態(tài),則保持;按下S1后,不管8只LED是熄滅狀態(tài)還是點(diǎn)亮狀態(tài),都變?yōu)殚W爍狀態(tài)。P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.78051 P3.2 P3.3+5V圖圖5-9 利用中斷控制發(fā)光二極管利用中斷控制發(fā)光二極管2講S0S1 程序代碼如下:#includevoid delay(unsigned int d) /定義延時(shí)子函數(shù)while(-d0);void main()P0=0 xff; /熄滅LEDEA=1;/開總中斷EX0=1; /開外中斷0EX1=1;/開外中斷1IT0=

19、1;/外中斷0脈沖觸發(fā)方式IT1=1;/外中斷1脈沖觸發(fā)方式for(;) /延時(shí)等待中斷發(fā)生;void INT0_ISR( ) interrupt 0 /外中斷0中斷服務(wù)函數(shù)P0=0 x00;PX0=0;PX1=1;void INT1_ISR( ) interrupt 2 /外中斷1中斷服務(wù)函數(shù)while(1) delay(5000); P0=0 x00; delay(5000); P0=0 xff; 在本例中,外中斷0、外中斷1均設(shè)為脈沖觸發(fā)方式,且為滿足功能要求。注意:中斷的優(yōu)先級(jí)別是不同的 【例5-3】利用外中斷控制外設(shè)的數(shù)據(jù)傳送如圖5-10所示,外設(shè)數(shù)據(jù)經(jīng)P1口輸入單片機(jī),每準(zhǔn)備好一個(gè)

20、數(shù)據(jù),發(fā)出選通信號(hào),使觸發(fā)器輸出1再經(jīng)非門得0至外中斷/INT0,向CPU發(fā)出中斷請(qǐng)求,CPU響應(yīng)這個(gè)中斷請(qǐng)求后,在中斷處理程序中先撤除中斷請(qǐng)求信號(hào),(通過P3.0=0,使/INT0=1),再由P1口輸入數(shù)據(jù)到單片機(jī)內(nèi)部。P1P3.0INT08051選通信號(hào)Q CLR DCLK+5V數(shù)據(jù) 圖圖5-10 利用中斷控制數(shù)傳送利用中斷控制數(shù)傳送 程序代碼如下:#includeunsigned char temp; /定義臨時(shí)變量,來存取送到P1口的數(shù)據(jù)sbit P3_0=P30; /定義位變量void main( )P3_0=1;/初始化外中斷0引腳,其為高電平EA=1;/開總中斷EX0=1;/開外

21、中斷0IT0=1;/外中斷脈沖觸發(fā)方式for( ; ; )/延時(shí)等待中斷發(fā)生 ; void INT0_ISR() interrupt 0 /外中斷0中斷服務(wù)函數(shù)P3_0=0;/恢復(fù)外中斷0引腳電平,除中斷請(qǐng)求信號(hào)P1=0 xff;/初始化P1temp=P1;/讀取送至P1口的數(shù)據(jù)MCS-51單片機(jī)的外部中斷源只有兩個(gè),當(dāng)需要擴(kuò)展時(shí),可以采用例5-4、例5-5、例5-6的方法進(jìn)行外部中斷源的擴(kuò)展。【例5-4】利用定時(shí)/計(jì)數(shù)器擴(kuò)展外部中斷。利用定時(shí)/計(jì)數(shù)器擴(kuò)展外部中斷源,是把定時(shí)/計(jì)數(shù)器溢出中斷做成外部中斷,即將定時(shí)/計(jì)數(shù)器設(shè)置為計(jì)數(shù)模式,然后把信號(hào)接到計(jì)數(shù)器相應(yīng)的引腳上(T0或T1)。為了使每出

22、現(xiàn)一個(gè)從高到低的脈沖時(shí)都產(chǎn)生一個(gè)中斷,可以把定時(shí)器設(shè)置為自動(dòng)重裝模式,令重裝值為FFH。當(dāng)計(jì)時(shí)器檢測(cè)到從高到低的脈沖時(shí),定時(shí)器將溢出,這時(shí)將產(chǎn)生一個(gè)中斷請(qǐng)求。程序代碼如下: #include void main(void).TMOD=0 x66;/兩個(gè)定時(shí)/計(jì)數(shù)器都設(shè)置成8位模式 TH1=0 xff; /設(shè)定重裝值TH0=0 xff;TL0=0 xff;TL1=0 xff;TCON=0 x50;/開始計(jì)數(shù)IE=0 x9f; /中斷使能./*定時(shí)器0中斷服務(wù)程序*/void timer0_int(void) interrupt 1. /*定時(shí)器1中斷服務(wù)程序*/void timer1_int(v

23、oid) interrupt 3while(!TI) . 這種方法還是有一定的限制的。首先,它只能是邊沿觸發(fā),所以當(dāng)需要的是一個(gè)電平觸發(fā)的中斷時(shí),就要在中斷中不斷地對(duì)T0或T1進(jìn)行采樣,直到它們變?yōu)楦摺F浯危瑱z測(cè)到下降沿和產(chǎn)生終端之間一個(gè)指令周期的延時(shí),這是因?yàn)樵跈z測(cè)到下降沿一個(gè)指令周期之后,計(jì)數(shù)器才加1。如果使用的8051單片機(jī)有多個(gè)定時(shí)器,而且有外部引腳,可以用這種方法來擴(kuò)充邊沿觸發(fā)的外部中斷。值得重申的一點(diǎn)是,當(dāng)使用定時(shí)器作為外部中斷時(shí),它以前的功能將不能使用,除非用軟件對(duì)它進(jìn)行復(fù)位?!纠?-5】利用外部中斷和查詢相結(jié)合的方法擴(kuò)展外部中斷。 如果系統(tǒng)有多個(gè)外中斷請(qǐng)求源,可以按照它們的輕重

24、緩急進(jìn)行排隊(duì),把其中最高級(jí)別的中斷源直接連接到單片機(jī)外中斷0輸入引腳,其余的外部中斷請(qǐng)求可以用利用邏輯器件通過“與”或者“或”的辦法連接到單片機(jī)外中斷1引腳,同時(shí)還連接到輸入/輸出端口(如P0或P1)的若干引腳,用來查詢判斷具體是哪一個(gè)中斷請(qǐng)求源發(fā)生的中斷事件。如圖5-11所示,利用單片機(jī)擴(kuò)展5個(gè)外部中斷源,中斷的優(yōu)先次序這S0S4,其中S0接到外部中斷0上,S1S4通過“與”門接到外部中斷1上;單片機(jī)的P1.4P1.7接4個(gè)發(fā)光二極管用來作為輸出指示;當(dāng)有S1S4其中一個(gè)外部中斷發(fā)生時(shí),相應(yīng)的發(fā)光二極管VD1VD4點(diǎn)亮;當(dāng)S0外部中斷發(fā)生時(shí),4個(gè)發(fā)光二極管全亮。8051S0S1S2S3 S4

25、INT0INT1P1.0P1.1 P1.2P1.3P1.4P1.5P1.6 P1.7&+5V+5VVD1VD2VD3 VD4 圖圖5-11 外部中斷擴(kuò)展電路外部中斷擴(kuò)展電路程序代碼如下:#includesbit P1_0=P10;/定義位變量sbit P1_1=P11;.sbit P1_7=P17;void main()P1=0 xff;/熄滅LEDEA=1;/開總中斷EX0=1;/開外中斷0EX1=1;/開外中斷1IT0=0;/外中斷0脈沖觸發(fā)方式 IT1=0;/外中斷1脈沖觸發(fā)方式PX0=1;/外中斷0高優(yōu)先級(jí)PX1=0;/外中斷1低優(yōu)先級(jí)for( ; ; )/延時(shí)等待中斷發(fā)生 ;

26、 void INT0_ISP() interrupt 0/外中斷0服務(wù)函數(shù)P1=0 x0f; /P1口高4位置0,點(diǎn)亮4個(gè)LED void INT1_ISR() interrupt 2/外中斷1服務(wù)函數(shù)if(P1_0=0) P1=P1&0 xef;/點(diǎn)亮VD1.if(P1_3=0) P1=P1&0 x7f;/點(diǎn)亮VD4 【例5-6】利用優(yōu)先編碼器擴(kuò)展外部中斷。從例5-5可以看出,利用與門、或門擴(kuò)展外中斷所占端口引腳較多,在實(shí)際應(yīng)用中,還可以采用優(yōu)先級(jí)解碼芯片如74LS148,把多個(gè)中斷源信號(hào)作為一個(gè)中斷。如圖5-12所示,在有8個(gè)中斷源的情況下,經(jīng)74LS148優(yōu)先譯碼后,只占

27、3個(gè)I/O引腳,即用3根引腳可分辨8個(gè)中斷源,從而節(jié)省了I/O口資源。8051S0R X 8+5VD0A0A1A2G74LS148P0.0P0.1P0.2INT0S1S2S3S4S5S6S7D1D2D3D4D5D6D7圖圖5-12 利用優(yōu)先編碼器擴(kuò)展外部中斷的電路利用優(yōu)先編碼器擴(kuò)展外部中斷的電路程序代碼如下:#includeunsigned char status;/定義一變量,用來讀取P0口狀態(tài)void main( )EA=1;/開總中斷EX0=1;/開外中斷0PX0=1;/外中斷0高優(yōu)先級(jí)for( ; ; )/延時(shí)等待中斷發(fā)生 ; void INT0_ISR( ) interrupt 0

28、/外中斷0中斷服務(wù)函數(shù)status=P0&0 x07; /讀取P0口低三位狀態(tài),不同的值 switch(status) /對(duì)應(yīng)不同的中斷源 case0: /處理中斷源0break; case 7: /處理中斷源7 break; 【例5-7】中斷嵌套。 外部中斷/INT1觸發(fā)后,啟動(dòng)計(jì)數(shù)器0。計(jì)數(shù)達(dá)到10次后停止計(jì)數(shù),啟動(dòng)定時(shí)器1。由定時(shí)器1控制定時(shí),由P1.7輸出周期為200ms的方波信號(hào),接收兩次中斷后關(guān)閉方波發(fā)生器,P1.7置低。程序如下:#include#define uchar unsigned charuchar date a,b,c;void interrupt0( ) i

29、nterrupt 2 using 1 /定義外部中斷1a+; void timer0( ) interrupt 1 using 2/定義計(jì)數(shù)器0(T0)TL0=0 xff;b+;void time1( ) interrupt 3 using 3/定義定時(shí)器1(T1)TH1=0 x06;c-;sbit P1_7=P17;void mian(void)P1_7=1; /初始化TCON=0 x01; /外部中斷為低電平觸發(fā)方式TMOD=0 x27; /啟動(dòng)定時(shí)器1和計(jì)數(shù)器0,工作方式2IE=0 x8b;/開中斷a=0;do while(a!=1);/等待外部中斷P1_7=!P1_7;/取反TL0=0

30、 xff;/初值TH0=0 x06;/初值b=0;TR0=0;/停止計(jì)數(shù)器0工作TR1=1;/啟動(dòng)定時(shí)器1do c=0 xc8;do while(c!=0); /定時(shí)輸出方波P1_7=!P1_7; while(a!=3);/等待兩次外部中斷TR1=0;/關(guān)定時(shí)器1P1_7=0;EA=0;/關(guān)總中斷EX0=0;/禁止外部中斷【例5-8】利用外部中斷實(shí)現(xiàn)發(fā)光二極管的簡(jiǎn)單控制。本例將介紹一個(gè)中斷使用的演示程序,通過這個(gè)程序,讀者可以了解到各種中斷的使用方法。程序如下:#includesbit led0=P10;/定義I/O引腳sbit led1=P11;sbit led2=P12;sbit led3

31、=P13;bit FINT0;/全局變量及位標(biāo)志定義bit FINT1;bit FT0;bit FT1;bit FT2;unsigned char T0_10ms;unsigned char T0_50ms;unsigned char T0_100ms;void int_0( );/函數(shù)聲明void int_1( );void timer_0( );void timer_1( );void serial_1( );void timer_2( );void initial();/用戶函數(shù)聲明 初始化void main(void)initial( );while(1)if(FINT0)/中斷0到,

32、則進(jìn)入循環(huán)體FINT0=0;led0=0;/中斷/INT0時(shí)燈點(diǎn)亮 led1=0;led2=0;led3=0;if(FINT1)/中斷1到,則進(jìn)入循環(huán)體 FINT1=0; led0=1;/中斷/INT1時(shí)燈熄滅led1=1; led2=1;led3=1;if(FT0)FT0=0;if(+T0_10ms30) T0_10ms=0;/未在初始化里設(shè)置定時(shí)器void initial()EA=1;/CPU所有中斷開EX0=1;/中斷開 IT0=1;/低電平觸發(fā)EX1=1;/中斷開IT1=1;/低電平觸發(fā)return;void int_0() interrupt 0 using 0/中斷/INT0FINT0=1;void int_1() interrupt 2 using 1/中斷/INT2FINT1=1;void timer_0() interrupt 1 using 2/定時(shí)器0中斷FT0=1;void timer_1() i

溫馨提示

  • 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. 人人文庫(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)論