当前位置:首页 > (完整版)微机原理与接口技术(楼顺天第二版)第十章习题解答
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
共分享92篇相关文档