八、接口芯片的综合编程题 (一)8255A
1. 若要求从8255A的A端口输出数据82H,请编写8255A的初始化程序和数据输出程序。现已知A口地址为80H,B口地址为81H,C口地址为82H,控制字寄存器地址为83H,8255A的方式控制字各位的含义如下表: D7 1 D6 D5 D4 0:端口A输出 1:端口A输入 D3 0:C4~C7输出 1:C4~C7输入 D2 D1 D0 0:C0~C3输出 1:C0~C3输入 00:端口A工作于方式0 01:端口A工作于方式1 10、11:端口A工作于方式2 0:端口0:端口B工作B输出 于方式0 1:端口1:端口B输入 B工作于方式1 答:参考程序如下:
MOV AL, 1000 0000B ;置工作方式字,只要求了A是输出,其它任意,故都选用基本 ; 工作方式 OUT 83H, AL ;输出工作方式控制字到控制端口地址 MOV AL, 82H ;将要输出的数值先给AL; OUT 80H, AL ;将数值送到A端口,其地址号为80H
2:若A口方式2 要求发两个中断允许,即PC4和PC6均需置位。B口方式1要求使PC2置位来开放中断。,8255的端口地址为60--63H,请写出其初始化程序。
31
答:参考程序如下: MOV AL,0C4H
OUT 63H,AL ;设置工作方式
MOV AL,09H ; PC4的置位控制字为00001001,即09H OUT 63H,AL ;PC4置位,A口输入允许中断
MOV AL,0DH ;PC6的置位控制字为00001101,即0DH OUT 63H,AL ;PC6置位,A口输出允许中断
MOV AL, 05H; ;PC2的置位控制字为00000101,即05H OUT 63H,AL ;PC2置位;B口输出允许中断?
3 某系统要求使用8255A的A口方式0输入,B口方式0输出,C口高4位方式0输出,C口低4位方式0输入,8255的端口地址为60--63H。请写出其初始化程序。
则控制字为: 10010001 即91H 初始化程序为: MOV AL, 91H OUT 63H,AL
4:若8255端口A工作于方式0输出,端口B工作于方式1输入,用PC2置位来自动开启STB选通信号,;请写其初始化程序! 答:初始化8255A:
MOV DX,8255_CTRL ; 8255A控制端口地址送DX MOV AL,86H ;把所设的控制字送给AL
OUT DX,AL ;再将控制字从AL送到8255的控制端口; MOV AL,05H ;把PC2置位的控制字00000101,即05H送给AL MOV DX,AL ;置PC2=1,允许中断
32
5:设8255A的控制口地址为00EEH,要求对端口C的PC7置1,则控制字00001111B=0FH,要求对端口C的PC3置0,控制字为00000110B=06H。 下面的程序可以实现上述要求:
MOV AL , 0FH ;对PC7置1的控制字 MOV DX , 00EEH ;控制口地址送DX OUT DX , AL ;对PC7置1操作 MOV AL , 06H ;对PC3置0的控制字 OUT DX , AL ;对PC3进行置0的操作
6.编一初始化程序,使8255A的PC5端输出一个负跳变。如果要求PC5端输出一个负脉冲则初始化程序又是什么情况?
解答:
初始化程序:
MOV AL,0BH;PC5置“1”控制字→AL
MOV DX,××××××11B;控制口地址→DX OUT DX,AL;置“1”控制字→控制寄存器 MOV AL,0AH;PC5置“0”控制字→AL OUT DX,AL;置“0”控制字→控制寄存器 如果要求PC5输入一个负脉冲则再加两条指令 MOV AL,0BH OUT DX,AL
7. 设8255A与8086CPU相连,8255A芯片A口工作在方式1输出,B口工作在方式0输入,禁止A口中断,8255A芯片A口、B口、C口、控制口地址分别为FFF8H、FFFAH、FFFCH、FFFEH,请写出初始化程序。
答:本题没有告诉C口高4位与低4位的出入补充为C口高4位与低4位均为输出,则其控制字为 1 01 0 0 0 1 0 B=0A2H 初始化程序为: MOV AL, 0A2H MOV DX, 0FFFEH OUT DX, AL
8.设8255端口地址为50H~56H中的偶地址,并设端口A工作在方式0输入,端口B工作在方式1输出,允许B口中断,端口C输出,对8255初始化编程。 其控制字为: 1 00 1 0 1 0 0 B= 0A4H
初始化程序为:MOV AL, 0A4H OUT 56H, AL
33
补充题: 假设8255A工作于方式0,且端口A和端口C的高4位输出,端口B和端口C低4位输入,设置该8255A的方式选择控制字,并进行初始化编程。并写出从8255A的A端口输出数据7FH的数据输出程序语句。已知A口地址为60H,B口地址为61H,C口地址为62H,控制字寄存器地址为63H,8255A的方式控制字各位的含义如下表:(本题10分)
(二)8259A
1.某系统中设置三片8259A级联使用,一片为主8259A;两片为从8259A;它们分别接入主8259A的IR2和IR6端。若已知当前主8259A和从8259A的IR3上各接有一个外部中断源,它们的中断类型码分别为A0H,B0H和C0H,已知它们的中断入口均在同一段中,其段基址为2050H,偏移地址分别为11A0H,22B0H和33C0H,所有中断都采用电平触发方式、完全嵌套、普通EOI结束,请(1)画出它们的硬件连接图;(2)编写全部初始化程序。
34
解答:
初始化程序:
START:MOV AL ,19H
MOV DX, 偶地址(主) OUT DX,AL MOV AL,0A0H
MOV DX,奇地址(主) OUT DX,AL MOV AL,44H OUT DX,AL MOV AL,11H OUT DX,AL MOV AL,11H OUT DX,AL MOV AL,0B3H OUT DX,AL MOV AL,22H
MOV DX,偶地址(主) OUT DX,AL MOV AL,19H
MOV DX,偶地址(从1) OUT DX,AL MOV AL,0B0H
MOV DX,奇地址(从1) OUT DX,AL MOV AL,02H OUT DX,AL MOV AL,11H OUT DX,AL MOV AL,0F7H OUT DX,AL
MOV DX,偶地址(从1) MOV AL,22H OUT DX,AL 从2:MOV AL,19H
MOV DX,偶地址(从2) OUT DX,AL MOV AL,0C0H
MOV DX,奇地址(从2) OUT DX,AL MOV AL,06H OUT DX,AL MOV AL,11H OUT DX,AL MOV AL,0F7H OUT DX,AL
MOV DX,偶地址(主) MOV AL,22H OUT DX,AL STI HH: HLT
JMP 11H
35
2.编一系统初始化程序,由8259A的IR0~IR4共五个中断源,中断类型码为4BH,4CH,4DH,4EH,4FH。8259A端口地址为80H、81H。允许它们以完全嵌套方式工作。 解答:
STT: MOV AL,11H MOV DX,80H OUT DX,AL MOV AL,4BH MOV DX,81H OUT DX,AL MOV AL,01H OUT DX,AL MOV AL,0D0H OUT DX,AL MOV AL,20H MOV DX,80H OUT DX,AL HLT
(三). 其它端口编程题
1. 设状态端口地址为76H,数据端口地址为75H,外部设备是否准备好信息由D7位传送,D7=1为准备好,D7=0为未准备好(忙),请用查询方式写出:CPU向外部传送数据的程序段。(8分)
答: LOP1: IN AL, 76H TEST AL, 10H JZ LOP1 ;测试语句准确(4分) MOV AL, DATA OUT 75H, AL ;输出语句准确(4分) HLT
36