📄 88998.asm
字号:
CODE SEGMENT ;定义代码段
ASSUME CS:CODE ;段寄存器说明
ORG 1000H ;指定地址伪指令
INTQ EQU INTREEUP
AB DW ? ;设置参数变量
CC DB ?
AA DB ?
COU DB ?
CON DB ?
HU DB ?
DE DB ?
BD DB ?
BB DB ?
START: MOV BD,0
MOV CC,0
MOV AB,0
MOV BB,0
MOV HU,0
MOV DX,04BH
MOV AL,0BEH ;置8253通道2方式控制字
OUT DX,AL
MOV DX,04AH
MOV AX,2710H ;置8253通道2计数初值
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV AL,13H ;初始化8259 ICW1
MOV DX,20H
OUT DX,AL
MOV AL,08H ;初始化8259 ICW2
MOV DX,21H
OUT DX,AL
MOV AL,03H ;初始化8259 ICW4
OUT DX,AL
MOV AL,0FBH ;初始化8259 0CW1
OUT DX,AL
MOV AX,0H ;置8259中断向量
MOV ES,AX
MOV DI,0028H
LEA AX,INTQ ;有效地址传送
STOSW ;字符串存储指令
MOV AX,CS
STOSW
STI ;开中断
MOV DX,73H
MOV AL,81H ;8255初始化
OUT DX,AL
MOV DX,71H
MOV AL,36H ;所有路口红灯亮
OUT DX,AL
CALL DELAY2 ;过程调用指令
CYCLE1: MOV COU,2
START1: MOV AL,81H
OUT 73H,AL
MOV CH,1 ;置倒计时初值
MOV CL,9
NS: MOV AL,1EH ;NS方向绿灯亮,通车
OUT 71H,AL
CALL NS1
CALL DELAY2
CMP CL,8 ;比较指令
JNE NS ;条件转移指令(ZF=0,转至标号出执行)
CMP CH,0 ;比较指令
JNZ C1
MOV AA,5
MOV CH,0
MOV CL,4
I1: CALL NS1 ;显示黄灯倒计时
MOV AL,2EH ;等待,黄灯闪烁5S
MOV DX,71H
OUT DX,AL
CALL DELAY1
MOV AL,3EH
OUT DX,AL
CALL DELAY1
DEC AA ;减一指令
JNZ I1
CALL NS1
D1: JMP START2
C1: DEC CH
JMP NS ;无条件转移指令
START2: MOV CL,9
MOV CH,1
EW: MOV AL,33H ;EW方向绿灯亮,通车
OUT 71H,AL
CALL EW1
CALL DELAY2
CMP CL,8
JNE EW
CMP CH,0
JNZ C2
MOV AA,5
MOV CH,0
MOV CL,4
I2: CALL EW1 ;显示黄灯倒计时
MOV AL,35H ;等待,黄灯闪烁5S
MOV DX,71H
OUT DX,AL
CALL DELAY1
MOV AL,37H
OUT DX,AL
CALL DELAY1
DEC AA
JNZ I2
CALL EW1
D2: DEC COU ;判断是否到了晚上
JZ START3 ;条件转移指令(ZF=1)
JMP START1
C2: DEC CH
JMP EW
START3:MOV CON,10 ;晚间黄灯数码管闪烁程序
CYCLE2:MOV DX,71H
MOV AL,3FH
OUT DX,AL
MOV BL,00H
MOV AL,80H
OUT 0DFH,AL
MOV AL,BL
OUT 0DEH,AL
MOV AL,81H
OUT 0DFH,AL
MOV AL,BL
OUT 0DEH,AL
MOV AL,84H
OUT 0DFH,AL
MOV AL,BL
OUT 0DEH,AL
MOV AL,85H
OUT 0DFH,AL
MOV AL,BL
OUT 0DEH,AL ;黄灯亮,数码管亮
CALL DELAY1 ;延时0.5S
MOV DX,71H
MOV AL,2DH
OUT DX,AL
MOV BL,3FH
MOV AL,80H
OUT 0DFH,AL
MOV AL,BL
OUT 0DEH,AL
MOV AL,81H
OUT 0DFH,AL
MOV AL,BL
OUT 0DEH,AL
MOV AL,84H
OUT 0DFH,AL
MOV AL,BL
OUT 0DEH,AL
MOV AL,85H
OUT 0DFH,AL
MOV AL,BL
OUT 0DEH,AL ;黄灯灭,数码管灭
CALL DELAY1 ;延时0.5S
DEC CON ;判断是否到了白天
JNZ CYCLE2
JMP CYCLE1
DELAY1: MOV AX,AB ;延时0.5S
ADD AX,1 ;加法指令
Y1:CMP AB,AX
JL Y1 ;条件转移(大于)
RET ;返回指令
DELAY2: CALL DELAY1 ;延时1S
CALL DELAY1
RET
NS1: MOV AL,80H
OUT 0DFH,AL ;8279初始化
MOV BX,OFFSET TABLE1
MOV AL,CL
XLAT ;查表指令{(BX)+(AL)——AL
OUT 0DEH,AL ;数码管显示倒计时
CMP CL,0
JNZ A1
B1: MOV CL,9
JMP NEXT1
A1: DEC CL
NEXT1: MOV AL,81H ;8279初始化
OUT 0DFH,AL
MOV BX,OFFSET TABLE2
MOV AL,CH
XLAT
OUT 0DEH,AL ;数码管显示倒计时
RET
EW1: MOV AL,84H
OUT 0DFH,AL
MOV BX,OFFSET TABLE1
MOV AL,CL
XLAT
OUT 0DEH,AL
CMP CL,0
JNZ A2
B2: MOV CL,9
JMP NEXT2
A2: DEC CL
NEXT2: MOV AL,85H
OUT 0DFH,AL
MOV BX,OFFSET TABLE2
MOV AL,CH
XLAT
OUT 0DEH,AL
RET
INTREEUP: PUSH AX ;中断服务程序
H1: IN AL,72H ;读8255C口
AND AL,01H
CMP AL,0
JG STOP ;PC0为1转STOP程序
INC CC
CMP CC,50
JL K
MOV CC,0
INC AB
INC HU
CMP HU,3
JGE H2
MOV AL,7FH ;指示工作灯亮
OUT 72H,AL
POP AX
IRET
K: POP AX
IRET
STOP: ;紧急情况程序
MOV AL,36H
OUT 71H,AL ;红灯全亮
INC BD
CMP BD,50
JL K
MOV BD,0
INC BB
CMP BB,3
JGE H4
MOV AL,7FH ;指示工作灯亮
OUT 72H,AL
JMP K
H2:MOV AL,80H ;指示工作灯灭
OUT 72H,AL
CMP HU,4
JGE H3
JMP K
H3:MOV HU,0
JMP K
H4: MOV AL,80H ;指示工作灯灭
OUT 72H,AL
CMP BB,4
JGE H5
JMP K
H5:MOV BB,0
JMP K
TABLE1 DB 06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,3FH
TABLE2 DB 3FH,06H,5BH,4FH,66H,6DH,7DH
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -