$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,任务切换时由相应程序调整
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有一个共同点,就是都使硬件执行了PC出栈指令,而RETI除了出栈PC,
;还清除了中断状态寄存器触发器标志,否则同优先级的,和比本中断优先级还低的中断讲无法触发。
;这个中断状态寄存器触发器标志无法使用软件清除,即使用汇编也不行,只能由RETI来触发硬件清除。