例如:
- 已知一CPU,其地址总线为A0到A15,数据总线为D0-D7,通过74LS138和门电路进行地址译码,与8255A的接口电路如下图所示。其中k0-k7与8255A端口B相连,LED发光二极管D0-D7及相应的驱动电路与端口A相连。要求如下。(24分)
- 分析A口寄存器、B口寄存器和控制寄存器的端口地址。(9分)
- 若要将开关k0-k7的状态在对应的LED二极管D0-D7上随时反映出来,即:若ki(i=0,…,7)开关闭合,则相应的LED 灯Di(i=0,…,7)点亮。编写一个8086汇编语言程序段,实现对8255A的初始化及要求的控制功能。(15
- 由于8255A的片选端cs是由74LS138的Y5引脚输出,因此要使能8255A,相关的地质引脚编码如下表。
地址 |
A15 |
A14 |
A13 |
A12 |
A11 |
A10 |
A9 |
A8 |
A7 |
A6 |
A5 |
A4 |
A3 |
A2 |
取值 |
0 |
X |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
表中X表示无关项。
因此,8255A的A口寄存器的端口地址有两个,分别为12CCH和52CCH。8255A的B口寄存器的端口地址有两个,分别为12CDH和52CDH。8255A的控制寄存器的端口地址有两个,分别为12CFH和52CFH。
2. 因为8255A有两组地址,任选一组。满足题意的控制字为10000010B。
MOV DX, 12CFH ;控制口地址
MOV AL, 10000010B ;依据8255A控制字对8255A初始化
OUT DX, AL
CALL DELAY ;调用外部的延迟子程序
TEST: //初始化
MOV DX, 12CDH ; B口地址
IN AL, DX ;读B口状态
XOR AL, 11111111B ;将B口状态取反
MOV DX, 12CCH ;A口地址
OUT DX, AL ;将取反后的B口状态送到A口,控制LED灯亮
CALL DELAY ;调用外部的延迟子程序
…..
JMP TEST ;循环执行