Proteus 仿真8086+8255,运行时错误的解决

要实现的功能:通过开关控制流水灯的显示方式。
电路原理图:


汇编源程序:

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

仿真运行的结果:

Proteus 仿真8086+8255,运行时错误的解决_第1张图片


存在错误:流水灯常亮,不受开关的控制。

查错过程:

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(每根数据线都要命名)。

完成上述改动后,问题全部解决。

你可能感兴趣的:(微机原理)