本文已参与「新人创作礼」活动,一起开启掘金创作之路。
如何实现定时?
软件方式:用一段程序实现延时(延时程序)
利用程序循环延迟指定的时间
缺点:CPU占用率?延时精度?兼容?
硬件方式:定时/计数器电路
利用脉冲计数的设定的时间输出定时信号
8253计数器 ——3个独立的16位定时/计数器(通道)
——24引脚双列直插式
——最高计数频率2.6MHz
——TTL电平兼容
——单电源+5V供电
脚下留心:8253的A0,如果 连接到 8086CPU的A0=1,会导致CPU将传输数据线的D8
D15的数据,而8253只连接了8086的D7D0,接收不到数据。(A0位为1,地址线地址线传送的是奇地址,而奇地址只在D8~D15传送)。
所以,让8086的A0=0,8253的A0应接8086的A1,8253的A1接8086的A2。
计数器通道的主要引线(每通道均相同):
CLK 时钟脉冲输入,计数器的计时基准。
GATE 门控信号输入,控制计数器的启动和停止
OUT 计数器输出信号,不同工作方式下产生不同波形。
计数器启动方式 程序指令启动——软件启动
外部电路信号启动——硬件启动
控制字格式
用于确定各计数器的工作方式。
8253必须先初始化才能正常工作。
每个计数器都必须初始化一次。
CPU通过OUT指令把控制字写入控制寄存器。
在工作方式控制字被设置后,随后必须紧接着给计数器预设置计数初值,计数器方可开始工作。
给计数器设置初值的计算。1赫兹等于1秒
计数器规则:先减1,再判断是否为0,如果为0则停止计数
初值的范围:两种计数范围 二进制 、十进制
二进制: 0 ~ FFFF H(0—65535)最大值是:0 (65536次)
十进制(BCD):0000H9999H(09999) 最大值:0(1000次)
初始化程序流程
写入顺序:可按计数器分别写入控制字和初值,也可先写所以计数器控制字,再写入它们的初值。
工作方式
特点:送入初值就会启动,只进行一次计数,计完后就不管了。单次定时
例如:初值是100,使用方式0,当100减到0后输出一次,就不管了。
特点:硬件启动,开关(GATE)开一次启动一次,结束后如果还想启动,不需要再写入初值,直接再开一次(GATE)即可。
特点:当使用该方式时,初值减到0不再停止,而是再次自动重复计数。
例如:初值100,方式2,当初值从100减到0时,不停止,初值再次设置为100继续减,如此循环。
特点:和方式2大体相似,只不过时波形不同,方式3为方波。
特点:和方式0大体类似,只不过方式1装入控制字后变低电平,而方式4装入控制字后变高电平,方式4结束后输出一个CLK的低电平。(计数区间内进行取反)
特点:和方式4一样,只不过方式5是硬件触发。