文章目录
计数与定时
8253芯片特点
1. 外部引脚
2. 内部结构特点(含3个计数器、1个控制寄存器)
具有三个完全相同的、独立的计数/定时器
三个可独立工作的16位定时/计数器,一个控制寄存器。共占用4个端口地址。
用最低2位地址
区分片内4个端口:
2. 计数启动方式(软件启动、硬件启动的定义)
8253/8254可工作于6种工作方式下,不同的工作方式,具有不同的计数启动方式和输出波形。
3. 6种工作方式
不能自动重复计数的工作方式
方式0:软件启动,不自动重复计数,计数结束输出高电平。
方式1:硬件启动,不自动重复计数,计数开始输出低电平,结束后又变高。
方式4:软件启动,不自动重复计数,计数结束输出一个CLK宽度的低电平。
方式5:硬件启动,不自动重复计数,波形与方式4相同。
能自动重复计数的工作方式(能输出连续波形)
方式2:软、硬件启动,自动重复计数。计数到最后一个脉冲时输出低电平。
① 可输出频率为(1/N)CLK脉冲频率
的连续方波信号。
② 每1个OUT端脉冲包含(N-1)*CLK的正脉冲
,1个CLK的负脉冲
。
方式3:软、硬件启动,自动重复计数。输出对称方波。
① 若N为偶数,输出频率为(1/N)CLK频率
的连续对称方波信号。
② 若N为奇数,输出波形为 (N+1)/2CLK 周期正脉冲
, (N-1)/2CLK 负脉冲
。
工作方式小结
- 需要两个写脉冲——两次写操作
第1个写脉冲写入控制字
第2个写脉冲写入计数初值 - 不同的工作方式,有不同的计数启动方法。
- 可根据对输出波形的要求,选择不同的工作方式。
- 能输出连续波形的只有方式2和方式3。
4. 控制字格式
计数初值可以是8位或16位,
8253/8254数据总线宽度是8位,因此,若计数初值是16位,需要分两次传送。
最大16位BCD数:9999
最大16位二进制数:FFFF
8253为减法计数器
最大计数初值:0
若D0=1,那么0-1=9999
若D0-0,那么0-1=FFFF
即0是最大值(虚值)
5. 8253的应用
1. 应用中的注意点
-
每一次启动计数,需有两次写操作:
写控制字
写计数器初值
如果初值为8位字长,则一次写入;若初值为16位字长,则需两次写入 -
每个计数器的
控制命令字
均送入控制寄存器
-
各计数器的计数初值
送到该计数器的计数寄存器
及初值寄存器
。
2.与系统的连接示意
3. 初始化程序流程
一个计数器的初始化程序设计流程:
当有两个以上计数器被应用时的初始化程序设计流程:
注:是写入全部的计数器控制字,在逐个写计算初值
4. 8253应用例子
由其接口地址为
0120H~0123H
可知
0120H 是计数器0:CNTO
0121H 是计数器1:CNT1
0122H 是计数器2:CNT2
0123H 是控制寄存器
输入8253的时钟频率为2MH
则8253的CLK
: 1/2MH=0.5us
① CNT0每10ms输出一个CLK周期宽的负脉冲
计算计数初值:
CNT0:10ms/0.5us=20000 (需20000次CLK 才达到10ms)
确定控制字:
CNT0:方式2,16位计数值 ——> 0011
0100
00
11
0100
控制字含义:
00:计数器0
11:(计数长度选择)先读/写计数器低8位,再读/写计数器高8
010:(工作方式选择)x10-方式2
0:二进制计数
选择16位计数的原因:因为8位二进制最大是255,而这是2000
选择方式2的原因:
初始化程序:
② CNT1输出10KHz的连续方波信号
计算计数初值:
CNT1:2 MHz/10KHz=200
确定控制字:
CNT1:方式3,低8位计数值——> 0101
0110
控制字含义:
选择方式3的原因:
初始化程序:
类似
③ CNT2在定时5ms后产生输出高电平
计算计数初值:
CNT2: 5ms/0.5us=10000
确定控制字:
CNT2:方式0,16位计数值——> 1011
0000
控制字含义:
选择方式0的原因:
初始化程序:
类似