51单片机怎么来定时?

当用"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++;
 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章