微机原理与接口技术周何琴课后习题答案 - 图文 下载本文

OUT 86H,AL ;设置8255的工作方式 MOV AL,00001001B OUT 86H,AL MOV AL,00001010B OUT 86H,AL MOV AL,00001100B OUT 86H,AL MOV AL,00001101B OUT 86H,AL MOV AL,00001100B OUT 86H,AL HLT

15. 8255A的口地址为80H~83H。PA口接8个开关K7~K0,PB口接8个指示灯LED7~LED0,用来显示开关的状态。当开关合上时相应的指示灯点亮,断开时灯灭。试画出硬件连结电路图(含具体的译码电路),编写实现这种功能的程序段。

要求每隔20s检测一次开关状态,并随时在发光二极管LED7 ~LED0上显示出来。设CPU主频为5MHz,20秒子程序名为DELAY_20S) 解:

硬件电路如下图所示。

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

主频率为5MHz

时钟周期=主频率的倒数=1/(5×10-6)=0.2μs

延时20s需要的时钟周期数= 20s/ 0.2μs=100000000=N1×N2 假设N1=10000=2710H

[((10000-1)×17+5)+4+3+3+16] ×N2+2 ×10+2 ×8+20=100000000 N2=588=24CH 程序如下:

MOV AL, 10010000B ;控制字 OUT 83H, AL ;写人控制字

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

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

CALL DELAY_20S

JMP TEST_ IT ;循环检测 DELAY_20S: PUSH BX

PUSH CX

MOV BX,24CH;延时20s,改变BX和CX中的值,即可改变延时时间。 DEL1:MOVCX,2710H; DEL2:LOOP DEL2 NOP DEC BX JNZ DEL1 POP CX POP BX RET

延时子程序的时钟周期数:((10000-1)×17+5)+4+3+3+16] ×588+2 ×10+2 ×8+20=99968288 延时子程序的延时时间:99968288×(1/(5 ×106))=19.9936576s 不加NOP指令的计算:

延时子程序的时钟周期数:((10000-1)×17+5)+4+3+16] ×588+2 ×10+2 ×8+20=99966524 延时子程序的延时时间:99968288×(1/(5 ×106))=19.9933048s P282

21. 某微机系统用8253做定时器,其口地址为40H~43H;8255A的PA口接8个开关K7~K0,PB口接8个指示灯LED7~LED0,其口地址为60H~63H;用8259A做中断控制器,其口地址为20H~21H;每隔1秒钟中断一次,读开关状态,并将开关状态显示在LED指示灯上。当开关合上时相应的指示灯点亮,断开时灯灭。要求: (1)画出硬件连结电路图

(2)编写程序。(设8253的CLK上接2MHz的时钟信号) 解:

8253口地址为40H~43H,8255A口地址为60H~63H, 8259A口地址为20H~21H;从地址连续可以看出:CPU是8088。

A7A6A5 A4 A3A2A1A0十六进制地址

8259: 0010 0000 20H 0010 000121H

8253: 0100 0000 40H

0100 000141H

0100 0010 42H 0100 001143H

8255: 0110 0010 60H

0110 001161H

0110 0010 62H 0110 001163H

采用74LS138译码器,根据:

除用于接口芯片的内部端口的寻址的CPU低位地址线外,CPU的高位地址线中,所有芯片电平相同的地址通过逻辑电路(与、或门)连接到译码器的控制端上,所有芯片电平不同的地址作为译码器的译码输入线,译码器输出连接接口芯片的片选。

则:A7A6A5用于译码, A4A3A2=000(A4A3经与或门后接74LS138译码器的G2A、A2接74LS138

译码器的G2B),74LS138译码器的G接电源。8259A片选接译码器的,8253片选接译码器的,8255A片选接译码器的Y3。

系统硬件电路如下:

设8259芯片中断类型码为40~47H。8253的OUT1接到8259的IR2上,用于产生中断。

8253的定时时间为1s,设8253的CLK上接2MHz时钟信号,则计数初值N=1/[1/(2×106)]=2×106,超过了8253一个通道的最大计数值216=65536,采用用2个8253通道(通道0和通道1)级连方式实现。N=N0×N1=2000×1000。所以:通道0的初值N0 =2000,通道1的初值N1 =1000。通道0工作在方式2,通道1工作在方式3。

程序如下: ;设置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 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 ;OCW1,设置IMR,中断屏蔽 ;8255初始化

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

OUT 63H,AL ;8253初始化

;通道0初始化程序

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

OUT 43H,AL

MOV AL, 00H

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

OUT 40H, AL ;写人高字节

;通道1初始化程序

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

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 ;从8255的PA口读人开关状态 NOT AL ;8255的PA口开关状态取反

OUT 61H ,AL ;8255的PB口控制LED,指示开关状态 MOV AL,20H

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

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)

硬件电路如下图所示。