只为记录汇编实验(8255考试重点)
①了解8255A的CS端口
8255A的CS端口-----Y1(288H~28FH)
控制寄存器地址 28BH
A口的地址 288H
B口的地址 289H
C口的地址 28AH
②连接电路,此图用到的是PC端因此用C口,也就是MOV DX,28AH
如果是A口则使用的是MOV DX,288H
③看流程图直接按流程走
流程① 设置8255A口输出C口输出
MOV AL,80H
MOV DX,28BH
OUT DX,AL
流程②南北路口绿灯亮,东西路口红灯亮
MOV AL,24H
MOV DX,28AH
OUT DX,AL
流程③长延时 引用子程序
CALL DELAY
长延时子程序代码如下
;长延迟
DELAY PROC NEAR
PUSH CX
PUSH DI
MOV CX,2000H ;设置外层循环次数
Y1:
MOV DI,2000H ;设置内层循环次数
X1:
DEC DI
JNE X1
LOOP Y1
POP DI
POP CX
RET
DELAY ENDP
流程④南北口黄灯闪烁转红灯 东西口红灯转绿灯(黄灯闪烁四次)
MOV CX,4 ;黄灯闪烁次数
F1:
MOV AL,44H ;也就是0100 0100B L2和L6灯亮
MOV DX,28AH ;C口地址给DX
OUT DX,AL ;AL中的值 在DX地址输出
CALL S ;调用短延迟子程序
MOV AL,04H ;0000 0100B L2灯亮
MOV DX,28AH ;C口地址给DX
OUT DX,AL
CALL S ;调用用短延迟子程序
LOOP F1 ;循环F1也就是黄灯闪烁次数
短延迟 子程序
;短延迟
S PROC NEAR
PUSH CX
PUSH DI
MOV CX,1500H ;设置循环次数
YY: MOV DI,1500H ;设置循环次数
XX: DEC DI ;二重循环 内层
JNE XX
LOOP YY ;二重循环 外层
POP DI
POP CX
RET
S ENDP
整体代码如下:
DATA SEGMENT
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DX,AX
MOV AL,80H
MOV DX,28BH
OUT DX,AL
F:
;状态1
MOV AL,24H
MOV DX,28AH
OUT DX,AL
CALL DELAY
;状态2
MOV CX,4
F1:
MOV AL,44H
MOV DX,28AH
OUT DX,AL
CALL S
MOV AL,04H
MOV DX,28AH
OUT DX,AL
CALL S
LOOP F1
;状态3
MOV AL,81H
MOV DX,28AH
OUT DX,AL
CALL DELAY
;状态4
MOV CX,4
F2:
MOV AL,82H
MOV DX,28AH
OUT DX,AL
CALL S
MOV AL,80H
MOV DX,28AH
OUT DX,AL
CALL S
LOOP F2
JMP F
;长延迟
DELAY PROC NEAR
PUSH CX
PUSH DI
MOV CX,2000H
Y1:
MOV DI,2000H
X1:
DEC DI
JNE X1
LOOP Y1
POP DI
POP CX
RET
DELAY ENDP
;短延迟
S PROC NEAR
PUSH CX
PUSH DI
MOV CX,1500H
YY: MOV DI,1500H
XX: DEC DI
JNE XX
LOOP YY
POP DI
POP CX
RET
S ENDP
MOV AH,4CH
INT 21H
CODE ENDS
END START