计数器和定时电路(8254A)
5.计数器和定时电路(8254A)
5.1 概述
-
8254引脚
-
8254与CPU接口
- 8位数据线:D0~D7
- 寻址控制线:A0、A1、/CS
- 读写控制线:/RD、/WR
-
8254与外设接口(每个对应)
- 时钟输入:CLK
- 输入门控:GATE
- 波形输出:OUT
-
5.2 8254的控制字
-
D7D6:
-
8253:选取0-2控制寄存器
-
8254:11读回
- D5=0 锁存计数值
- D4=0 将计数器状态存入状态寄存器
-
-
D5D4:
- 00:锁定计数器值(供CPU读)
- 01:读写低8位
- 10:读写高8位
- 11:先读写低8位,再8高位
-
D3D2D1:
- 选取0-6工作方式
-
D0:
- 0:二进制
- 1:二-十进制
-
Tips:
- 先减一,再判断是否为0,最长时间为初值0,代表65536
- 十进制范围0001~10000←初值0000H
- 二进制范围0001H~10000H(65536)←初值0000H
- 共4个端口,地址从低到高为计数器0、1、2、控制字
5.3 可编程定时/计数器的工作方式
-
共同点:
- 控制字写入时,复位
- 写入初值后,经过一个时钟周期,CE才开始工作,即N+1个脉宽
- CLK的上升沿,门控信号GATE被采样
-
不同点:
- 输出的波形
- 触发方式
- GATE对计数操作的影响
-
方式0:__——:计数结束产生中断输出(软件控制)
- 预置初值后低电平,计数值减为0时,输出高电平并维持
- GATE=0,计数停止;GATE=1,继续计数
- 计数过程中可重写或改变计数值
-
方式1:__ ——:重复触发的单稳输出(硬件触发)
- 预置初值后低电平,计数值减为0时,输出高电平并维持
- 计数未完成时,允许GATE多次重触发,
- GATE上升沿触发,在下一个CLK下降沿开始计数
- 下个GATE触发信号到来时,需当前计数值计满回0,将新初值装入CE,开始计时
-
方式2:—— _ —— _:分频器(软件控制)
- 计数减到1时,OUT输出一个CLK脉宽低电平,自动装入重新计数
- GATA上升沿重新装入初值
- 新初值下次计数才起作用
-
方式3:— __ — __:方波发生器(软件控制)
- 计数值一半**(n+1)/2**时,OUT变低,任务完成OUT变高
- 其他与方式2同
-
方式4:—— _—:选通信号发生器(软件控制)
- 写入初值开始计数,计数减到0,输出一个脉宽低电平
- GATE=0,计数停止;GATE=1,继续计数
- 新初值立即起作用
-
方式5:—— _—:选通信号发生器(硬件触发)
- 多次重触发
- GATE上升沿开始触发,计数减到0,输出一个脉宽低电平
- 下个GATE触发信号到来时,需当前计数值计满回0,将新初值装入CE
-
方式0与方式4(软件控制特点)
- GATE=1,工作;GATE=0,暂停
- 无法自动重装
- 新初值立即生效
- 方式0:__ ——— 计数结束产生中断输出
- 方式4:—— _ — 选通信号发生器
-
方式1与方式5(硬件触发特点)
- GATE上升沿触发
- 允许多次重触发
- 当前计数结束,才可在下个GATE上升沿到来时装入初值,并开始计数
- 方式1:__ — 重复触发的单稳输出,计数结束后,会继续输出相应宽度的负脉冲
- 方式5:**—— _ — **选通信号发生器
-
方式2与方式3(波形输出)(软件控制)
-
预置初值自动装入
-
方式2: —— _ —— _ 分频器
-
方式3:— __ — __ 方波发生器
-
例题
定时功能例题
-
设某应用系统中,系统提供一个频率为10kHz的时钟信号,要求每隔100ms采集一次数据。在系统中,采用8254定时器的通道0来实现这一要求。将8254芯片的CLK0接到系统的10kHz时钟上,OUT0输出接到CPU的中断请求线上,8254的端口地址为10H~13H
-
10kHZ = 1*10^-4s = 0.1ms
-
使用端口10H与13H,方式2,初值为1000
1
2
3
4
5
6MOV AL,00110101B
OUT 13H,AL
MOV AL,00H
OUT 10H,AL
MOV AL,10H
OUT 10H,AL
计时功能例题
-
通过PC机系统总线在外部扩展一个8254,利用其通道0记录外部事件的发生次数,每输入一个高脉冲表示事件发生1次。当事件发生100次后就向CPU提出中断请求(边沿触发),假设8254片选信号的I/O地址范围为200H~203H
-
中断,需要上升沿__——
-
使用端口200H与203H
-
选用方式0,初值为100H
1
2
3
4
5
6
7
8MOV AL,00110001B
MOV DX,203H
OUT DX,AL
MOV DX,200H
MOV AL,00H
OUT DX,AL
MOV AL,01H
OUT DX,AL
级联例题
-
已知某8254占用I/O空间地址为320H~323H,如下图所示,输入其CKL1端的脉冲频率为1MHz,要求用8253连续产生10秒的定时信号。
-
1/1MHZ=10^-6 为10^7倍,需要两片
-
设N1=500=1F4H,N2=20000=4E20H
-
通道1
1
2
3
4
5
6
7
8MOV DX,323H
MOV AL,01110100B
OUT DX,AL
MOV DX,321H
MOV AL,0F4H
OUT DX,AL
MOV AL,01H
OUT DX,AL -
通道2
1
2
3
4
5
6
7
8MOV DX,323H
MOV AL,10110100B
OUT DX,AL
MOV DX,322H
MOV AL,20H
OUT DX,AL
MOV AL,4EH
OUT DX,AL
应用举例
-
某产品的包装流水线中,一个包装箱能装24罐饮料。装箱时希望流水线上每通过24罐饮料,流水线要停4秒以等待包装箱封口,然后继续通过下一箱的24罐。流水线就是这样周而复始的运作。试利用一片8253来完成流水线控制中的定时和计数功能。假设8253的端口地址为8CH~8FH,采用的时钟频率是2KHz。
-
需要能够重复触发,1、2、3
-
通道一
- 需要软件触发 2、3,计数结束后输出上升沿
- 选择2
-
通道二
- 需要使通道一暂停输出,需输出4s的低电平,之后持续高电平,选用方式1
- 选择方式1,初值8000
-
通道一计数饮料,方式2,初值24
1
2
3
4
5
6MOV DX,8FH
MOV AL,01010101B
OUT DX,AL
MOV DX,8DH
MOV AL,24H
OUT DX,AL -
通道二计时,方式1,初值8000
1
2
3
4
5
6
7
8MOV DX,8FH
MOV AL,10110011B
OUT DX,AL
MOV DX,8EH
MOV AL,00H
OUT DX,AL
MOV AL,80H
OUT DX,AL
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 喵喵虎冲呀!
评论