NAME T5 ;中断控制实验
OUTPORT EQU 0CFB0H ;端口地址
SAVE EQU 55H ;save保存从端口cfa0输出的数据
CSEG AT 0000H
LJMP START
CSEG AT 4003H
LJMP INT
CSEG AT 4100H
START: SETB IT0
SETB EX0
SETB EA
MOV A,#11H ;置首显示码
MOV SAVE,A ;保存
ACALL DISP ;显示输出
ACALL DE3S ;延时3秒
LLL: MOV A,#12H ;东西路口绿灯亮,南北路口红灯亮
MOV SAVE,A
ACALL DISP
ACALL DE10S ;延时10秒
MOV A,#10H ;东西路口绿灯灭
MOV SAVE,A
ACALL DISP
MOV R2,#05H ;东西路口黄灯闪烁5次
TTT: MOV A,#14H
MOV SAVE,A
ACALL DISP
ACALL DE02S
MOV A,#10H
MOV SAVE,A
ACALL DISP
ACALL DE02S
DJNZ R2,TTT
MOV A,#11H ;红灯全亮
MOV SAVE,A
ACALL DISP
ACALL DE02S ;延时0.2秒
MOV A,#21H ;东西路口红灯亮,南北路口绿灯亮
MOV SAVE,A
ACALL DISP
ACALL DE10S ;延时10秒
MOV A,#01H ;南北路口绿灯灭
MOV SAVE,A
ACALL DISP
MOV R2,#05H ;南北路口黄灯闪烁5次
GGG: MOV A,#41H
MOV SAVE,A
ACALL DISP
ACALL DE02S
MOV A,#01H
MOV SAVE,A
ACALL DISP
ACALL DE02S
DJNZ R2,GGG
MOV A,#11H ;红灯全亮
MOV SAVE,A
ACALL DISP
ACALL DE02S ;延时0.2秒
JMP LLL ;转LLL循环
DE10S: MOV R5,#100 ;延时10秒
JMP DE1
DE3S: MOV R5,#30 ;延时3秒
JMP DE1
DE02S: MOV R5,#02 ;延时0.2秒
DE1: MOV R6,#200
DE2: MOV R7,#126
DE3: DJNZ R7,DE3
DJNZ R6,DE2
DJNZ R5,DE1
RET
INT: CLR EA
PUSH ACC ;中断处理
PUSH PSW
MOV A,R5
PUSH ACC
MOV A,#11H ;红灯全亮,绿、黄灯全灭
ACALL DISP
DEL10S: MOV R3,#100 ;延时10秒
DEL1: MOV R2,#200
DEL2: MOV R5,#126
DEL3: DJNZ R5,DEL3
DJNZ R4,DEL2
DJNZ R3,DEL1
MOV A,SAVE ;取SAVE中保存数据输出到cfa0端口
ACALL DISP
POP ACC ;出栈
MOV R5,A
POP PSW
POP ACC
SETB EA ;允许外部中断
RETI
DISP: MOV DPTR,#OUTPORT
CPL A
MOVX @DPTR,A
RET
END |