微型计算机原理与接口技术
文章目录
可编程定时器/计数器
可编程定时/计数器接口芯片8253 (和8254差不多)
Intel 8253 (或 8254)是一个可编程定时/计数器(PIT-Programmable Interval Timer)芯片,用于解决计算机中通常碰到的时间控制问题,即在软件的控制下产生精确的时间延迟。该芯片提供了3个独立的16位计数器通道。每个通道可工作在不同的工作方式下,并且这些工作方式均可以使用软件来设置。
8254 是Intel 公司生产的可编程间隔定时器。 是8253 的改进型, 比8253 具有更优良的性能。
8254是8253的更新产品,主要功能基本一样,只是8254芯片増加了回读命令。
8254 具有以下基本功能:
- 有3 个独立的16 位计数器。
- 每个计数器可按二进制或十进制(BCD) 计数。
- 每个计数器可编程工作于6 种不同工作方式。
- 8254 每个计数器允许的最高计数频率为10MHz(8253 为2MHz) 。
- 8254 有读回命令(8253 没有) , 除了可以读出当前计数单元的内容外, 还可以读出状态寄存器的内容。
- 计数脉冲可以是有规律的时钟信号, 也可以是随机信号。
功能
定时或计数实现方法
-
微机经常要用来对外部事件进行定时控制或对外部事件发生的次数进行记录,即所谓的定时或计数控制。
-
一般来说,实现定时或计数通常可采用三种方法:
- 方法1—由专门设计的硬件电路(数字电路)来实现
- 优点:定时或计数与CPU并行地进行。
- 缺点:通用性和灵活性差(因为若要改变定时/计数要求就必须改变电路参数)。
- 方法2—用软件即通过编制一段程序来实现
- 该软件控制方法是利用执行一条指令所需的时钟状态的个数来统计执行一段程序所花费的状态数,再乘以一个时钟周期的时间便得到定时的时间。
- 该方法一般用在延时时间不长切使用次数不多的场合。
- 优点:通用性和灵活性较好地进行。
- 缺点:定时或计数占用CPU的工作时间。
- 方法3—用可编程定时/计数器的输出来实现
- 按要求对了编程定时/计数器设置参数。该方法具有以上两种方法的优点。
- 方法1—由专门设计的硬件电路(数字电路)来实现
-
可编程定时/计数器的基本功能(两方面)
- 作为计数器,在设置好计数初值后,便开始减1计数,减到“0”时,输出一个信号;
- 作为定时器,在设置好定时常数后,便开始减1计数,并按定时常数不断地输出为时钟周期整数倍的定时间隔。
- 计数器与定时器的差别在于:计数器计数到零时便输出一个信号并结束,而定时器则不断的产生信号。
- 计数器与定时器的共同点在于:他们的工作过程没有根本区别,都是基于计数器的“1”操作
-
计数器与定时器的主要用途:
- 在多任务的分时系统中用作中断信号。实现程序的切换。
- 为I/O设备提供一个精确的定时信号。
- 作为一个可编程的波特率发生器。
- 实现时间延迟等。
基本原理
- 在定时/计数器的基本原理图中,有四个寄存器和一个计数执行单元CE。
- 四个寄存器都可被访问, 他们分别是:
- 二个输出端口——初值寄存器CR和控制寄存器
- 二个输入端口——计数输出寄存器/锁存器OL和状态寄存器
- 其中:
- CE不与CPU有直接联系
- CE总是从初值寄存器CR中获得计数初值
- 只有把CE的内容传到计数输出寄存器OL中, CPU才能读出某个时候的计数值
- 计 数 初 值 = f c l k ÷ f o u t 计数初值 = f_{clk} \div f_{out} 计数初值=fclk÷fout
8253的内部结构
-
8253有三个相互独立的结构完全相同的计数电路,分别称做计数器0、计数器1、计数器2。每个计数电路/通道包含:
- 一个8位的控制寄存器(存放计数器的工作模式控制字);
- 一个16位的初值寄存器(CR,8253工作前要对它设置初值);
- 一个16位的计数执行单元(CE,接收CR送来的内容,并对该内容执行减1操作);
- 一个16位的输出锁存器(OL,锁存CE的内容,使CPU能从中读出一个稳定的计数值);
-
CPU可以通过输入/输出指令对8253的内部寄存器进行访问。
- 每个计数器通过3个引腿和外部联系;
- 一个时钟输入端CLK(计数输出脉冲端)
- 一个门控信号输入端GATE
- 一个输出端OUT(输出信号端)
- 每个计数器通过3个引腿和外部联系;
8253的管脚分配
-
与CPU相连接的读写逻辑电路信号有:
- WR—写信号。有效时,表示CPU正对8253的某个计数器写入计数初值或对控制寄存器写入控制字。
- RD—读信号。有效时,表示CPU正对8253的某个计数器进行读操作。
- CS—片选信号。只有在它保持为低电平时,WR,RD才会被确认,否则将被忽略。
- A 1 、 A 0 A_1、A_0 A1、A0—片内寄存器地址信号。用来对3个计数器和控制寄存器进行寻址。当 A 1 A 0 A_1A_0 A1A0=11时,通过读/写控制逻辑电路选中控制寄存器,写入控制字。
- 当 A 1 A 0 A_1A_0 A1A0=11时,第一次写入的一定作为控制字,此后写入的作为命令。
注意: WR和RD是针对CPU来说, 由CPU进行读写
-
三个计数器都有的外部输入/输出信号:
- CLK—计数器的时钟输入信号。用于输入定时基准脉冲或计数脉冲信号。在计数过程中,此引腿上每输入一个时钟信号,计数值减1,所以说,计数器是记录脉冲个数的计数器,而且计数器受到门控信号的控制。
- GATE—计数器的门控输入信号。由外部通过该引腿控制启动或禁止计数器的操作。
- OUT—时间到或计数结束输出信号。当计数器计数到0时,在该引腿必定有输出。在不同的模式下,可输出不同电平的信号。
- D0~D8—与CPU相连接的双向数据线。可传输向计数器写入的计数初值,向控制寄存器写入的控制字,或从计数器中读取的计数值等数据。
8253的编程
8253的命令字和状态字
- 方式选择命令字(方式控制字)
作用 : 选择一个计数器, 确定工作方式, 并规定初值的写入顺序和计数初值(一串0,1代码)的数制。
(1)计数器选择
D7 D6=00 选择 0 # 0^{\#} 0#计数器
=01 选择 1 # 1^\# 1#计数器
=10 选择 2 # 2^\# 2#计数器
=11 标志该命令字是 “读出命令”, 即读出控制字标志
(2)读/写方式选择
D5 D4=00 标志该命令为 “锁存命令”,即表示锁存计数器的当前计数值, 以便读出检查。
=01 初值写入时, 只写低8位, 高8位自动补0。计数值读出时, 只能读低8位
=10 初值写入时, 只写高8位, 低8位自动补0。计数值读出时, 只能读高8位。
=11 初值写入 / 计数值读出的顺序为先低8位,后高8位。
(3)工作方式选择
D3 | D2 | D1 | 选中的计数器工作方式 |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 |
× | 1 | 0 | 2 |
× | 1 | 1 | 3 |
1 | 0 | 0 |