MOV DS,AX LEA SI,BUF MOV CX,100
INPUT: MOV DX,0FFE2H IN AL,DX ;读状态端口
TEST AL,01H ;测输入状态D0位 JZ INPUT ;未“准备好”转INPUT MOV DX,0FFE0H ;读取输入字符 IN AL,DX
MOV [SI],AL ;输入字符存缓冲区 INC SI 30
LOOP INPUT
MOV AH,4CH ;返回DOS INT 21H CODE ENDS END START 7. LED0 IOW LED1 LED7 OE G Q0
74LS373 D0~D7 Q1 Q7
. .
...
Y ≥1 D0~D7
CODE SEGMENT ASSUME CS:CODE MAIN PROC FAR START: PUSH DS MOV AX,0
31
PUSH AX
MOV DX,200H ;设I/O 端口为200H AGAIN: MOV AH,1 ;读键盘缓冲区字符 INT 16H
CMP AL,1BH ;若为“Esc”键,则退出 JZ EXIT
MOV AL,0FFH ;灯全亮 OUT DX,AL ;输出控制LED
MOV BX,5 ;向子程序传递参数,实现50ms 软延时 CALL DELAY ;子程序DELAY 实现10ms 延时 NOT AL ;灯全灭
MOV BX,2 ;向子程序传递参数,实现20ms 软延时 CALL DELAY JMP AGAIN EXIT: RET MAIN ENDP
DELAY PROC NEAR PUSH CX
WAIT0: MOV CX,2801 WAIT1: LOOP WAIT1 DEC BX JNZ WAIT0 POP CX 31 RET
DELAY ENDP CODE ENDS END START 8.
CODE SEGMENT ASSUME CS:CODE MAIN PROC FAR START: PUSH DS MOV AX,0 PUSH AX
MOV DX,200H ;设I/O端口为200H MOV CL,01H ;设置输出初值
AGAIN: MOV AH,1 ;读键盘缓冲区字符 INT 16H
CMP AL,1BH ;若为“Esc”键,则退出 JZ EXIT MOV AL,CL
OUT DX,AL ;输出控制LED
MOV BX,50 ;向子程序传递参数,实现0.5s软延时
32
CALL DELAY ;子程序DELAY实现10ms延时 ROL CL,1 ;循环左移1位 JMP AGAIN EXIT: RET MAIN ENDP
DELAY PROC NEAR PUSH CX
WAIT0: MOV CX,2801 WAIT1: LOOP WAIT1 DEC BX JNZ WAIT0 POP CX RET
DELAY ENDP CODE ENDS END START 32
第9章 习题答案
1.答:
可编程芯片具有灵活的多种工作方式,其工作方式的设置通过软件编程实现。 2.答:
8255A的内部结构如图9-1所示,它由数据总线缓冲器,数据端口A、端口B和端口C, A组和B组控制电路和读/写控制逻辑4部分组成。
3.8255A有几种工作方式?简述各种工作方式的特点。(2分) 答:
8255A有方式0、方式1、方式2三种工作方式。8255A方式0是基本输入/输出方式。在方式0下,每一个端口都可作为基本的输入或输出口,端口C的高4位和低4位以及端口A、端口B都可独立地设置为输入口或输出口。方式1是单向选通输入/输出方式。8255A在工作方式1时,把3个数据端口分为A、B两组,分别称为A组控制和B组控制。此时,端口A和端口B仍作为数据的输入或输出口,而端口C作为联络控制信号,被分成两部分,一部分作为端口A和端口B的联络信号,另一部分仍可作为基本的输入/输出口。8255A方式2是双向选通输入/输出方式,只有端口A可以工作于方式2。8255A端口A工作于方式2时,可使8255A与外设进行双向通信,可采用查询方式或中断方式进行传输。 4.答:通过JMP AGAIN指令实现循环检测。 5.答:
软件定时和硬件定时。软件定时是通过执行一段循环程序来实现的。通过调整循环次数可以控制定时间隔的长短。其特点是:不需要专用硬件电路、成本低,但是耗费CPU的时间,降低了CPU的工作效率。硬件定时是采用定时/计数器或单稳延时电路实现的。其特点是:定时时间长、使用灵活而且不占用CPU的时间,适用范围广。 6.答:
由于8253的读/写操作对系统时钟没有特殊的要求,因此它几乎可以应用于任何一种微处理
33
器系统中,可作为可编程的方波频率发生器、分频器、实时时钟、事件计数器或单脉冲发生器等。每片8253定时/计数器有3个独立的16位计数通道,每个计数通道最高计数速率可达2.6MHz。每个计数器可编程设定6种工作方式,使用时可以根据需要选择其中的一种工作方式。每个计数通道可按二进制或十进制来计数。
7.8253有几种工作方式?简述各种工作方式的特点。(2分) 答:
8253的每个计数器都有6种工作方式:方式0~方式5。采用方式0工作方式,8253可完成计数功能,且计数器只计一遍。方式1是硬件触发单稳态方式,采用这种工作方式可在输出端OUT输出单个负脉冲信号,脉冲的宽度可通过编程来设定。采用方式2可产生连续的负脉冲信号,可用作频率发生器。采用方式3可产生连续的方波信号, 可用作方波发生器。方式4是软件触发的选通方式。采用方式4可产生单个负脉冲信号,负脉冲宽度为一个时钟周期,由OUT指令触发。方式5是硬软件触发的选通方式。采用方式5可产生单个负脉冲信号,负脉冲宽度为一个时钟周期。由GATE的上升沿触发。
8.8253初始化编程时需要遵循的原则是什么?(2分) 答:
因此8253在初始化编程时,必须遵守两条原则:
① 在对某个计数器设置初值之前,必须先写入控制字;
② 在设置计数初始值时,要符合控制字的规定,即只写低位字节,还是只写高位字节,还是高、低位字节都写(分两次写,先低字节后高字节)。
9.答:
8253初始化编程步骤是:先写控制字到8253的控制端口,再写计数器初值到相应的计数器端口。
10.试按如下要求分别编写初始化程序,已知8253计数器0—2和控制端口地址依次为200H~203H。
1)使计数器1工作在方式0,仅用8位二进制数计数,计数初值为120. 2)使计数器0工作在方式1,按BCD码计数,计数值为2011。
3)使计数器2工作在方式2,按二进制数计数,计数值为F050H。(4分) 答:
(1)MOV DX,203H MOV AL,50H OUT DX,AL MOV DX,201H MOV AL,120 OUT DX,AL
(2)MOV DX,203H
MOV AL,33H ;00110011B OUT DX,AL MOV DX,200H MOV AX,2011H OUT DX,AL MOV AL,AH OUT DX,AL
(3)MOV DX,203H
34
MOV AL,B4H ;10110100B OUT DX,AL MOV DX,202H MOV AX,0F050H OUT DX,AL MOV AL,AH OUT DX,AL 11.答:
8253初始化程序段:
MOV AL,36H ;方式控制字00110110B=36H
OUT 43H,AL ;将控制字送入8253A控制端口43H,即控制寄存器中MOV AX,11932 ;初值送AX寄存器
OUT 40H,AL ;将初值的低8位输出计数通道0端口40H MOV AL,AH ;初值的高8位送AL寄存器
OUT 40H,AL ;将初值的高8位输出计数通道0端口40H 中断服务程序在第十章学完后再做,参考程序如下: 在主程序中数据段定文变量N: N DB 100 M DB 01H
中断服务程序: INT_SER PROC PUSH AX PUSH DX 34 DEC N JNZ RENT MOV N,100 MOV DX,350H XOR M,01H MOV AL,M OUT DX,AL POP DX POP AX RENT: IRET INT_SER ENDP
12.答:参考程序段:
MOV AL,31H ;方式控制字00110001B=31H MOV DX,403H OUT DX,AL MOV DX,400H MOV AX,1000H OUT DX,AL MOV AL,AH OUT DX,AL
35