天天看點

單片機定時器精準定時_為何51單片機的定時器計時不準确

//假設晶振12MHZ,檢測的是P1.1下降沿

#include "reg51.h"

unsigned int YSJS;

sbit K1 = P1^1;

void main(void)

{

TMOD |= 0X10; //定時器1工作于方式1,16位定時器

TL1 = 0x78; //設定定時初值

TH1 = 0xEC; //定時器1定時時間=5000us

ET1 = 1; //使能定時器1中斷

EA =1; //開總中斷

K1 = 1;

YSJS = 0;

while(1)

{

if(K1==0)TR1 = 1; //啟動定時器1

if(YSJS == 12000) //已定時一分鐘

{

//這裡加入你自己定時一分鐘後要做的處理

}

}

}

void TIMER1(void) interrupt 3 //定時器1中斷函數使用預設寄存器組

{

TL1 = 0x78; //設定定時初值

TH1 = 0xEC; //定時器1定時時間=5000us

YSJS++;

if(YSJS==12000) //已定時一分鐘

{

TR1 = 0;關閉定時器1

}

}

取消

評論