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