控制/MCU
51 单片机编程经常要求对时间进行某种操作,比如数码管的动态扫描显示、延时等等对于定时或延时,一般有三种方法实现:
①、软件定时:如常用的延时程序 Delay(),在定时过程中,CPU 循环测试延时变量是否满足条件,此时 CPU 利用率低下;
②、硬件定时:如外部芯片555 时基电路,通过外部阻容,达到一定的延时功能,改变阻容大小可以改变延时长度,这种定时器取决于硬件,设定好以后不能通过软件更改;
③、定时器:利用单片机内部定时器,实现对时间的操作。
1、定时器功能:
(1)、定时:产生一个标准的时间间隔:如 20 ms,100 ms 等,单片机使用这种方式可以产生一个符合某一要求的脉冲方波;
(2)、计数:对外部的事件(脉冲)进行统计,很明显外部事件的发生是随机的,单片机不可能预知外部事件何时发生,但可以进行统计,当达到所要求的数值时,单片机进行相应的操作。
2、四种工作模式:
模式 0:13 位计数器模式
在某一个初值的基础上加 1 计数,当计数器计满为全“1”,再来一个计数脉冲时,就产生一个“溢出中断信号”TF1=1。
注:由于低 8 位计数器中的高三位没有参与工作,故填装初值时应“避开”此三位。
模式 1:16 位定时/计数模式
类同于模式 0,由于两个计数器为完整的 8 位,故将计算好的 16 位初值可直接填装到 TH、TL 中。
模式 2:8 位自动重装初值模式
TL 做计数器,TH 做初值寄存器,工作前 TL1,TH1 分别预置相同的初值,TL1 计数时,产生溢出的同时,将 TH1 中的初值自动重装 TL1,TL1 继续计数。
模式 3:组合扩展模式(仅适用于 T0)
将 T0 和 T1 重新进行“拆分、组合”,将 T0 变为由 TH0,TL0 组成的两个独立的 8 位定时/计数器。
补充:四种模式比较:
3、定时器参数:
(1)、定时器的个数:网上见到的 51 单片机教程都说定时器有 2 个:定时器 0 和定时器 1,实际上有的单片机有 3 个定时器,如博主买的开发板上的单片机:STC89C54RD+,因此,编程时注意看好有几个定时器……
(2)、TL,TH:初值寄存器,分别是低 8 位,高 8 位,后边加上一个数字 0 或 1,代表定时器 0 或定时器 1
(3)、TMOD:模式控制寄存器,属于 SFR 特殊功能寄存器,地址:89H,决定定时/计数器的四种工作模式,8 位
GATE 选通门:GATE=0 时,只要 TR=1,计数器就开始工作
GATE=1 时,只有 INT=TR=1 时,计数器工作(用来测量 INT 脚高电平脉冲的宽度)
C/T:计数器输入脉冲选择开关,决定着计数器的“定时”或“计数”的两种工作方式
C/T=0:定时方式:计数器接收内部时钟信号 fosc
C/T=1:计数方式:计数器接收引脚上的外部信号
M1、M0 模式选择:确定 4 种工作模式
(4)、TCON:控制寄存器,属于 SFR 特殊功能寄存器,地址:88H,8 位
TF:定时器溢出标志,计数器溢出时硬件自动置位,即 TF=1,进入中断后再由硬件自动清除(TF=0)
TR:计数器的控制位
TR=1:计数器开始工作
TR=0:计数器停止计数
IE:外部中断 INT 的请求标志
当单片机检测到 INT 引脚上有下降沿时,IE=1 申请中断,进入中断服务程序时,硬件自动清除 IE 标志
IT:外中断触发类型控制
IT=1 时,外中断信号的下降沿触发 IE 标志
IT=0 时,外中断信号的低电平触发 IE 标志
(5)、作为“定时器”使用时,“定时”与“初值”的关系如下:
T = ( M - TC ) × t
其中:T:定时时间
M:计数器的模
TC:计数初值
t:计数器计数脉冲的周期(t = fosc / 12)
全部0条评论
快来发表一下你的评论吧 !