AT89S51為用戶提供兩個(gè)外部中斷請求輸入端INT0(的反)和INT1(的反),實(shí)際的應(yīng)用系統(tǒng)中,兩個(gè)外部中斷請求源往往不夠用,需對外部中斷源進(jìn)行擴(kuò)充。下面介紹一種擴(kuò)充外部中斷源的方法。
如下圖所示,若系統(tǒng)中有5個(gè)外部中斷請求源IR0~I(xiàn)R4,它們均為高電平請求有效,這時(shí)可按中斷請求的輕重緩急進(jìn)行排隊(duì),把其中最高級別的中斷請求源IR0直接接到AT89S51的一個(gè)外部中斷請求源IR0輸入端INT0,其余的4個(gè)中斷請求源IR1~I(xiàn)R4按下圖所示的方法通過各自的OC門(集電極開路門)連到AT89S51的另一個(gè)外中斷源輸入端INT1,同時(shí)還連到P1口的P1.0~P1.3腳,供AT89S51查詢。各外部中斷請求源的中斷請求由外部設(shè)備的硬件電路產(chǎn)生。采用如下圖所示的電路,除了IR0的中斷優(yōu)先權(quán)級別最高外,其余4個(gè)外部中斷源的中斷優(yōu)先權(quán)取決于查詢順序,這里假設(shè)查詢順序?yàn)镻1.0~P1.3,因此,中斷優(yōu)先權(quán)由高到低的順序依次為IR1,…,IR4。中斷優(yōu)先權(quán)的高、低取決于查詢順序。
假設(shè)上圖的4個(gè)外部設(shè)備中有一個(gè)外部設(shè)備提出為高電平有效的中斷請求信號,則中斷請求通過4個(gè)集電極開路OC門的輸出公共點(diǎn),即INT1腳的電平就會(huì)變低。那么究竟是哪個(gè)外部設(shè)備提出的中斷請求,還要通過程序查詢P1.0~P1.3引腳上的邏輯電平來確定。本例假設(shè)某一時(shí)刻只能有一個(gè)外部設(shè)備提出中斷請求,并設(shè)IR1~I(xiàn)R4這4個(gè)中斷請求源的高電平可由相應(yīng)的中斷服務(wù)子程序清0,則處理INT1的中斷服務(wù)子程序如下:
查詢法擴(kuò)展外部中斷源比較簡單,但是擴(kuò)展的外部中斷源個(gè)數(shù)較多時(shí),查詢時(shí)間稍長。