MCS-96系列單片機中斷優(yōu)先級的控制方法
1、前 言
在許多文獻[1,2,3]中,雖指出了MCS—96系列單片機的中斷優(yōu)先級可用軟件的方法加以改變這一事實,但并未對此作必要深入的闡述。事實上,該系列單片機的中斷系統(tǒng)頗具特色,其中斷優(yōu)先級的控制極具靈活性,用戶可采用軟、硬件結合的方法隨心所欲地安排各類中斷源的優(yōu)先級。
2、MCS—96系列單片機中斷
優(yōu)先級結構的特點
MCS—96系列單片機中斷系統(tǒng)的硬件優(yōu)先級排隊電路為各類中斷源規(guī)定了優(yōu)先級順序。這種中斷優(yōu)先級的結構有如下特點。
(1)硬件排隊電路并不能保證各中斷源的優(yōu)先級。這是因為在某個中斷源的中斷請求被CPU響應后,INT-PENDING 中的相應位即被清零,這意味著正在被服務的中斷源不能參加有新的中斷請求后的優(yōu)先權比較,倘未采取一定措施,就會造成級別高的中斷服務被級別較低的中斷申請所打斷的后果。譬如外中斷(優(yōu)先級最高)和定時器溢出中斷(優(yōu)先級最低)同時產生,在系統(tǒng)已開放中斷的情況下,外中斷的申請將首先被CPU所響應,進入其中斷服務程序后,定時器溢出的中斷申請又被優(yōu)先權編碼電路加以比較,由于INT-PRNDING中對應外中斷的位已被清零,這時參與優(yōu)先級比較的僅有定時器溢出中斷,因而外中斷的服務過程被打斷,CPU轉向定時器溢出的中斷服務程序,直到服務完畢后,才返回為外中斷繼續(xù)服務。不難看出,在多個中斷源提出中斷申請的情況下,事實上最先得到完整服務的將是級別最低的中斷源,級別最高的中斷服務反而要等到最后才可完成。這也意味著最高級別的中斷源實質上變成了最低級別。
(2)可采用軟、硬件結合的方法實現(xiàn)特定的優(yōu)先級別順序。雖然如上所述,硬件排隊電路不能保證按指定優(yōu)先級的高低順序實現(xiàn)中斷嵌套,但可采取一定的軟件措施來實現(xiàn)設計人員所預想的優(yōu)先級排隊順序。
3、實現(xiàn)預定的優(yōu)先級排隊
順序的軟件措施
為實現(xiàn)特定的中斷優(yōu)先級順序,需在軟件上采取相應的措施,下面分四種情況予以討論。
3.1 實現(xiàn)硬件規(guī)定的優(yōu)先級順序
硬件電路規(guī)定了8種中斷源的優(yōu)先級順序,即外中斷的優(yōu)先級最高,串行口中斷次之,……,而定時器溢出中斷的級別最低。實現(xiàn)硬件所規(guī)定的這種優(yōu)先級有兩種含義:一是在多個中斷源提出中斷申請時,CPU優(yōu)先響應級別最高的請求;二是高級別的申請可打斷低級別的服務過程,但反之不可,其具體做法如下:
(1)首先在主程序中設置INT—MASK,執(zhí)行指令LDB INT—MASK,#0FFH,使其內容為全1,以開放全部的中斷,使任一中斷源或多個中斷源提出中斷申請時,CPU全部予以響應。
(2)在每一中斷服務程序的開始便執(zhí)行DI或PUSHF指令,以禁止所有的中斷,而后將INT-MASK中優(yōu)先級低于本次中斷的所有位清零,而高于本次中斷的所有位置1,再執(zhí)行EI指令開放中斷。如此做之后,在該中斷服務程序執(zhí)行的過程中,低級別的中斷不可能實現(xiàn)中斷嵌套而高級別的中斷則可以。在中斷服務程序的結尾處,應再次將INT-MASK置為FFH,以使CPU在中斷返回后能再次響應任何中斷。這樣就保證了硬件所規(guī)定的優(yōu)先權順序。
下面是采用上述方法的HSO中斷服務程序的開始和結束處所需使用的指令示例。
INT-SHO:PUSHF
LDB INT-MASK,#0F0H
EI
.
.
.
POPF
RET
PUSHF指令的作用是保護PSW的內容并關總中斷開關;由于HSO事件中斷對應INT-MASK中的D3位,因此LDB INT-MASK,#0F0H指令的作用是只允許高于HSO事件的中斷;POPF的指令是恢復PSW,這樣也使INT-MASK=0FFH,因為在主程序中原已將FFH送入該寄存器。
3.2 不允許任何中斷打斷正在
運行的中斷服務程序
做法比較簡單,在進入中斷服務程序后便關中斷(使PSW.9=0),直至中斷服務程序結束時才開中斷。程序示例如下:
INTSUB:PUSHF(或DI)
.
.
.
POPF(或EI)
RET
PUSHF使PSW.9=0,從而禁止了所有中斷。在中斷服務程序的運行過程中不準開放中斷,直到程序結束。這樣就保證了任何中斷申請都不能打斷正在進行的服務過程。
3.3 使任意的中斷源成為最高級別
這是指用戶安排特定的中斷源的中斷申請能夠打斷任何中斷服務程序而實現(xiàn)中斷嵌套,保證在任何情況下這一指定的中斷源都能得到優(yōu)先的服務。具體做法是在每一中斷服務程序的開始先關總中斷,而后設置INT-MASK,只開放設定為最高級別的中斷。
假設指定A/D轉換結束中斷能夠中斷任何服務過程,則外中斷的中斷服務程序設計如下:
EXTINT:PUSHF ??;關總中斷
LDB INT_MASK, # 02H?。恢辉试SA/D轉換結束中斷
EI ;開中斷
.
.
.
POPF
RET
3.4 任意安排各中斷源的優(yōu)先級別
可根據系統(tǒng)的實際需要,重新安排各中斷源的優(yōu)先級,使之不同于硬件所規(guī)定的中斷優(yōu)先級。具體做法是在每一中斷服務程序的開始即關中斷,然后對INT-MASK進行設置,只開放預定的高級別的中斷。假設需設定優(yōu)先級由高至低的順序依次為:定時器溢出中斷、外中斷、A/D轉換結束中斷,則對應的三個中斷服務程序可設計如下:
TIMERV:PUSHF ?。欢〞r器溢出的中斷服務程序
.
.
.
POPF
RET
EXTINT:PUSHF ??;外中斷的中斷服務程序
LDB INT_MASK, # 01H??;只開放定時器溢出中斷
EI
.
.
.
POPF
RET
AD-INT:PUSHF ;A/D轉換結束中斷服務程序
LDB INT_MASK, # 81H ;開放定時器溢出中斷及外中斷
EI
.
.
.
POPF
RET
在A/D轉換結束的中斷服務程序中開放了定時器溢出中斷和外中斷,則這兩類中斷均可打斷該程序的運行;在外中斷的中斷服務程序中只開放了定時器溢出中斷;而在定時器溢出的中斷服務程序的運行中則禁止任何中斷,這樣便保證了預定的中斷嵌套的實現(xiàn)。
4、MCS—96系列單片機中斷
優(yōu)先級控制小結
如前所述,MCS—96系列單片機具有與眾不同的中斷結構,其中斷優(yōu)先級的控制極具靈活性。硬件排隊電路雖為各類中斷源規(guī)定了優(yōu)先級,但由于正在被服務的中斷源不參加有新的中斷申請時的優(yōu)先級的比較,這就造成了高級別的服務過程可能會被低級別的申請所打斷的結果。但正如前面所討論的,可采取一定的軟件措施實現(xiàn)預定的優(yōu)先級排隊方案,即根據不同的情況在中斷的服務程序中通過關、開中斷及設置中斷屏蔽寄存器INT-MASK來達到目的。顯然這種方法可使用戶隨心所欲地安排中斷源的優(yōu)先級順序,具有很大的靈活性,為中斷系統(tǒng)的設計、軟件編程帶來了方便。
5、參考文獻
[1]金磐石,王永明.INTEL96系列單片微型機應用詳解.北京:電子工業(yè)出版社,1992
[2]張振安,張培仁.MCS—96系列單片微機原理與實踐.合肥:中國科技大學出版社,1993
[3]朱曉強,姚志石.8096/8098單片機原理及應用.上海:復旦大學出版社,1993