《微机原理与接口技术》(第四版)周何琴课后习题答案

MOV AL,42H MOV AH,25H INT 21H ;8259初始化

MOV AL,13H ;ICW1边沿触发,单片8259,有ICW4

OUT 20H,AL

MOV AL,40H ;ICW2 中断类型号基值为40H OUT 21H,AL

MOV AL,01H ;ICW4 8088系统,普通EOI,;完全嵌套式 OUT 21H,AL MOV AL,0FDH

OUT 21H ,AL ;8255初始化

MOV AL,90H OUT 63H,AL ;8253初始化

;通道0初始化程序

MOV AL,00110101B OUT 43H,AL

MOV AL, 00H OUT 40H, AL MOV AL, 20H

OUT 40H, AL ;通道1初始化程序

MOV AL,01110111B OUT 43H,AL

MOV AL, 00H OUT 41H, AL MOV AL, 10H

OUT 41H, AL ;主程序

STI

ZX: NOP JMP ZX ;中断服务子程序 IRQ2: PUSH AX

STI

IN AL, 60H NOT AL OUT 61H ,AL MOV AL,20H

OUT 20H,AL POP AX IRET

;OCW1,设置IMR,中断屏蔽 ;PA口输入,方式0;PB口输出,方式0

;通道0控制字,读写两字节,方式2,十进制计数

;写人低字节 ;写人高字节

;通道1控制字,读写两字节,方式3,十进制计数

;写人低字节 ;写人高字节 ;从8255的PA口读人开关状态 ;8255的PA口开关状态取反

;8255的PB口控制LED,指示开关状态 ;发中断结束普通EOI命令 45

19. 8255A的口地址为80H~83H,8253的口地址为84H~87H。

(1)若A口接8个开关K7~K0,B口接8个指示灯LED7~LED0,当开关合上时相应的指示灯点亮,断开时灯灭。要求每隔0.5s检测一次开关状态,并随时在发光二极管LED7 ~LED0上显示出来。试画出硬件连结电路图,编写实现这种功能的程序。

(2)若把A口接的开关去掉,要求B口接的8个指示灯轮流熄灭(轮流点亮为跑马灯),每只灯熄灭1s,编写实现这种功能的程序。 解: (1)

硬件电路如下图所示。

其中:

8255A 的4个端的地址分别为:80H、81 H、82H和83 H,对应于8255A的A口、B口、C口和控制字寄存器。

8253 的4个端的地址分别为:84H、85 H、86H和87 H,对应于8253的T0、T1、T2和控制字寄存器。

8259 的2个端的地址分别为:88H、89 H。设8259的中断类型号为40~48 H,IRQ2的中断类型号为42H。

8253需要定时0.5s,通过T0,T1通道级联实现。0.5s/(1/ 2MHz)=1000000,设T0工作于方式2,初值为1000;T1工作于方式3,初值为1000(T1如果工作于方式0,则在中断服务子程序中需要重新写入初值,实现软件触发)。

程序如下: ;设置8259的中断向量

MOV AX,SEG IRQ2

MOV DS,AX

MOV DX, OFFSET IRQ2 MOV AL,42H MOV AH,25H INT 21H ;8259初始化

MOV AL,13H ;ICW1边沿触发,单片8259,有ICW4

OUT 88H,AL

46

MOV AL,40H ;ICW2 中断类型号基值为40H OUT 89H,AL

MOV AL,01H ;ICW4 8088系统,普通EOI,;完全嵌套式 OUT 89H,AL MOV AL,0FDH

OUT 89H ,AL ;OCW1,设置IMR,中断屏蔽 ;8255初始化

MOV AL,90H ;PA口输入,方式0;PB口输出,方式0

OUT 83H,AL ;8253初始化

;通道0初始化程序

MOV AL,00110101B ;通道0控制字,读写两字节,方式2,十进制计数 OUT 87H,AL

MOV AL, 00H

OUT 84H, AL ;写人低字节 MOV AL, 10H

OUT 84H, AL ;写人高字节

;通道1初始化程序

MOV AL,01110110B ;通道1控制字,读写两字节,方式3,十进制计数

OUT 87H,AL

MOV AL, 00H

OUT 85H, AL ;写人低字节 MOV AL, 10H

OUT 85H, AL ;写人高字节 ;主程序

STI

ZX: HLT JMP ZX ;中断服务子程序 IRQ2: PUSH AX

STI

IN AL, 80H ;从A口读人开关状态 NOT AL ;A口开关状态取反

OUT 81H ,AL ;B口控制LED,指示开关状态 MOV AL,20H

OUT 88H,AL ;发中断结束普通EOI命令 POP AX IRET (2)

与(1)类似。但1s/(1/ 2MHz)=2000000,设T0工作于方式2,初值为2000;T1工作于方式3,初值为1000(T1如果工作于方式0,则在中断服务子程序中需要重新写入初值,实现软件触发)。

程序如下: ;设置8259的中断向量

XOR AX,SEG IRQ2

MOV DS,AX

MOV DX, OFFSET IRQ2 MOV AL,42H

47

MOV AH,25H INT 21H ;8259初始化

MOV AL,13H ;ICW1边沿触发,单片8259,有ICW4

OUT 88H,AL

MOV AL,40H ;ICW2 中断类型号基值为08H OUT 89H,AL

MOV AL,01H ;ICW4 8088系统,普通EOI,;完全嵌套式 OUT 89H,AL MOV AL,0FDH

OUT 89H ,AL ;OCW1,设置IMR,中断屏蔽 ;8255初始化

MOV AL,90H ;PA口输入,方式0;PB口输出,方式0

OUT 83H,AL ;8253初始化

;通道0初始化程序

MOV AL,00110101B ;通道0控制字,读写两字节,方式2,十进制计数 OUT 87H,AL

MOV AL, 00H

OUT 84H, AL ;写人低字节 MOV AL, 20H

OUT 84H, AL ;写人高字节

;通道1初始化程序

MOV AL,01010110B ;通道1控制字,读写两字节,方式3,十进制计数

OUT 87H,AL

MOV AL, 00H

OUT 85H, AL ;写人低字节 MOV AL, 10H

OUT 85H, AL ;写人高字节 ;主程序

MOV AL, 0FEH ;熄灭一个灯,点亮一个灯为:01H OUT 81H, AL ;写人高字节 STI

ZX: HLT JMP ZX ;中断服务子程序 IRQ2: STI

ROL AL,1 ;熄灭灯左移,轮流熄灭

OUT 81H,AL

PUSH AX ; MOV AL,20H

OUT 88H,AL ;发中断结束普通EOI命令 POP AX IRET

48

联系客服:779662525#qq.com(#替换为@)