当用"delay.h"这个头文件进行软件延时时,在延时时,CPU时间被占用,无法进行其他任务,导致系统效率低下,因此软件延时只适用于短暂延时,因此引出了定时器。
单片机中有多个小闹钟,可以帮助我们实现延时,这些小闹钟就是“定时器。每个定时/计数器既可以实现定时功能,也可以实现计数功能。可以工作在4种定时器模式下。
定时/计数器
51单片机有T0和T1两个定时器,定时器0有四种工作方式:方式0:13位定时 /计数器模式方式1:16位定时 /计数器模式方式2:8位可重装载定时 /计数器模式方式3:两个单独8位定时 /计数器模式定时器1只有三种方式,同上面三种。
实现定时功能,除了使用单片机内部的定时/计数器,还可有以下三种方法:
①使用软件定时 优点:可随意修改定时时间,一次编写,多次调用 缺点占用CPU时间,降低CPU的利用率。
②时基电路 优点:使用方便,缺点:硬件电路连接好之后,定时时间不好改变。利用时间计算电阻和电容的值,延时可能会出现误差
③可编程芯片定时:优点:定时准确,可修改时间,使用灵活,可与单片机扩展连接。缺点:电路连接较不方便。
定时/计数器0的工作原理
在定时方式1下,定时/计数器0的核心是一个16位宽的由计数脉冲触发的按递增规律( 即累加方式)工作的循环累加计数器(TH0+TL0) 。从预先设定的初始值开始,每来一个计数脉冲就加1,当加到计数器为全1时,再输入一个脉冲,就会发生溢出现象,计数器回零,同时产生溢出中断请求信号(TF0置1) 。如果定时/计数器工作于定时模式,则表示定时时间已到。
定时/计数器的实质是加1计数器,由高8位和低8位两个寄存器构成。TMOD是定时/计数器的工作方式寄存器。TCON是控制寄存器。
控制寄存器
位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|---|
字节地址:88H | TF1 | TR1 | TF0 | TR0 | TCON |
定时器操作步骤
①选择工作步骤
②选择控制方式
③选择定时器模式
④定时器赋初值
⑤开中断
⑥开总中断
⑦开定时器
初值计算
定时时间T=(2的N次方-X)12/单片机晶振频率
X:定时时间
方式0时,N=13
方式1时,N=16
方式2时,N=8
具体实现代码与电路
代码
//定时器,led闪烁,
#include<reg51.h>
sbit led=P1^0;
void time();
void main()
{
led=1;
time();
while(1);
}
void time() //定时器设置
{
TMOD=0x10; // 定时器0,工作方式1
TH0=0x00;
TL0=0x00;
EA=1; //开总中断
ET0=1; //开定时器中断
TR0=1; //启动定时器
}
void timer()interrupt 1
{
TH0=0x00;
TL0=0x00;
led=~led;
}
电路
优化闪烁周期定时500ms
//led闪烁500ms
#include<reg51.h>
sbit led=P1^0;
int i=0;
void time();
void main()
{
led=1;
time();
while(1)
{
if(i==10)
{
led=~led;
i=0;
}
}
}
void time()
{
TMOD=0x10;
TH0=0x4c; //50ms
TL0=0x00;
EA=1;
ET1=1;
TR1=1;
}
void timer()interrupt 3
{
TH0=0x4c;
TL0=0x00;
i++;
}
啦啦赛
发布了20 篇原创文章 · 获赞 15 · 访问量 4244
私信
关注