第十一章
可编程定时 /计数器 8253
【 本章重点 】
本章重点介绍可编程定时器 /计数器
8253的内部结构,6种工作方式及初始化
编程应用。
【 本章难点 】
本章难点是可编程定时 /计数器 8253
的引脚结构,6种工作方式的区别及使用
场合,灵活掌握初始化编程应用。
11.1 8253芯片内部结构
可编程定时器 8253的外部引线如图 11— 1所示, 相应的内
部结构框图如图 11— 2所示 。
D
0
D 3
D
1
D 2
D
4
D
5
D 6
D 7
A
0
A
1
CLK 0
GATE 0
OUT 0
CLK 1
CLK 2
OUT 1
OUT 2
V
CC
GND
CS
WR
RD
GATE 1
GATE 2
图 11-1 8253外部引线图
图 11-2 8253的内部结构

RD
CS
WR
A
0
A
1

D
0 ?
D
7
CLK
0
GATE
0
OUT
0
CLK
1
CLK
2
GATE
1
GATE
2
OUT
1
OUT
2
寄存器
控制
缓冲器
总线
数据
逻辑
写读 /
0器
计数
1器
计数
2器
计数
线



8253与总线相连接的引线主要是,
Do— D7:双向数据线, 用以传送数据和控制字, 计数
器的计数值亦通过此数据总线进行读写 。
CS:输入信号, 低电平有效, 当它有效时, 才能选中
该定时器芯片, 实现对它的读或写,
:读控制信号, 低电平有效,
:写控制信号, 低电平有效,
以上两信号输入到 8253上, 与其他信号一起, 共同完成
对 8253的读写操作,
RD
WR
A。, Al为 8253的内部计数器和一个控制寄存器的
编码选择信号, 其功能如下:
Al A。
0 0 可选择计数器 0
0 1 可选择计数器 1
1 0 可选择计数器 2
1 1 可选择控制寄存器
CLK0~2:是每个计数器的时钟输入端, 计数器对此时
钟信号进行计数, CLK最高频率可达 2MHz。
GATE0~2:叫门控信号, 即计数器的控制输入信号, 用来
控制计数器的工作 。
OUT0~2:计数器输出信号, 用来产生不同方式工作时
的输出波形,
11.2 8253工作方式
1,方式 0 (计数结束产生中断 )
在这种方式下, 计数器对 CLK输入信号进行减法计数, 每
一个时钟周期计数器减 1.
当设定该方式后, 计数器的输出 OUT变低, 设置装入计数
值时也使输出 OUT变低,
当计数减到零 —— 计数结束时, 输出 OUT变高, 该输出信
号即可以作为中断请求信号来使用,
如果在计数过程中修改计数值, 则写入第一个字节使原先
的计数停止 。 写入第二个字节后, 开始以新写入的计数值重新
计数 。
上面所说的计数过程受到计数器的门控信号 GATE的控制 。
当 GATE为高电平时, 允许计数;若 GATE为低电平时, 则禁止
计数 。
2.方式 1(可编程单稳 )
当计数值装入计数器后, 要由门控信号 GATE上升沿开始启
动计数 。 同时, 记数器的 OUT输出低电平 。 当记数结束时,
OUT输出高电平 。 这样就可以从计数器的 OUT端得到一个由
GATE的上升沿开始, 直到计数结束时的负脉冲 。 若想再次获
得一个所希望宽度的负脉冲, 可用 GATE上升沿重新触发一次
计数器, 或重新装入计数值并用 GATE上升沿触发计数器 。
如果在形成单个负脉冲的计数过程中改变计数值, 则不
会影响正在进行的计数 。 新的计数值只有在前面的负脉冲形
成后, 又出现 GATE上升沿才起作用 。 但是, 若在形成单个负
脉冲的计数过程中又出现新的 GATE上升沿, 则当前计数停止,
而后面的计数以新装入 的计数值开始工作 。 这时的负脉冲宽
度将包括前面未计完的部分, 使负脉冲加宽 。
3,方式 2( 频率发生器 )
在该方式下, 计数器装入初值 。 开始工作后, 计数器的输
出 OUT将连续输出一个时钟周期宽的负脉冲 。 两负脉冲之间
的时钟周期数就是计数器装入的计数初值 。 这样一来, 就可
以利用不同的计数值达到对时钟脉冲的分频, 而分频输出就
是 OUT输出 。
在这种方式下, 门控信号 GATE用作控制信号 。 当 GATE
为低电平时, 强迫 OUT输出高电平 。 当 GATE为高时, 分频
继续进行 。
在此方式下, 计数周期数应包括负脉冲所占的那一个时
钟周期 。 也就是说, 计数减到 1时开始送出负脉冲 。
在计数过程中, 若改变计数值, 则不影响当前的计数过
程, 而在下一次计数分频时, 采用新的计数值 。
4,方式 3(方波发生器 )
在这种方式下, 可以从 OUT得到对称的方波输出 。 当装
入的计数值 N为偶数时, 则前 N/ 2计数过程中, OUT为高;
后 N/ 2计数过程中, OUT为低, 如此这般一直进行下去 。
若 N为奇数, 则 (N+1)/ 2计数过程中, OUT保持高电平;而
(N— 1)/ 2计数期间, OUT为低电平 。
在此方式下, GATE信号为低电平时, 强迫 OUT输出高电
平 。 当 GATE为高电平时, OUT输出对称方波 。
在产生方波过程中, 若装入新的计数值, 则方波的下一
个电平将反映新计数值所规定 的方波宽度 。
CTS
5.方式 4(软件触发选通 )
设置此方式后, 输出 OUT立即变为高电平 。 一旦装入计
数值, 计数立即开始, 当计数结束时, 由 OUT输出一个宽度
为一个时钟周期的负脉冲, 注意:计数开始时刻并不受
GATE控制 。
此方式同样受 GATE信号控制 。 只有当 GATE为高电平时,
计数才进行;当 GATE为低电平时禁止计数 。
若在计数过程中装入新的计数值,计数器从下一时钟周
期开始以新的计数值进行计数。
6,方式 5(硬件触发选通 )
设置此方式后, OUT输出为高电平 。 GATE的上升
沿使计数开始 。 当计数结束时由输
出端 OUT送出一宽度为一个时钟周期的负脉冲 。
在此方式下, GATE电平的高低不影响计数, 计数
由 GATE的上升沿启动,
若在计数结束前,又出现 GATE上升沿,则计数从
头开始。
11.3 8253的控制字
8253在使用前要写入控制字, 用来规定其工作方式 。
3个通道中各有一个控制字寄存器, 它们使用同一个口地
址, 靠控制字中的 D7,D62位的编码加以区别 。 控制字格
式如下,
D7 D6 D5 D4 D3 D2 Dl D0
SC1 SC0 RW1 RW0 M2 M1 M0 BCD
SC1,SC0为计数器选择:
SCl,SC0=00,选择计数器 0; SCl,SC0=01,选择计数器 1;
SCl,SC0=10,选择计数器 2; SCl,SC0=11,非法选择 。
RW1,RW0为读写格式控制位:
RW1,RW0=00,对计数器锁存, 以便读取计数值;
RW1,RW0=01,只读或只写低 8位字节;
RW1,RW0=10,只读或只写高 8位字节;
RW1,RW0=11,先读写低 8位, 再读写高 8位 。
M2M1M0为工作方式选择位:
M2M1M0=000,选择方式 0;
M2M1M0=001,选择方式 1;
M2M1M0=X10,选择方式 2;
M2M1M0=X11,选择方式 3;
M2M1M0=100,选择方式 4;
M2M1M0=101,选择方式 5。
BCD为计数数制选择位:
BCD=0,选择二进制计数, 最大计数值为 65535;
BCD=1,选择十进制计数,最大计数值为 9 999。
【 例 11-1】 8253计数器 0的地址为 40H,工作方式 5,
十进制计数,初值为 2850H,计数器 1工作于方式 3,二进
制计数,初值为 64H,写出其初始化程序。
计数器 0控制字为 00111011B(3BH)
计数器 1控制字为 01010110B(56H)
程序如下:
MOV AL,3BH
OUT 43H,AL ;写计数器 0控制字
MOV AL,50H ;写计数器 0初值
OUT 40H,AL
MOV A L,28H
OUT 40H,AL
MOV AL,56H ;写计数器 1控制字
OUT 43H,AL
MOV AL,64H ;写计数器 1初值
OUT 41H,AL
11.4 8253的寻址及连接
图 11-3 8253与 8088总线的连接
11.5 初始化应用举例
由于 8253每个计数器都有自己的地址,控制字中又有
专门两位来指定计数器。这就使得 8253的编程初始化十分
灵活简便。在实际应用中,对计数器的编程实际上常采用
两种初始化顺序。
① 逐个计数器分别初始化 。 对某一个计数器, 先写入
方式控制字, 接着写入记数值 ( 一个字节或两个字节 ) 如
图 11-4所示 。 图中表示的是写入两个字节计数值的情况 。
按照 11-4所示的顺序对计数器逐个初始化 。 计数器初始化
的顺序随意选定 。
② 先写所有计数器的方式字,再装入各计数器的记数
值。其过程如图 11-5所示。
写入方式控制字
写入计数值低字节
写入计数值高字节
)写方式控制字(计数器 0
)写方式控制字(计数器 1
)器写入方式控制字(计数 2
)器写计数值低字节(计数 2
)器写计数值高字节(计数 2
)器写计数值低字节(计数 1
)器写计数值高字节(计数 1
)器写计数值低字节(计数 0
)器写计数值高字节(计数 0
图 11-4 一个计数器初始化程序 图 11-5 另一种编程顺序
【 例 11-2】 设 8253的 CLK0,CLK1均输入 100KHZ的时
钟脉冲, 要求计数器 0输出周期为 1MS的负脉冲序列, 计
数器 1输出周期为 50ms的方波, 试写出初始化程序段
( 设通道 0地址为 F8H) 。
解:根据题意, 计数器 0工作在方式 2,初始值 LSB=10-
3/10-5=100,控制字为 14H(二进制计数 )。 计数器 1工作
在方式 3,初始值 LSB=( 50*10-3) /10-5=5000,用十进制
计数, 控制字 CW=67H.
初始化程序如下:
MOV AL,14H
OUT 0FBH,AL
MOV AL,64H
OUT 0F8H,AL
MOV AL,67H
OUT 0F8H,AL
MOV AL,50H
OUT 0F9H,AL
本章到此结束