要实现的功能:通过开关控制流水灯的显示方式。
电路原理图:
汇编源程序:
CODE SEGMENT
ASSUME CS:CODE
START:MOV AL,90H
OUT 36H,AL
AGAIN:
IN AL,30H
TEST AL,03H
JZ EXIT
TEST AL,01H
JZ DISP_0
TEST AL,02H
JZ DISP_1
JMP AGAIN
DISP_0:MOV AL,55H
OUT 32H,AL
JMP AGAIN
DISP_1:MOV AL,0AAH
OUT 32H,AL
JMP AGAIN
EXIT:MOV AH,4CH
INT 21H
CODE ENDS
END START
仿真运行的结果:
存在错误:流水灯常亮,不受开关的控制。
查错过程:
STEP1:检查译码子电路,确认8255A的端口地址。
经检查,当地址是30H~3FH时,#IO3为低,即8255A的CS有效。
STEP2:检查8255A的A0、A1的连接是否正确。
经检查,上图中有错,错误是:8255A的A0、A1应该接到地址寄存器的输出端,而不是直接接8086的AD0和AD1端。
本例题中,地址寄存器在译码子电路内部,译码子电路图如下。
分析一下,发现上面的译码子电路,没有把A1和A2两个信号引出。修改后的译码子电路如下,增加的两个输出信号,下图中已经用圆圈标注出来了。
子电路修改好后,返回主电路,修改IOS(加上两个输出A1和A2,并把这两个引脚与8255A的A0和A1连接),修改8255A的D0-D7(每根数据线都要命名)。
完成上述改动后,问题全部解决。