问题简述:用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"时,程序编译通过,仿真出现正确结果,如下图图所示。
附代码:
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",其它都不变,程序编译通过,但是仿真结果不正确,数码管不显示,如下图所示。
附代码:
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