单片机C语言编程中,定时器的初值对于初学者真的是比较不好计算,因此我总结了以下几种方法。

第1种方法:

#define FOSC 11059200L                         //晶振的频率

#define TIMS (65536-FOSC/12/1000)   //12T mode  对于8051系列单片机通用

//#define TIMS (65536-FOSC/1000)      //1T mode      STC单片机可以用这个

unsigned int timer0_tick;

int timer0_count;

void Timer0(void) interrupt 1 using 1 //定时器0中断外理
{
        TL0=TIMS;
    TH0=TIMS>>8;
if(timer0_tick–==0)    //加到1000次即1秒
{           
timer0_tick=1000;

                LED_Timer=~LED_Timer;   
}    
}

初值的赋值采用的是移位运算:

        TL0=TIMS;
    TH0=TIMS>>8;

第2种方法:

   #define FOSC 11059200L                         //晶振的频率

   TH=(65536-time*FOSC /12)/256
   TL=(65536-time*FOSC /12)%256

time就是假设要延时的100ms(要取100000us)

FOSC 是晶振频率

注意:定时器一定要考虑晶振的频率,因为单片机最小的中断时间和频率有关系。

例如:

      6MHz晶振对应的时间范围是:512us  — 16.384ms — 131.072ms

      因此,在设置时间前,一定要考虑晶振和定时器的关系。

      

版权声明:本文为hgndinfo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/hgndinfo/archive/2012/01/15/2713810.html