题目:
利用8255A的基本输入输出方式 (方式0) 将逻辑电平
开关K3~K1的开关状态反映在实验仪的发光二极管上。(功能类似于 38 译码器)
思路:
- 首先先根据题目要求写出控制字,然后使用MOV指令将控制字写入到AL寄存器当中。取控制端口地址使用MOV指令传送到DX寄存器当中,再使用OUT指令将控制字传送到控制端口。
- 取B口地址,设置初值为00使得LED灯为熄灭状态。
- 使用IN指令读取A口的状态到AL当中,同时由于此时为模拟38译码器,只需要K1,K2,K3三个电平开关中的数据,所以需要将高五位进行清零操作,使用AND指令进行清零。
- 使用XLAT指令进行码的转换操作,通过转换表中的一个字节来替换AL寄存器中的内容将DS:((BX)+(AL))中的内容传送到AL当中,然后再使用OUT指令传送到B口当中。
最后设定循环次数进行延时操作。
.MODEL SMALL
.486
IO_8255_ADDRESS EQU 200H ;8255基址值
DATA SEGMENT
TAB DB 01H,02H,04H,08H,10H,20H,40H,80H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
;*******************************************************************
;将控制字传送到控制端口
MOV DX,IO_8255_ADDRESS+3
MOV AL,90H
OUT DX,AL
;*******************************************************************
MOV DX,IO_8255_ADDRESS+1 ;B口
MOV AL,00H ;设置初值=00H 熄灭LED
OUT DX, AL
;******************************************************
; 读到A口数据,并将高5位清0
SS0:
MOV DX,IO_8255_ADDRESS
IN AL,DX
AND AL,07H
;**********************************************************
MOV BX,OFFSET TAB ;查表送B口
XLAT TAB
MOV DX,IO_8255_ADDRESS+1 ;B
OUT DX,AL
MOV CX,1000H
SS1: NOP
LOOP SS1;延迟一段时间
JMP SS0
CODE ENDS
END START