chen849928055 发表于 2015-5-6 09:40:56

请教下stc例程定时器装初值是怎么计算的

      #define   MAIN_Fosc                24000000UL        //定义主时钟
      #define        Timer0_Reload        (65536UL -(MAIN_Fosc / 600000))                //Timer 0 重装值, 对应300KHZ


      ET0 = 0;                //初始化Timer0输出一个300KHZ时钟
        TR0 = 0;
        AUXR |=0x80;        //Timer0 set as 1T mode
        AUXR2 |= 0x01;        //允许输出时钟
        TMOD = 0;                //Timer0 set as Timer, 16 bits Auto Reload.
        TH0 = (u8)(Timer0_Reload >> 8);
        TL0 = (u8)Timer0_Reload;
        TR0 = 1;

tim 发表于 2015-5-6 09:47:30

#define      Timer0_Reload      (65536UL -(MAIN_Fosc / 600000))                //就是这一行计算的

chen849928055 发表于 2015-5-6 12:22:01

tim 发表于 2015-5-6 09:47
#define      Timer0_Reload      (65536UL -(MAIN_Fosc / 600000))                //就是这一行计算 ...

知道是这一行,但是自己算了下不对呀

小李非刀 发表于 2015-5-6 14:57:46

chen849928055 发表于 2015-5-6 12:22
知道是这一行,但是自己算了下不对呀

怎么个不对法?
你测试过程序了吗?这个算法正确的,这个例程是输出300KHZ时钟,则溢出率就是600K,就是600000。使用1T模式,则就是直接 主频/600000,由于是加计数,计满溢出才自动重装,所以要用65536减。

完美幸 发表于 2015-5-6 15:05:08

可能他没理解定时器原理。。建议看数据手册。。。

大米饭 发表于 2015-5-6 15:17:55

直接软件计算了,自己算着多累

chen849928055 发表于 2015-5-6 15:39:33

小李非刀 发表于 2015-5-6 14:57
怎么个不对法?
你测试过程序了吗?这个算法正确的,这个例程是输出300KHZ时钟,则溢出率就是600K,就是6 ...

是我自己没算对,从新看了下手册,算了下,是对的。谢谢你的解答
页: [1]
查看完整版本: 请教下stc例程定时器装初值是怎么计算的