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