關于單片機中斷多優(yōu)先級的軟件擴展方法
?。校希?DPH
POP DPL
?。遥牛裕?P> T1: PUSH DPL
?。校眨樱?DPH
?。停希?DPTR,#T1RL
?。校眨樱?DPL
?。校眨樱?DPH
?。遥牛裕?;(PC)=T1RL,清"高優(yōu)先級生效"
觸發(fā)器,此時可響應其它中斷請求
?。裕保遥蹋?· ;T1子程序的真實入口地址
·
·
·
?。校希?DPH
POP DPL
?。遥牛裕?P> ?。樱樱?PUSH DPL
?。校眨樱?DPH
MOV DPTR,#SSRL
?。校眨樱?DPL
?。校眨樱?DPH
?。遥牛裕?;(PC)=SSRL,清"高優(yōu)先級生效"
觸發(fā)器,此時可響應其它中斷請求
SSRL: · ;串行口子程序的真實入口地址
·
·
·
?。校希?DPH
?。校希?DPL
RETI
上述程序利用IP寄存器給出了兩級優(yōu)先級,其中INT0、T0為高優(yōu)先級,INT1、T1串行口為低優(yōu)先級。為使某中斷能響應同級甚至低級中斷,只要在中斷服務子程序中用RETI指令清除相應的不可尋址的“優(yōu)先級生效”觸發(fā)器即可。程序一開始的兩條PUSH指令的作用是對原始數(shù)據進行入棧保護(如此時DPTR中的數(shù)據不需保留,則這兩條壓棧指令也可不要,相應的彈棧指令也可不要),然后將其真實子程序入口地址入棧,并經RETI出棧后彈給PC指針,以便在執(zhí)行完RETI后正確執(zhí)行真實子程序。當該中斷服務子程序執(zhí)行完畢后,RETI將返回主程序斷點處以繼續(xù)執(zhí)行原來程序。
?。?結束語
本文所闡述的多優(yōu)先級擴展方法是純軟件方法,該方法只需在程序中加入為數(shù)不多的相應代碼,便可進行各種中斷嵌套(如同優(yōu)先級響應或高優(yōu)先級響應低優(yōu)先級等)。此方法的代價是要花費更多的中斷響應時間,但相對于添加硬件擴展的方法而言,這點代價還是值得的。
評論