單片機中斷源系統(tǒng)的設(shè)計
在AT89S52單片機中,只有兩個外部中斷請求輸入端INT0和INT1。而實際應(yīng)用系統(tǒng)中往往會出現(xiàn)兩個以上的外部中斷源,因此必須對外中斷源進行擴展。其方法主要有:用定時器/計數(shù)器T0、T1擴展;采用中斷和查詢相結(jié)合的方法擴展;用串行口的中斷擴展;用優(yōu)先權(quán)編碼器擴展等方法。這里重點介紹前兩種方法。
一、用定時器/計數(shù)器作為中斷源
AT89S52單片機的兩個定時器/計數(shù)器T0、T1可工作在計數(shù)方式,計數(shù)初值一般設(shè)定為滿量程(即定時器的最大技術(shù)值),則它們的計數(shù)輸入端P3.4或P3.5引腳上發(fā)生負跳變時,T0或T1計數(shù)器就加l,產(chǎn)生溢出中斷。利用此特性,可以把P3.4、P3.5作為外部中斷請求輸入線,而計數(shù)器的溢出中斷作為外部中斷請求標(biāo)志。
設(shè)T0為方式2(自動裝入常數(shù))外部計數(shù)方式,時間常數(shù)為0FFH,允許中斷,CPU開放中斷。其初始化程序為:
ORG 0000H ;跳到初始化程序
MOV TMOD, #06H ; T0為方式2,計數(shù)器方式工作
MOV TL0, #0FFH ; 計數(shù)初值為滿量程
MOV TH0, #0FFH ; 計數(shù)初值為滿量程
SETB TR0 ; 置TR0為1,啟動T0
MOV IE, #82H ; 置中斷允許,IE中的EA位為1,ET0位為1
當(dāng)接在P3.4引腳上的外部中斷請求輸入線發(fā)生負跳變時,TL0加1溢出,TF0被置1,向CPU發(fā)出中斷請求。同時TH0的內(nèi)容自動送入TL0,使TL0恢復(fù)初始值0FFH。這樣,P3.4引腳上的每次負跳變都將TF0置位1,向CPU發(fā)出中斷請求,CPU響應(yīng)中斷請求時,程序計數(shù)器PC轉(zhuǎn)到000BH執(zhí)行外部中斷服務(wù)程序,此時P3.4相當(dāng)于邊沿觸發(fā)的外中斷源輸入線。同理,也可以把P3.5引腳作類似的處理。
二、采用中斷與查詢相結(jié)合的方法
中斷與查詢相結(jié)合的方法是把系統(tǒng)中多個外部中斷源按它們的重要程度進行排序,把其中最高級別的中斷源接到MCS-51的一個外部中斷源輸入端(例如接到腳),其余的中斷源用線“或”的方法連接到另一個外部中斷輸入端(),并同時接到一個I/O口,如圖4-5中所示接到P1口。中斷請求由硬件電路產(chǎn)生,而中斷源的識別由程序查詢來處理,查詢順序由中斷源的優(yōu)先級決定。圖為五個外部中斷源的連接電路,其中設(shè)備1~4經(jīng)OC門與連接,并連接到P1.0~P1.3,均采用電平觸發(fā)方式。設(shè)備0為最高級中斷源,單獨作為外部中斷0的輸入信號。這種辦法擴展比較簡單,但是當(dāng)外部中斷擴展的數(shù)量較多時,查詢的時間比較長,導(dǎo)致程序的執(zhí)行效率較低。
圖 多個外部中斷源系統(tǒng)設(shè)計
外部中斷1的中斷服務(wù)程序如下:
ORG 1000H
LJMP INTR
INTR: PUSH PSW ; 保護現(xiàn)場
PUSH A
JNB P1.0, IR1 ; P1.0引腳為0,轉(zhuǎn)至設(shè)備1中斷服務(wù)程序
JNB P1.1, IR2 ; P1.1引腳為0,轉(zhuǎn)至設(shè)備2中斷服務(wù)程序
JNB P1.2, IR3 ; P1.2引腳為0,轉(zhuǎn)至設(shè)備3中斷服務(wù)程序
JNB P1.3, IR4 ; P1.3引腳為0,轉(zhuǎn)至設(shè)備4中斷服務(wù)程序
INTR1:POP A ; 恢復(fù)現(xiàn)場
POP PSW
RETI ; 中斷返回
IR1: …… ; 設(shè)備1中斷服務(wù)程序入口
AJMP INTR1 ; 跳轉(zhuǎn)到INTR1所指示的指令
IR2: …… ; 設(shè)備2中斷服務(wù)程序入口
AJMP INTR1 ; 跳轉(zhuǎn)到INTR1
IR3: …… ; 設(shè)備3中斷服務(wù)程序入口
AJMP INTR1 ; 跳轉(zhuǎn)到INTR1
IR4: …… ; 設(shè)備4中斷服務(wù)程序入口
AJMP INTR1 ; 跳轉(zhuǎn)到INTR1
編輯:admin 最后修改時間:2018-05-08