用proteus对8086+8255A仿真点亮数码管,用8086的A1,A2或A1,A3地址线对8255A片内寻址,可以点亮数码管,但是用A0,A1却点不亮,是A0不能做地址线进行片内寻址吗?

问题简述:用proteus对8086+8255A进行仿真,点亮一个数码管。用8086的A1、A2地址线对8255A进行片内寻址,可以点亮数码管,但是用地址线A0、A1却点不亮。我好奇怪,是A0不能做地址线进行片内寻址吗?试了用A1、A3结果也都可以点亮。程序和仿真原理图应该都没什么问题,就是这个不明白。
另外还有一个问题,当能点亮的时候,数码管左边接线处的逻辑指示灯为什么全是红色啊(如下图),不是应该有红有蓝吗?

仿真背景:用proteus仿真8086+8255A芯片点亮一个共阳极数码管,使其显示数字1,用8255A的端口B点亮,汇编语言编写程序。

问题描述及现象:
1、当我使用8086的地址线A1,A2对8255A进行片内寻址时,也就是8255A的四个端口地址分别为"60H,62h,64H,66h"时,程序编译通过,仿真出现正确结果,如下图图所示。

img


附代码:

DATA    SEGMENT
    PORTA EQU 60H;8255A端口地址
    PORTB EQU 62H
    PORTC EQU 64H
    CONTROL    EQU 66H
DATA    ENDS

STACK   SEGMENT    STACK
    DW 100H DUP(?)
STACK   ENDS

CODE    SEGMENT    PUBLIC 'CODE'
    ASSUME CS:CODE,DS:DATA,SS:STACK
START:
    MOV AX,DATA
    MOV DS,AX
    MOV AX,STACK
    MOV SS,AX

    MOV AL,10100100B;8255方式控制
    OUT CONTROL,AL

    MOV AL,79H;共阳极数码管亮1
    OUT PORTB,AL

ENDING:
    JMP    ENDING
CODE    ENDS
    END START

2、当我使用8086的地址线A0,A1 对8255A进行片内寻址时,对应8255A的四个端口地址为"61h,62H,63h,64H",其它都不变,程序编译通过,但是仿真结果不正确,数码管不显示,如下图所示。

img


附代码:

DATA    SEGMENT
    PORTA EQU 60H;8255A端口地址
    PORTB EQU 61H
    PORTC EQU 62H
    CONTROL    EQU 63H
DATA    ENDS

STACK   SEGMENT    STACK
    DW 100H DUP(?)
STACK   ENDS

CODE    SEGMENT    PUBLIC 'CODE'
    ASSUME CS:CODE,DS:DATA,SS:STACK
START:
    MOV AX,DATA
    MOV DS,AX
    MOV AX,STACK
    MOV SS,AX

    MOV AL,10100100B;8255方式控制
    OUT CONTROL,AL

    MOV AL,79H;共阳极数码管亮1
    OUT PORTB,AL

ENDING:
    JMP    ENDING
CODE    ENDS
    END START

A0、A1地址线的问题:
A0、A1地址线与8086的其他地址线一样,是可以用来进行片内寻址的。而具体能否点亮数码管,应该看8255A的端口地址设置,程序代码是否把数据输出到了正确的端口上。

关于指示灯问题:
指示灯颜色变化是模拟电路状态的一种方式,可以代表信号的逻辑电平,如果全是红色的话,表明这些信号的逻辑电平都是高电平,你需要检查一下程序代码与仿真原理图的配置是否正确。
如果代码编译通过了,但是仿真结果不正确,可能是因为端口地址配置不正确,导致控制字节输出到了错误的端口,影响了数码管的正常工作。建议检查配置的端口地址是否与实际使用的端口地址一致。