例如:
- 已知一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 ;循环执行