8253可编程定时/计数器芯片

430 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

如何实现定时?

软件方式:用一段程序实现延时(延时程序)

利用程序循环延迟指定的时间

缺点:CPU占用率?延时精度?兼容?

硬件方式:定时/计数器电路

利用脉冲计数的设定的时间输出定时信号

8253计数器 ——3个独立的16位定时/计数器(通道)

——24引脚双列直插式

——最高计数频率2.6MHz

——TTL电平兼容

——单电源+5V供电

cd26f7da6dea48dab0e71bb0a6950ae0.png 脚下留心:8253的A0,如果 连接到 8086CPU的A0=1,会导致CPU将传输数据线的D8D15的数据,而8253只连接了8086的D7D0,接收不到数据。(A0位为1,地址线地址线传送的是奇地址,而奇地址只在D8~D15传送)。

    所以,让8086的A0=08253的A0应接8086的A1,8253的A1接8086的A2。

5b1da599d86f4e129e8448918d944f44.png 计数器通道的主要引线(每通道均相同):

CLK 时钟脉冲输入,计数器的计时基准。

GATE 门控信号输入,控制计数器的启动和停止

OUT 计数器输出信号,不同工作方式下产生不同波形。

计数器启动方式 程序指令启动——软件启动

外部电路信号启动——硬件启动

7b5cdc5ab0c4425a84cc9128dad7239e.png

控制字格式

用于确定各计数器的工作方式。

8253必须先初始化才能正常工作。

每个计数器都必须初始化一次。

CPU通过OUT指令把控制字写入控制寄存器。

e78c00c47b2b4942ad83969779a84d9a.png 在工作方式控制字被设置后,随后必须紧接着给计数器预设置计数初值,计数器方可开始工作。

给计数器设置初值的计算。1赫兹等于1秒

计数器规则:先减1,再判断是否为0,如果为0则停止计数

初值的范围:两种计数范围 二进制 、十进制

二进制: 0 ~ FFFF H(0—65535)最大值是:0 (65536次)

十进制(BCD):0000H9999H(09999) 最大值:0(1000次)

dc27937e386345e5adfc12e67a99ac0c.png 初始化程序流程

27835245809341a5aab4c55db11c16c4.png 写入顺序:可按计数器分别写入控制字和初值,也可先写所以计数器控制字,再写入它们的初值。

工作方式

b3df0a58edb34f42971bf6ab00935fda.png 特点:送入初值就会启动,只进行一次计数,计完后就不管了。单次定时

例如:初值是100,使用方式0,当100减到0后输出一次,就不管了。

3bd846d4fb0e4b079b401833f0007566.png 特点:硬件启动,开关(GATE)开一次启动一次,结束后如果还想启动,不需要再写入初值,直接再开一次(GATE)即可。

image.png 特点:当使用该方式时,初值减到0不再停止,而是再次自动重复计数。

        例如:初值100,方式2,当初值从100减到0时,不停止,初值再次设置为100继续减,如此循环。

a60bf0c0e7ee442bbc73dc4ee7712f69.png 特点:和方式2大体相似,只不过时波形不同,方式3为方波。

image.png 特点:和方式0大体类似,只不过方式1装入控制字后变低电平,而方式4装入控制字后变高电平,方式4结束后输出一个CLK的低电平。(计数区间内进行取反)

f918e312518c46b698182f86ad98f881.png 特点:和方式4一样,只不过方式5是硬件触发。