·定时与计数技术及应用
定时 /计数器 —— 8253
本章内容
了解定时 /计数技术的应用情况
掌握 8253的连接与编程学习目的
熟习 8253的工作方式
10.1 定时与计数定时计数技术在计算机中具有极为重要的作用。微机控制系统中,常要按一定的采样周期对处理对象进行采样或定时检测某些参数等,
用计数器对外部事件计数,即记录外设提供的脉冲个数。在实时操作系统和多任务操作系统中,可以利用定时器产生的定时中断进行进程调度。
定时器和计数器都由数字电路中的计数电路构成。
前者记录高精度晶振脉冲信号,因此可以输出准确的时间间隔,称为 定时器,而当记录外设提供的具有一定随机性的脉冲信号时,它主要反映脉冲的个数,称为 计数器 。
定时的方法有 3种:软件定时、不可编程的硬件定时和可编程的定时。
1,软件定时根据 CPU执行每条指令需要一定的时间,
重复执行一些指令就会占用一段固定的时间,
通过适当地选取指令和循环次数便很容易实现定时功能,这种方法不需要增加硬件,可通过编程来控制和改变定时时间,灵活方便,节省费用。缺点是 CPU重复执行的这段程序的本身并没有什么具体目的,仅为延时,从而降低了
CPU利用率。
2.不可编程的硬件定时这种方法采用数字电路中的分频器将系统时钟进行适当的分频产生需要的定时信号;也可以采用单稳电路或简易定时电路(如常用的 555定时器)由外接 RC电路控制定时时间。但是,这种定时电路在硬件接好后,定时范围不易由程序来改变和控制,使用不甚方便,而且定时精度也不高。
3.可编程的定时在微机系统中,常采用软件、硬件相结合的方法,用可编程定时计数器芯片构成一个方便灵活的定时计数电路。这种电路不仅定时值和定时范围可用程序确定和改变,而且具有多种工作方式,可以输出多种控制信号,它由微处理器的时钟信号提供时间基准,故计时也精确稳定。如
Intel 8253。
10.2 Intel 8253可编程定时器 /计数器一,8253的基本功能和内部结构
( 1) 3个独立的 16位计数器,最大计数范围为 0~65535;
( 2)每个计数器均可以按二进制或二 — 十进制计数;
( 3)计数器速率可达 2MHz;
( 4) 可编程 6种不同的工作方式;
( 5)所有输入和输出都与 TTL兼容。
8253具有较好的通用性和使用灵活性,几乎适合于任何一种微处理器组成的系统。
1,8253 PIT的基本功能
2,8253的内部结构
8253的内部结构如图 10.1所示,由数据总线缓冲器、
控制寄存器、读 /写控制逻辑和计数器等部分组成。
图 10.1 8253的内部结构示意图
( 1)数据总线缓冲器该缓冲器为 8位双向三态的缓冲器,可直接挂在数据总线上。 CPU通过 8位数据总线 D0~D7传送如下信息:
①向控制寄存器写入控制字。
②向某计数器写入计数初值。
③ CPU通过缓冲器读取计数器的当前计数值
( 2)读 /写控制逻辑决定三个计数器和控制字寄存器中哪一个能进行工作,并控制内部总线上数据传送的方向。
① CS片选信号,低电平有效 (此时 CPU才能对 8253进行读写操作 ),
由地址总线经 I/O端口译码电路产生。
② RD读信号,低电平有效,此时表示 CPU正在读取所选定的计数器通道中的内容。
③ WR写信号,低电平有效,此时表示 CPU正在将计数初值写入所选中的计数通道中或将控制字写入控制寄存器中。
④ A1A0端口选择信号,8253内部有 3个计数器通道和一个控制寄存器端口。当 A1A0=00,01,10时表示分别选中计数器通道 0,1,2,
当 A1A0=11时选中控制寄存器端口。
( 3)控制寄存器接收从 CPU来的控制字,并由控制字的 D7,D6位的编码决定该控制字写入哪个计数器的控制寄存器,控制寄存器只能写入,不能读出。
( 4)计数器当 8253用作计数器时,加在 CLK引脚上脉冲的间隔可以是不相等的;当它用作定时器时,则在 CLK引脚应输入精确的时钟脉冲,8253所能实现的定时时间,取决于计数脉冲的频率和计数器的初值,即:定时时间 =时钟脉 冲 周期 Tc× 预置的计数初值 n。
对 8253来讲,外部输入到 CLK引脚上的时钟脉冲频率不能大于 2MHZ,否则需分频后才能送到 CLK端。
图 10.2 计数器内部逻辑图控制单元初值寄存器减 1计数器输出锁存器内 部 总 线
CLK
GATE
OUT
控制单元初值寄存器减 计数器输出锁存器内 部 总 线二,8253的引脚信号图 10.3 8253PIT管脚图
8
7
6
5
4
3
2
1
22
23
20
19
21
9
11
10
15
14
13
18
16
17
CL K
0
G A T E
0
OUT
0
CL K
1
G A T E
1
OUT
1
CL K
2
G A T E
2
OUT
2
D
0
D
1
D
2
D
3
D
4
D
5
D
6
D
7
A
1
A
0
V
CC
GND
WR
RD
CS
图 8 - 3   8253 的引脚信号
24
12
图   的引脚信号计数器
0
计数器
1
计数器
2
数据线控制线电源线
8253是一片具有 3
个独立通道的 16位计数器 /定时器芯片,
使用单一
+5V电源,
24引脚双列直插式封装,如图 10.3所示
1,与 CPU的接口信号
( 1) D0~D7—— 三态双向数据线。与 CPU数据总线相连,
用于传递 CPU与 8253之间的数据信息、控制信息和状态信息 ;
( 2) CS—— 片选信号( Chip Select),输入,低电平有效 ;
( 3) WR—— 写信号,输入,低电平有效,用于控制 CPU对
8253的写操作,可与 A1,A0信号配合以决定是写入控制字还是计数初值 ;
( 4) RD—— 读信号,输入,低电平有效。用于控制 CPU
对 8253的读操作,可与 A1,A0信号配合读取某个计数器的当前计数值 ;
( 5) A0,A1 —— 地址输入线。用于 8253内部寻址的 4个端口,即 3个计数器和一个控制字寄存器。一般与 CPU低位的地址线相连 。
A1 A0 寄存器选择和操作
0
0
0
0
0
0
0
0
1
0
1
1
1
1
0
0
0
0
×
1
0
0
0
0
1
1
1
1
×
1
0
0
1
1
0
0
1
1
×
×
0
1
0
1
0
1
0
1
×
×
写入计数器 0
写入计数器 1
写入计数器 2
写入控制字寄存器读计数器 0
读计数器 1
读计数器 2
无操作禁止使用无操作
CS RD WR
表 10.1 8253读 /写操作逻辑表
2,与 外部设备 的接口信号
( 1) CLK0( CLK1,CLK2) —— 时钟脉冲输入端,用于输入定时脉冲或计数脉冲信号。 CLK可以是系统时钟脉冲,也可以是由其他脉冲源提供。 8253规定加在 CLK引脚的输入时钟周期不得小于 380ns;
( 2) GATE0( GATE1,GATE2) —— 门控输入端,用于外部控制计数器的启动或停止计数的操作。当 GATE为高电平时,允许计数器工作,当 GATE为低电平时,禁止计数器工作;
( 3) OUT0( OUT1,OUT2 ) —— 计数输出端 。 在不同工作方式中,当计数器计数到 0时,OUT引脚上必输出相应的信号 。
三,8253的工作方式
8253是一种面向微机系统的专用接口芯片,它的每一个计数器都可以按照控制字的规定有 6种不同的工作方式,每种工作方式中都有以下三种情况:
* 正常计数的波形图;
* 正在计数过程中改变门控信号 GATE后对整个计数工作的影响;
* 正在计数的过程中改变计数值对整个计数工作的影响 。
1,方式 0—— 计数结束中断方式
(Interrupt on Terminal Count)
方式 0的工作时序如图
10.4(a)(b)(c)所示。
C W = 1 0 LSB = 4
WR
C L K
G A T E
OUT
4 3 2 1 0 FF
a,方式 0 正常计数图 10.4(a) 方式 0 正常计数
CW = 10 LSB = 3
WR
CLK
GATE
OUT
3 2 2 2 1 0 FF
图 10.4(b) 方式 0时 GATE 信号的作用
C W = 1 0 L S B = 3
WR
C L K
G A TE
OUT
3 2 1 2 1 FF0
C,方式 0 计数过程中改变计数值
L S B = 2
方式 计数过程中改变计数值图 10.4(c) 方式 0时计数过程中改变计数值注意
8253写计数值是由 CPU的 WR信号控制的,在 WR信号的上升沿,计数值被送入对应计数器的计数值寄存器,在 WR信号上升沿之后的下一个 CLK脉冲才开始计数。如果设置计数初值 N,输出 OUT是在写入命令执行后,第 N+1个 CLK脉冲之后,
才变为高电平的。后面的方式 1,2,4,5
也有同样的特点。
2,方式 1 —— 可编程的单稳态触发器
(Programmable One Short)
方式 1的工作波形如图 10.5(a)、
(b),(c)所示。
图 10.5(a) 方式 1 正常计数
LSB = 3
WR
CLK
GATE
OUT
3 2 1 0 FF 3 2
CW = 12
图 10.5(b) 方式 1时 GATE 信号的作用
LSB = 3
WR
CLK
3 2 1 3 2 1
CW = 12
0
GATE
OUT
图 10.5(c) 方式 1时计数过程中改变计数值
LSB = 2
WR
CLK
GATE
OUT
42 1 0 FF 3FE
CW = 12 LSB=4
3,方式 2 —— 比率发生器、分频器
(Rate Generator)
方式 2用门控信号达到同步计数的目的,
波形图如图 10.6(a),(b),(c),(d)所示 。
图 10.6(a) 方式 2 正常计数
C W = 1 4 L S B = 3
WR
C L K
G A T E
OUT
3 2 1 3 2 1 3
a,方式 2 正常计数方式 正常计数
1
C W = 1 4 L S B = 3
WR
C L K
G A T E
OUT
3 2 2 3 2 3
b,方式 2 GATE 信号的作用方式 信号的作用图 10.6(b) 方式 2时 GATE信号的作用
4
CW = 14 LSB =5
WR
CLK
GATE
OUT
3 2 14 5 3
LSB = 4
图 10.6(c) 方式 2时计数过程中改变计数值
4,方式 3 —— 方波发生器
(Square Wave Generator)
方式 3的工作过程同方式 2,只是输出的脉宽不同,波形如图 10.7(a),(b),(c),(d)所示 。
图 10.7(a) 方式 3 计数值为偶数时的波形
32 1 4 3
C W = 1 6 LS B = 4
WR
C L K
G A T E
OUT
42 14 3
a,方式 3 计数值为偶数时的波形图 10.7(b) 方式 3 计数值为奇数时的波形
3 2 1 5
C W = 1 6 L S B = 5
WR
C L K
G A T E
OUT
2 14 35 4
b,方式 3 计数值为奇数时的波形方式 计数值为奇数时的波形图 10.7(c) 方式 3 GATE信号的作用
2 1 4 4
C W = 1 6 L S B = 4
WR
C L K
G A T E
OUT
2 14 34 3
c,  方式 3 G A T E 信号的作用  方式 信号的作用
5 4 3 2 1 4 3
C W = 1 6 L S B = 5
WR
C L K
G A TE
OUT
L S B = 4
d,方式 3 计数过程中改变计数值方式 计数过程中改变计数值图 10.7(d) 方式 3 计数过程中改变计数值
5,方式 4 —— 软件触发选通方式
(Software Triggered Strobe)
用方式 4工作时,GATE门控信号只是用来允许或不允许定时操作的,定时的执行过程由装入的初值决定,
波形图如图 10.8(a),(b),(c)所示 。
图 10.8(a) 方式 4 正常计数
C W = 1 8 L S B = 3
WR
C L K
GA T E
OUT
3 2 1 0 FF
a,方式 4 正常计数方式 正常计数图 10.8(b) 方式 4 GATE 信号的作用
C W = 1 8 L SB = 3
WR
CL K
G A T E
OUT
3 3 3 2 1 0 FF
b,方式 4 GTAE 信号的作用图 10.8(c) 方式 4 计数过程中改变计数值
C W = 1 8 L S B = 3
WR
C L K
G A TE
OUT
3 2 1 2 1 0 FF
c,方式 4 计数过程中改变计数值
L S B = 2
方式 计数过程中改变计数值
6,方式 5 —— 硬件触发选通方式
(Hardware Triggered Strobe)
方式 5为硬件触发选通方式,完全由 GATE
端引入的触发信号控制定时和计数,波形图如图 10.9(a),(b),(c)所示 。
图 10.9(a) 方式 5 正常计数
OUT
LSB = 3
WR
CLK
GATE
CW = 1A
3 2 1 0 FF 3
图 10.9(b) 方式 5时 GATE 信号的作用
OUT
b,方式 5 时 GATE 信号的作用
L SB = 3
WR
CLK
G A T E
C W = 1 A
3 2 3 2 1 0 FF
时图 10.9(c) 方式 5时计数过程中改变计数值
c,方式 5 时计数过程中改变计数值
3 2 1 0 F F F F 4 3
C W = 1 A L S B = 3
WR
C L K
G A T E
OUT
L S B = 4
方式 时计数过程中改变计数值四,8253的控制字与初始化编程
1,8253的控制字
8253的控制字有 4个主要功能:
* 选择计数器;
* 确定计数器数据的读写格式;
* 确定计数器的工作方式;
* 确定计数器计数的数制。
控制字的格式如图 10.10所示
D7 D6 D5 D4 D3 D2 D1
D0计数器 读 /写格式 工作方式 数制
0 — 二进制
1 — 二 ― 十进制( BCD)
000 方式 0
001 方式 1
10 方式 2
11 方式 3
100 方式 4
101 方式 5
00 计数器锁存命令
10 只读 /写高 8位
01 只读 /写低 8位
11 首先写低 8位然后写高 8位
00 选择计数器 0
01 选择计数器 1
10 选择计数器 2
11 非法选择图 10.10 8253控制字格式注:图中×可以是 0,也可以是 1,一般取 0
2,8253的初始化编程刚接通电源时,8253芯片通道都处于未定义状态,在使用之前,必须用程序把它们初始化为所需的特定模式,这个过程称为初始化编程 。
(1) 写入控制字用输出指令向控制字寄存器写入一个控制字,以选定计数器通道,规定该计数器的工作方式和计数格式。
(2) 写入计数初值用输出指令向选中的计数器端口地址中写入一个计数初值,初值设置时要符合控制字中有关格式的规定。若是 8位数,只要用一条输出指令就可完成初值的设置。如果是
16位数,则必须用两条输出指令来完成,而且规定先送低 8位数据,后送高 8位数据。注意,计数初值为 0时,也要分成两次写入,
因为在二进制计数时它表示 65536,在 BCD
计数时它表示 10000。
8253工作过程中,CPU可用输入指令读取任一通道的计数值。 CPU读到的是执行输入指令瞬间计数器的当前值。但 8253的计数器是 16位,所以要分 2次读至 CPU。 因此,若不锁存的话,在前后两次执行输入指令的过程中,计数值可能已经变化了。锁存当前计数值有下面两种方法:
①利用 GATE信号使计数过程暂停。
②向 8253写入一个方式控制字,
令 8253通道的锁存器锁存。
例如,在某微机系统中,8253的 3个计数器的端口地址分别为 3F0H,3F2H和 3F4H,控制字寄存器的端口地址为
3F6H,要求 8253的通道 0工作于方式 3,BCD计数,并已知对它写入的计数初值 n=1234( 十进制数),则初始化程序为:
MOV AL,00110111B ;控制字:选择通道 0,先读 /写低字节,; 后高字节,方式 3,BCD计数
MOV DX,3F6H ;指向控制口
OUT DX,AL ;送控制字
MOV AL,34H ;计数值低字节,代表 0011 0100 BCD
MOV DX,3F0H ;指向计数器 0端口
OUT DX,AL ;先写入低字节
MOV AL,12H ;计数值高字节,代表 0001 010 BCD
OUT DX,AL ;后写入高字节例 10.1
五、应用举例
1,8253定时功能的应用在计算机应用中,经常会遇到隔一定时间重复某一个动作的应用 。
设某应用系统中,系统提供一个频率为 10kHz的时钟信号,要求每隔 100ms采集一次数据。
在系统中,采用 8253定时器的通道 0来实现这一要求。将 8253芯片的 CLK0接到系统的 10kHz时钟上,
OUT0输出接到 CPU的中断请求线上,8253的端口地址为 10H~13H,如图 10.11所示。
中断请求信号
CPU总线
OUT0
图 10.11 8253用于定时中断
(1) 选择工作方式由于系统每隔 100ms定时中断一次,则采样频率为 10Hz,可选用方式 2来实现。当 8253定时器工作在方式 2时,在写入控制字与计数初值后,定时器就启动工作,每到 100ms时间,即计数器减到 1时,输出端 OUT0输出一个 CLK周期的低电平,向 CPU申请中断,CPU在中断服务程序中完成数据采集,同时按原设定值重新开始计数,实现了计数值的自动重装。
(2) 确定计数初值已知 fCLK0=10kHz,则 TCLK0=0.1ms,所以,
计数初值
N=TOUT0/TCLK0=100ms/0.1ms=1000=03E8H
(3) 初始化编程根据以上要求,可确定 8253通道 0的方式控制字为 00110100B,即 34H。
初始化程序段如下:
MOV AL,34H ;通道 0,16位计数,方式 2,二进制计数
OUT 13H,AL ;写入方式控制字到控制字寄存器
MOV AL,0E8H ; 计数初值低 8位
OUT 10H,AL ;写入计数初值低 8位到通道 0
MOV AL,03H ; 计数初值高 8位
OUT 10H,AL ;写入计数初值高 8位到通道 0
例 10.2
2,8253计数功能的应用通过 PC机系统总线在外部扩展一个
8253,利用其通道 0记录外部事件的发生次数,每输入一个高脉冲表示事件发生 1次 。
当事件发生 100次后就向 CPU提出中断请求
( 边沿触发 ),假设 8253片选信号的 I/O地址范围为 200H~203H,如图 10.12。
外部事件产生
A0
A1
A3~A9 译码 电路图 10.12 8253用于外部事件的计数根据要求,可以选择方式 0来实现,计数初值 N=100。
8253初始化程序段如下:
MOV DX,203H ;设置方式控制字地址
MOV AL,10H ;设定通道 0为工作方式 0,二进制计数,只写入;低字节计数值
OUT DX,AL
MOV DX,200H ;设置计数器通道 0的地址
MOV AL,64H ;计数初值为 100
OUT DX,AL
例 10.3
3,8253计数通道的级联应用已知某 8253占用 I/O空间地址为 320H~323H,
如图 10.13所示,输入其 CKL1端的脉冲频率为
1MHz,要求用 8253连续产生 10秒的定时信号 。
分析,8253的一个通道的最大计数范围为 65536,本例中要求输出 10秒定时信号,则计数初值 N=10/10-6=107,
超过了 8253一个通道的最大计数值,此时可以使用 2个
8253通道级连方式来实现。 若级连前 2个通道的初值为
N1和 N2,则级连后作为一个整体的计数值为 N=N1× N2。
通道 1 通道 2
10秒定时输出图 10.13 8253通道的级联设计数器初值 N1=500=1F4H,N2=20000=4E20H,使用方式 2,二进制计数,则通道 1,2的初始化程序如下:
MOV DX,323H
MOV AL,74H ; 01110100B,通道 1,写入 16位初值,方式 2,;二进制计数
OUT DX,AL ;写入通道 1方式字
MOV DX,321H
MOV AL,0F4H
OUT DX,AL ;写入初值 500的低 8位入通道 1
MOV AL,01H
OUT DX,AL ;写入初值 500的高 8位入通道 1
MOV DX,323H
MOV AL,0B4H ; 10110100B,通道 2,写入 16位初值,方式 2,;二进制计数
OUT DX,AL ;写入通道 2方式字
MOV DX,322H
MOV AL,20H
OUT DX,AL ;写入通道 2初值 20000的低 8位
MOV AL,4EH
OUT DX,AL ;写入通道 2初值 20000的高 8位