1. 程式人生 > >C51微控制器定時器T0,T1的常用基本設定

C51微控制器定時器T0,T1的常用基本設定

有時候帶手機不方便,可以又想知道時間,這時候可以用蜂鳴器做一個音訊的時間提醒器,每60秒發一聲提醒

提醒器計時可以使用微控制器的定時器T0、T1來做,計時的定時器用T1來做,工作在方式2(8位自動裝載),系統執行提示的定時器用T0來做,工作在方式1(16位定時)

程式碼如下

#include "reg52.h"

#define uint unsigned int
#define uchar unsigned char

#define time_set0 5000//設定定時器0的計時長度

#define th0 (65536-time_set0)/256//計算定時器高8位裝入值

#define tl0 (65536-time_set0)%256 //計算定時器低8位裝入值
#define time_set1 256-200//設定定時器1的計時長度

sbit P1_1=P1^1;//系統執行指示燈管腳

sbit beep=P1^7;//蜂鳴器管腳

uint cnt=0;//計數器
uint cnt2=0;//計數器
uint cnt3=0;//計數器

void delay(uint i)//延時函式
{
uchar k;
for(;i>0;i--)
for(k=0;k<200;k++);
}

timer0()interrupt 1 using 1//定時器0設定
{
    cnt++;//每次中斷增加一
if(cnt>100)//計數時間5ms*100=500ms
{
cnt=0;
}

    TH0=th0;//重灌定時器
    TL0=tl0;
}

timer1()interrupt 3 using 2//定時器1設定
{
    cnt2++;
if(cnt2>=5000)//計數時間0.2ms*5000=1s
{
cnt2=0;
cnt3++;//秒計數器增加一
P1_1=!P1_1;//指示燈每秒翻轉一次
}
}

void main()
{
    TMOD=0x21;//設定定時器1方式2(高4位0010,自動重灌TH->TL,計滿255),定時器0方式1(低4位0001,16位定時器,可計滿65535)
    TH0=th0;//裝載定時器初始值
    TL0=tl0;
    TH1=time_set1;
    TL1=time_set1;
    EA=1;//開總中斷
    ET0=1;//開定時器0中斷
    ET1=1;//開定時器1中斷
    TR0=1;//開啟定時器0
    TR1=1;//開啟定時器1
while(1)
{
  if(cnt3>=60)//計時60秒
  {
  cnt3=0;//計時清零
beep=0;//開啟蜂鳴器
delay(100);//延時100
beep=1;//關閉蜂鳴器
  }
}
}