51 汇编编程:中断的现场保护与恢复
扫描二维码
随时随地手机看文章
;
;有个交通灯的题目
;问题主要是中断时,强制变换为红灯后,退出前应该怎样恢复原来的灯。
;
;一般来说,保护现场、恢复现场,都是用 PUSH、POP 来完成。
;
;这种方法,仅仅适用于片内单元的保护,对于接口,以及显示器的内容,就不适用了。
;
;外设的状态如何恢复呢?
;
;做而论道编写了一个小程序,来说明恢复的方法。
;
;仿真运行如下图:
;
;
;
;全部程序如下。
;
;交通灯
;-------------------------------------------
ORG 0000H
JMP MAIN
ORG 0003H ;外部中断0的入口地址
JMP X0_INT
ORG 000BH ;T0中断的入口地址
JMP T0_INT
;***************************************
MAIN:
MOV TMOD, #01H
MOV TH0, #3CH
MOV TL0, #0B0H
MOV R1, #20 ;定时1s
SETB TR0
SETB ET0
SETB PT0
SETB EX0
SETB IT0
SETB EA
MOV SP, #60H
M_LOOP:
;***************************************
N_B:
MOV 30H, #11H ;南北
MOV P1, 30H
MOV R5, #30 ;
CALL DISPLAY
MOV R2, #27
LOOP1:
CALL WAIT_1S
DJNZ R2, LOOP1 ;判断是否过了27s
;--------------------------
MOV 30H, #21H
MOV P1, 30H
MOV R2, #3
LOOP11:
CALL WAIT_1S
DJNZ R2, LOOP11 ;判断是否过了3秒
;***************************************
D_X:
MOV 30H, #0AH ;东西
MOV P1, 30H
MOV R5, #30
CALL DISPLAY
MOV R2, #27
LOOP2:
CALL WAIT_1S
DJNZ R2, LOOP2 ;判断是否过了27s
;--------------------------
MOV 30H, #0CH
MOV P1, 30H
MOV R2, #3
LOOP22:
CALL WAIT_1S
DJNZ R2, LOOP22 ;判断是否过了3秒
JMP M_LOOP
;***************************************
WAIT_1S: ;等待新秒出现
JNB 20H.0, $
CLR 20H.0
DEC R5
CALL DISPLAY
RET
;-----------------------------
DISPLAY:
MOV A, R5
MOV B, #10
DIV AB
MOV DPTR, #TAB1
MOVC A, @A + DPTR
CPL A
MOV P0, A
MOV A, B
MOV DPTR, #TAB1
MOVC A, @A + DPTR
CPL A
MOV P2, A
RET
TAB1:
DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH
;***************************************
X0_INT:
MOV P1, #09H ;全部红灯
PUSH ACC
PUSH B
PUSH PSW
SETB RS0 ;换工作区
MOV R5, #10 ;倒计时显示
CALL DISPLAY
MOV R1, #20 ;定时1s
;----------------
MOV R2, #10 ;倒计时
LOOP3:
CALL WAIT_1S
DJNZ R2, LOOP3 ;判断是否到了10s
;----------------
POP PSW ;恢复原区
CALL DISPLAY ;显示原值
MOV P1, 30H ;显示原灯
POP B
POP ACC
RETI
;-----------------------------
T0_INT: ;T0中断,高优先级
MOV TL0, #0B0H
MOV TH0, #3CH ;50ms中断一次
DJNZ R1, EXIT_T0
MOV R1, #20 ;定时1s
SETB 20H.0 ;每到一秒就置一
EXIT_T0:
RETI
;***************************************
END
;-------------------------------------------
;
;本程序对中断现场的保护、恢复效果如何?
;
;感兴趣的网友,可以试试看。
;