$NOMOD51;不使用keil提供的51寄存器地址定義,而使用下面自己寫的寄存器地址定義
EA BIT 0A8H.7
SP DATA 081H
B DATA 0F0H
ACC DATA 0E0H
DPH DATA 083H
DPL DATA 082H
PSW DATA 0D0H
TR0 BIT 088H.4
TH0 DATA 08CH
TL0 DATA 08AH
POPALL MACRO
;POP ACC ;不必保存SP,任務(wù)切換時由相應(yīng)程序調(diào)整
POP ACC ;R0~R7出棧
MOV R7,A
POP ACC
MOV R6,A
POP ACC
MOV R5,A
POP ACC
MOV R4,A
POP ACC
MOV R3,A
POP ACC
MOV R2,A
POP ACC
MOV R1,A
POP ACC
MOV R0,A
POP DPH
POP DPL
POP B
POP ACC
POP PSW
ENDM
POPALL
SETB EA ;開中斷
RETI ;RET和RETI有一個共同點,就是都使硬件執(zhí)行了PC出棧指令,而RETI除了出棧PC,
;還清除了中斷狀態(tài)寄存器觸發(fā)器標(biāo)志,否則同優(yōu)先級的,和比本中斷優(yōu)先級還低的中斷講無法觸發(fā)。
;這個中斷狀態(tài)寄存器觸發(fā)器標(biāo)志無法使用軟件清除,即使用匯編也不行,只能由RETI來觸發(fā)硬件清除。