1、 1第 8 章 定时/计数器 8253习 题8.1 简述微机系统中定时/计数器的必要性和重要性,以及定时实现的常用方法。参考答案:无 论 是 计 算 机 基 本 系 统 还 是 实 时 测 控 系 统 , 常 需 要 系 统 提 供 一 些 定 时 和计 数 的 功 能 , 实 现 定 时 中 断 或 延 时 控 制 等 , 以 满 足 I/O 接 口 或 系 统 内 部 的 需 要 , 如 定 时中 断 、 定 时 采 集 或 者 延 时 一 段 时 间 实 现 某 种 控 制 等 , 有 时 也 需 要 对 外 部 事 件 进 行 计 数 。目 前 , 有 3 种 主 要 方 法 实 现
2、定 时 要 求 : 软 件 定 时 、 不 可 编 程 的 硬 件 定 时 和 可 编 程 的硬 件 定 时 /计 数 方 法 。 软件定时就是通过 CPU 执行一段延时程序(根据预定时间要求设定指令数量及类型)达到定时目的的。延时程序执行完毕后,通常用 OUT 指令输出一个控制信号。不可编程的硬件定时,数字计数器(如 74LS393)计数方式简单。可 编 程 定 时 /计数 器 的 定 时 值 及 计 数 范 围 可 以 由 软 件 来 设 定 和 改 变 , 定 时 精 度 高 且 功 能 较 强 。 可 编 程 定 时 /计 数 器 在 计 算 机 中 应 用 广 泛 。 Intel 8
3、253 就 是 一 种 常 用 的 可 编 程 定 时 /计 数 器 芯 片 。8.2 可编程定时/计数器 8253 有几个通道?各通道有几种工作方式?各种工作方式的主要特点是什么?参考答案:可编程定时/计数器 8253 内部具有三个独立的 16 位定时/ 计数通道,即通道 0、通道 1、通道 2,或称计数器 0、计数器 1、计数器 2。8253 每个计数通道可工作于 6 中不同的工作方式:(1)方式 0计数结束中断方式。在写入控制字后,输出端即变低,计数结束后,输出端由低变高,常用该输出信号作为中断源。 (2)方式 1可编程单稳态输出方式。用来产生单脉冲。 (3)方式 2比率发生器。 (4)
4、方式 3方波发生器。用于产生连续的方波。方式 2 和方式 3 都实现对时钟脉冲进行 n 分频。 (5)方式 4软件出发选通。由软件触发计数,在计数器回 0 后,从 OUT 端输出一个负脉冲,其宽度等于一个时钟周期。 ( 6)方式 5硬件出发选通。由硬件触发计数,在计数器回 0 后,从 OUT 端输出一个负脉冲,其宽度等于一个时钟周期。6 种方式中,方式 0、1 和 4,计数初值装进计数器后,仅一次有效。如果要通道在此按此方式工作,必须重新装入计数值。对于方式 2、3 和 5,在减 1 计数到 0 值后,8253会自动将计数值重装进计数器。8.3 8253 的初始化编程包括哪几项内容?对 825
5、3 定时/计数器 3 个通道进行初始化编程的顺序有无要求?2参考答案:8253 的初始化编程包括写控制字和写计数初值两个内容:(1) 写入通道控制字,规定通道的工作方式; (2) 写入计数值,若规定只写低 8 位,则高 8 位自动置 0,若规定只写高 8 位,则低 8 位自动置 0。若为 16 位计数值则分两次写入,先写低 8 位,后写高 8 位。D0:用于确定计数数制: 0,二进制;1,BCD 码。一般在每个计数器独立使用时,对 8253 定时计数器三个通道进行初始化的顺序没有特定要求,如果几个计数器配合使用,则可能对三个通道初始化顺序会有一定要求。对每个计数器都应该先写入控制字然后再写初值
6、。8.4 8253 芯片每个计数通道与外设接口有哪些信号线?每个信号线的用途是什么?参考答案:8253 芯片每个计数通道与外设接口有 CLK、GATE、OUT 等 3 根信号线。CLK 时钟输入信号:在计数过程中,此引脚上每输入一个时钟信号(下降沿) ,计数器的计数值减 1。 GATE 门控输入信号:控制计数器工作,可分成电平控制和上升沿控制两种类型。 OUT 计数器输出信号:当一次计数过程结束(计数值减为 0) ,OUT 引脚上将产生一个输出信号。8.5 8253 芯片需要几个 I/O 地址,各用于何种目的?参考答案:8253 芯片需要 4 个 I/O 地址,分别用于读写计数器 0、计数器
7、1、计数器2 以及控制字。 8.6 设 8253 计数器的输入时钟频率为 2MHz,为产生 20kHz 的方波输出信号,应向计数器装入的计数初值为多少?参考答案:应向计数器装入的计数初值为 100。8.7 设 8253 的 I/O 端口地址为 300H303H,试对 8253 三个计数器进行编程,使计数器 0 工作于方式 1,计数初值为 8253H;计数器 1 工作于方式 2,计数初值为 7788H;计数器 2 工作于方式 3,计数初值为 1000。参考程序段如下: ;计数器 0 初始化,使计数器 0 工作于方式 1MOV AL,32HMOV DX,303H OUT DX,AL ;计数器 0
8、赋初值 8253HMOV AX,8253HMOV DX,300H OUT DX,AL MOV AL,AH OUT DX,AL;计数器 1 初始化,使计数器 1 工作于方式 2MOV AL,74H 3MOV DX,303H OUT DX,AL ;计数器 1 赋初值 7788HMOV AX,7788HMOV DX,301H OUT DX,AL MOV AL,AH OUT DX,AL;计数器 2 初始化,使计数器 2 工作于方式 3MOV AL,0B6HMOV DX,303H OUT DX,AL ;计数器 2 赋初值 1000MOV AX,1000MOV DX,302H OUT DX,AL MOV
9、AL,AH OUT DX,AL8.8 若要采用一片 8253 周期性地每隔 20ms 产生一次高电平中断请求信号,已知输入时钟频率为 2MHz,8253 地址为 300H303H。试选择 8253 的工作方式和计数初值,编写 8253 的初始化程序。参考答案:(1)计数初值 N 计算已知输入时钟 CLK 频率为 2MHz,则时钟周期为 T=1/f=1/2MHz=0.5s 于是计数初值 N 为N=20ms/T=20ms/0.5s=40000。(2)确定控制字可选计数器 0,按二进制计数,工作于方式 0。由于计数初值 N=40000,控制字D5D4应为 11,于是 8253 的控制字为 00110000b=30H。 (3)选择 8253 各端口地址 按题意,计数器 0 的端口地址为 300H,控制口地址为 303H。 (4)初始化程序如下 MOV AL,30H ;控制字 MOV DX,303H ;控制口地址 OUT DX,AL ;控制字送 8253 控制寄存器 MOV DX,300H ;计数器 0 端口地址 MOV AX,40000 ;将计数初值 N=40000 的写入 AX 4OUT DX,AL ;低 8 位写入计数器 0MOV AL,AH ;将 N 的高 8 位写入 ALOUT DX,AL ;将 N 的高 8 位写入计数器 0