题目是:
软件:Proteus、emu8086
- 在最小系统和译码电路的基础上,学习使用8255芯片。开关设置的二进制信息由B口输入,经程序转换成对应的七段LED段码后,通过A口输出,由七段LED显示开关二进制的状态值。注:若B口读入的值为0000,则LED显示器将显示0,以此类推,若B口读入的值为1111,则LED显示器将显示F。
预期效果:
思路:
就是通过B端口进行数据输入,然后通过A端口进行输出,1-4排成从低到高的二进制数,然后再通过根据输入具体数据找到相对应A端口中7个引脚的输出关系,从而达到控制电子数字显示的功能;
- 第一步:因为7引脚的LED显示屏中有七个不同块,由七个引脚分别控制,所以需要找出在相应0-F的显示下7个引脚的状态;
注:当相应引脚为低电平时,引脚控制相应的块就会亮;
- 第二步:找出0-F对应的编码。
040H,0F9H,024H,030H,019H,012H,02H,078H,00H,010H,08H,03H,046H,21H,06H,0EH
- 第三步、编码编译
;端口地址
INB EQU 2B2H ;portB读入
OUTA EQU 2B0H ;portA输出
CTL EQU 2B6H ;控制字端口
;输出端口 0 1 2 3 4 5 6 7 8 9 A B C D E F
DigitalLED DB 040H,0F9H,024H,030H,019H,012H,02H,078H,00H,010H,08H,03H,046H,21H,06H,0EH
CODE SEGMENT
ASSUME CS:CODE
;初始化控制配置端口
START:MOV DX,CTL
MOV AL,10000010B ;控制字
OUT DX,AL ;控制字输入到控制端口
;实现B口进,A口出
INPUT:MOV DX,INB
IN AL,DX ;接收B端口输入的数据
AND AL,0FH ;取最低4位
MOV BX,OFFSET DigitalLED ;将输入字对应内容偏移量送到BX
XLAT ;命令含义:AL<-(DS*16+BX+AL)
MOV DX,OUTA
OUT DX,AL
JMP INPUT ;转回重新B端口输入
CODE ENDS
END START
- 执行查看效果:
最难的部分应该是当时想到对应的转换关系,然后想到OFFSET以及XLAT指令选择不同的输出,比一开始纯用CMP和JZ好太多了;