资源描述
<p>微机原理与接口技术(楼顺天第二版)习题解答
第10章 并行接口芯片8255A应用设计
10.1答:方式0是基本的输入/输出,端口A、B、C都可以作为输入输出端口。适用于CPU与非智能I/O设备的数据传输;
方式1是有联络信号的输入/输出,端口A、B都可以设定成该方式,此时三个端口的信号线分成了A、B两组,用作A组的联络信号,用作B组的联络信号。适用于高速CPU与低速I/O设备的数据传输;
方式2是双向传输,只有A组端口可以设定成该方式,PC6~PC7用作输出的联络信号,PC4~PC5用作输入的联络信号,PC3用作中断请求信号。适用于双机之间数据的并行传送。
10.2 答:(1)PC6~PC7用作输出的联络信号,PC4~PC5用作输入的联络信号,PC3用作中断请求信号,PC0~PC2用作基本I/O。
(2)PC4~PC5用作输入的联络信号,PC3用作中断请求信号,PC1~PC2用作输入的联络信号,PC0用作中断请求信号。PC6~PC7用作基本I/O。
(3)PC6~PC7用作输出的联络信号,PC4~PC5用作输入的联络信号,PC3用作中断请求信号,PC1~PC2用作输入的联络信号,PC0用作中断请求信号。
(4):由外设(输入设备)提供的选题脉冲,表示将外设送来的数据锁存到端口寄存器;
IBF:是8255A向外设信号的响应,表示端口寄存器已经收到数据,但尚未被CPU取走(CPU通过读命令从端口寄存器取走数据后,IBF自动变为0);
:由8255A向外设(输出设备)发出的数据准备好信号,表示CPU已经将数据写入端口寄存器;
:外设向8255A发回的响应,其有效表示外设已经将数据从端口寄存器取走,该信号使得8255A的变高,CPU可以再一次向8255A发送数据;
INTE:是8255A内的中断允许触发器,可以通过对C口的PC6,PC4,PC2通过按位置位/复位命令字设定;
INTR:是8255A进行选通输入输出时的中断请求信号,A口的选通输入输出用PC3,B口的选通输入输出用PC0。
10.3 答:8255A工作在方式1输入或输出时,中断请求信号从C口的PC3引出;输入中断由INTEA(PC4通过按位置位/复位命令字设定)和IBF相与产生,输出中断由INTEA(PC6通过按位置位/复位命令字设定)和相与产生;中断屏蔽由PC6,PC4通过按位置位/复位命令字设定。
10.4 答:1, 1, 1
10.5 答:A口+ PC3~PC7;B口+ PC0~PC2。
10.6 答:1
10.7 答:0
10.8 答:PC3~PC7
10.9 答:1~3
10.10 答:中断允许触发器, PC6,PC4
10.11 答:(1)D (2)A,D (3)D (4)D (5)A (6)A (7)B
10.12 答:MOV DX,303H
MOV AL,10000011B
OUT DX,AL
MOV DX,302H
IN AL,DX
MOV CL,4
SHL AL,CL
OUT DX,AL
10.13 答:(1)根据题目给出的端口地址,在8086最小方式系统下,8255A与K15~K0以及4个发光二极管的连接图如下所示。
(2) 编写程序段实现连续检测并显示开关量中“1”的个数。开关量中“1”的个数以二进制形式显示。
MOV DX,8F07H
MOV AL,10010010B ;端口A、B方式0输入,端口C方式0输出
OUT DX,AL
NEXT:
MOV DX,8F03H ;从端口B读取高8位开关量
IN AL,DX
XCHG AL,AH
MOV DX,8F01H ;从端口A读取低8位开关量
IN AL,DX
MOV BX,AX
XOR AL,AL
MOV CX,16
CLC
L2:
SHL BX,1
JNC L1
INC AL
L1:
LOOP L2
MOV DX,8F05H ;从端口C送出
OUT DX,AL
JMP NEXT ;进行下一次检测
10.14 答:8255A与IBM PC机总线的连接框图如下:
可将8255A的端口A作为要产生的信号的输出端口,设定为方式0输出,端口B和端口C不做使用,均设定为方式0输出。程序段如下:
MOV DX,263H ;设定8255A的工作方式
MOV AL,10000000B
OUT DX,AL
MOV DX,260H ;产生指定信号
XOR AL,AL
OUT DX,AL
REP:
MOV AL,80H
MOV CX,7
REP1:
OUT DX,AL
SAR AL,1
LOOP REP1
MOV CX,8
REP2:
SHL AL,1
OUT DX,AL
LOOP REP2
JMP REP
10.15 答:由于开关量是16为数据,故可以将8255A的PA端口与PB端口设定为方式0,分别读取开关量的低八位和高八位,以PC端口的低三位控制八选一电路的输出依次从X0到X7,使用PC端口的高四位输出最大开关量的序号(该序号为1~8),控制发光二极管的亮灭以指示序号。
连接图如下:(下面电路中,当八选一输出Y有效时,能选通1组16位开关量数据)
程序段如下:
MOV DX,263H
MOV AL,10010010B ;设定工作方式,PA,PB均工作于方式0,PA、PB为
;输入,PC为输出
OUT DX,AL
MOV CX,8
XOR BX,BX
MOV SI,0 ;SI表示输入开关量的序号
ST1:
MOV DX,262H
MOV AL,SI
OUT DX,AL
MOV DX,260H ;将开关量数据的低八位读入AL
IN AL,DX
MOV AH,AL
MOV DX,261H ;将开关量数据的高八位读入AL
IN AL,DX
XCHG AH,AL
CMP BX,AX
JA NEXT
MOV BX,AX ;将当前最大值保存在BX中
MOV DI, SI ;将当前最大值的序号保存到DI中
NEXT:
INC SI
LOOP ST1
MOV AX, DI
MOV CL,4
ROL AL,CL ;将最大值的序号(4位)移至AL的高四位
MOV DX,262H
OUT DX,AL ;PC的高四位输出最大值序号
10.16 答:根据题图,8255A的端口地址为3F0H~3F6H中的4个偶地址端口。
中断向量表设置和8255A初始化程序段如下:
;设置A口的中断向量
PUSH DS
MOV AX,0
MOV DS,AX
MOV SI,4AH
SHL SI,1
SHL SI,1
MOV [SI],OFFSET SERV ;中断服务程序偏移地址存入向量表
ADD SI,2
MOV AX,CS
MOV [SI],AX ;中断服务程序的段地址存入向量表
POP DS
;设置8255A的工作方式
MOV DX,3F6H
MOV AL,10111001B ;A口方式1,输入;B口方式0,输出;C口输入
OUT DX,AL
;设置INTEA=1
MOV AL,00001001B ;PC4置位
OUT DX,AL
10.17 答:根据题图,8255A的端口地址为180H~187H。PC0输出,PC5和PC6输入。A口输出,所以A口方式0,输出;B口方式0,输出;C口高半部输入,C口低半部输出。方式命令字为10001000B。
程序段为:
;设置8255A的工作方式
MOV DX,186H ;控制字口地址送DX
MOV AL,10001000B ;A口方式0,输出;B口方式0,输出;
;C口高半部输入,C口低半部输出
OUT DX,AL
;查询C口PC5、PC6
MOV DX,184H ;C口地址送DX
CHECK:IN AL,DX
TEST AL,01100000B
JNZ CHECK
;输出CHAR变量数据,数据送到8255A的A端口寄存器
MOV AL,CHAR ;输出数据送AL
MOV DX,180H ;A口地址送DX
OUT DX,AL
;向打印机发选通信号,一个低电平的脉冲,先置位PC0,再复位PC0
;然后延时,再置位PC0
MOV DX,186H
MOV AL,00000001B
OUT DX,AL ;置位PC0
MOV AL,00000000B
OUT DX,AL ;复位PC0
CALL DELAY ;延时
MOV AL,00000001B
OUT DX,AL ;置位PC0
HLT
DELAY: MOV CX,0FFFH
DELAY1: NOP
LOOP DELAY1
RET
10.18 答:根据题图,8255A的端口地址为38H~3EH中的偶地址。A口方式0输出,B口方式0输入,C口低半部输入,高半部输出。
程序段为:
;设置8255A的工作方式
MOV DX,03EH ;控制字口地址送DX
MOV AL,10000011B ;A口方式0,输出;B口方式0,输入;
;C口高半部输出,C口低半部输入
OUT DX,AL
MOV CX,100
;启动输入机,通过置位/复位实现一个高电平脉冲
SETSTART:
MOV DX,03EH
MOV AL,00001100B
OUT DX,AL ;复位PC6
MOV AL,00001101B
OUT DX,AL ;置位PC6
CALL DELAY ;延时
MOV AL,00001100B
OUT DX,AL ;复位PC6
;查询C口PC1
MOV DX,03CH ;C口地址送DX
CHECK:IN AL,DX
TEST AL,00000010B
JZ CHECK
;输入数据
MOV DX,03AH ;B口地址送DX
IN AL,DX
MOV CHARS,AL ;将输入字符存入CHARS变量中
;查询C口PC0
MOV DX,03CH ;C口地址送DX
CHECK1:IN AL,DX
TEST AL,00000001B
JZ CHECK1
;输出CHAR变量数据,数据送到8255A的A端口寄存器
MOV AL,CHARS ;输出数据送AL
MOV DX,038H ;A口地址送DX
OUT DX,AL
;向打印机发选通信号,一个低电平的脉冲,先置位PC0,再复位PC0
;然后延时,再置位PC0
MOV DX,03EH
MOV AL,00001110B
OUT DX,AL ;复位PC7
MOV AL,00001111B
OUT DX,AL ;置位PC7
CALL DELAY ;延时
MOV AL,00001110B
OUT DX,AL ;复位PC7
LOOP SETSTART
HLT
DELAY: PUSH CX
MOV CX,0FFFH
DELAY1: NOP
LOOP DELAY1
POP CX
RET
10.19 答:根据题图,8255A的一组端口地址为8000H~8006H,8259A的一组端口地址为8020H和8022H。8255A的B口工作在方式1,输出。中断向量为97H。
程序段为:
;设置B口的中断向量
PUSH DS
MOV AX,0
MOV DS,AX
MOV SI,97H
SHL SI,1
SHL SI,1
MOV [SI],OFFSET INT_SERVICE ;中断服务程序偏移地址存入向量表
ADD SI,2
MOV AX,CS
MOV [SI],AX ;中断服务程序的段地址存入向量表
POP DS
;设置8255A的工作方式
MOV DX,8006H
MOV AL,10000100B ;A口方式0,输出;B口方式1,输出;C口输出
OUT DX,AL
;设置INTEA=1
MOV AL,00000101B ;PC2置位
OUT DX,AL
;8259A初始化程序段
MOV DX,8020H ;8259A的偶地址端口
MOV AL,00011011B ;电平触发、单片、要ICW4
OUT DX,AL ;写ICW1
MOV DX,8022H
MOV AL,90H
OUT DX,AL ;写ICW2
MOV AL,00000011B ;一般全嵌套、非缓冲、自动中断结束
OUT DX,AL
;向8255A的B口输出一个字符
MOV BX,OFFSET DISPCHAR
MOV DX,8002H
MOV AL,[BX]
OUT DX,AL
JMP $
;中断服务程序
INT_SERVICE: STI ;开中断
INC BX
;下面程序段检查200个字符输出完否
MOV SI,OFFSET DISPCHAR
ADD SI,200
CMP BX,SI
JB OUTPUT
MOV DX,8022H ;送9259A的基地址给DX
MOV AL,10000000B
OUT DX,AL ;屏蔽IR7
JMP OVER
OUTPUT:
MOV AL,[BX] ;获取打印数据
MOV DX,802H ;B口地址送DX
OUT DX,AL
OVER: IRET
10.20 答:(1)电路图如下:
(2)8255A的初始化程序
;设置8255A的工作方式
MOV DX,0FF03H
MOV AL,10100000B ;A口方式1,输出;B口方式0,输出;C口输出
OUT DX,AL
;设置INTEA=1
MOV AL,00001101B ;PC6置位
OUT DX,AL
(3)8259A初始化程序
;8259A初始化程序段
MOV DX,0FF0CH ;8259A的偶地址端口
MOV AL,00010011B ;边沿触发、单片、要ICW4
OUT DX,AL ;写ICW1
MOV DX,0FF0DH
MOV AL,80H
OUT DX,AL ;写ICW2
MOV AL,00000011B ;一般全嵌套、非缓冲、自动中断结束
OUT DX,AL
(4);设置B口的中断向量
PUSH DS
MOV AX,0
MOV DS,AX
MOV SI,83H
SHL SI,1
SHL SI,1
MOV [SI],OFFSET PRINT ;中断服务程序偏移地址存入向量表
ADD SI,2
MOV AX,CS
MOV [SI],AX ;中断服务程序的段地址存入向量表
POP DS
中断服务程序
;中断服务程序
INT_SERVICE: STI ;开中断
INC BX
;下面程序段检查200个字符输出完否
MOV SI,OFFSET BUF
ADD SI,100
CMP BX,SI
JB OUTPUT
MOV DX,0FF0DH ;送8259A的奇地址给DX
MOV AL,00001000B
OUT DX,AL ;屏蔽IR3
JMP OVER
OUTPUT:
MOV AL,[BX] ;获取打印数据
MOV DX,0FF00H ;8255A的A口地址送DX
OUT DX,AL
OVER: IRET </p>
展开阅读全文