📄 pc8255l.asm
字号:
;FILENAME:PC8255L.ASM;
;内容:交通红绿灯控制
PAGE 60,78
DATA SEGMENT
PB DB ?
MESS DB' ENTER ANY KEY CAN EXIT TO DOS!', 0DH, 0AH,'$'
DATA ENDS
STACK SEGMENT STACK
DW 5O DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACK
START: MOV AX, DATA
MOV DS, AX ;建立DATA段
MOV ES, AX
MOV AH, 09H
MOV DX,OFFSET MESS
INT 21H ;显示信息
MOV DX, 21BH
MOV AL,82H ;方式0,B口输入,A,C口输出
OUT DX, AL
MOV DX,219H
IN AL,DX ;读B口存PB单元
MOV PB, AL
MOV DX, 21BH
MOV AL,80H ;方式0均输出
OUT DX, AL
MOV DX,219H
MOV AL, PB
OR AL,0F0H ;置位PB口高4位,灭黄灯
OUT DX, AL
MOV DX, 21AH
MOV AL,0F0H ;4个红灯亮,4个绿灯灭
OUT DX, AL
CALL DELAY10 ;延迟
LLL : MOV AL, 10100101B ;1,3绿灯亮,2,4红灯亮
MOV DX, 21AH
OUT DX, AL
CALL DELAY10 ;延迟
CALL DELAY10
OR AL,0F0H ;灭1,3绿灯
OUT DX, AL
MOV CX,0008H ;置计数值8
TTT : MOV DX, 219H
MOV AL,PB ;亮1,3黄灯
AND AL,10101111B
OUT DX, AL
CALL DELAY1 ;延迟短时间
OR AL,01010000B
OUT DX,AL ;灭1,3黄灯
CALL DELAY1 ;延迟短时间
LOOP TTT ;黄灯闪烁8次
MOV DX,21AH
MOV AL,0F0H ;4个红灯亮,4个绿灯灭
OUT DX, AL
CALL DELAY1 ;延迟
MOV AL,01011010B ;2,4绿灯亮,1,3红灯亮
OUT DX,AL
CALL DELAY10 ;延迟
CALL DELAY10
OR AL,0F0H ;灭2,4绿灯
OUT DX, AL
MOV CX, 0008H ;8次
GGG: MOV DX, 219H
MOV AL,PB ;亮2,4黄灯
AND AL,01011111B
OUT DX, AL
CALL DELAY1 ;延迟
OR AL,10100000B ;灭2,4黄灯
OUT DX, AL
CALL DELAY1 ;延迟
LOOP GGG ;黄灯闪烁8次
MOV DX, 21AH
MOV AL,0F0H ;4个红灯亮,4个绿灯灭
OUT DX, AL
CALL DELAY1 ;延迟
MOV AH, 06H
MOV DL,0FFH ;判断是否有键按下,有则转PPP
INT 21H
JNZ PPP
JMP LLL ;继续
PPP: MOV AX, 4C00H ;返回DOS
INT 21H
DELAY1 PROC NEAR ;延迟子程序1
PUSH CX
MOV CX, 8000H
CCC: LOOP CCC
POP CX
RET
DELAY1 ENDP
DELAY10 PROC NEAR ;延迟子程序2
PUSH AX
PUSH CX
MOV CX, 0030
UUU: CALL DELAY1
LOOP UUU
POP CX
POP AX
RET
DELAY10 ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -