新塘N76E003 芯片的定时器 初始化不正确 估计是分频问题

新塘N76E003 芯片的定时器 初始化不正确,原因找到了,但内心还是不明白。

比如定时器0

            //设置定时器0和1为16位模式
          TMOD |= 0x01;        //Timer0 Mode1
            //定时器0中断允许
            ET0=1;      
            TH0=(65536-1000)/256; // 0xff;
            TL0=(65536-1000)%256; // 0xf1;
            //开始计数
            TR0=1;
                //总中断开
            EA=1;

系统是内部时钟16m,时钟分频没有设置默认为0 应该是运行时钟应该是1/16m = 0.0625us

上面初始化 1000数值 应该定时时间 1000*1/16m = 0.0625*1000 = 62.5us  但是 示波器测试得到的时间是760us ,百思不得其解

后面网上看到信息,说是分频系数问题,1000*1/16m/12 = 1000*12/16m = 750us  时间差不多,应该是分频 默认是12分频

但是具体在哪里已经设置了呢,我不得而知,不知道,有知道的大神告知下,谢谢

参考

//-------------------------------------------------------------------------
void Timer0_Delay100us(UINT32 u32CNT)
{
    clr_T0M;                                        //T0M=0, Timer0 Clock = Fsys/12
    TMOD |= 0x01;                                   //Timer0 is 16-bit mode
    set_TR0;                                        //Start Timer0
    while (u32CNT != 0)
    {
        TL0 = LOBYTE(TIMER_DIV12_VALUE_100us);    //Find  define in "Function_define.h" "TIMER VALUE"
        TH0 = HIBYTE(TIMER_DIV12_VALUE_100us);
        while (TF0 != 1);                           //Check Timer0 Time-Out Flag
        clr_TF0;
        u32CNT --;
    }
    clr_TR0;                                           //Stop Timer0
}
//------------------------------------------------------------------------------
void Timer0_Delay1ms(UINT32 u32CNT)
{
    clr_T0M;                                        //T0M=0, Timer0 Clock = Fsys/12
    TMOD |= 0x01;                                   //Timer0 is 16-bit mode
    set_TR0;                                        //Start Timer0
    while (u32CNT != 0)
    {
        TL0 = LOBYTE(TIMER_DIV12_VALUE_1ms);         //Find  define in "Function_define.h" "TIMER VALUE"
        TH0 = HIBYTE(TIMER_DIV12_VALUE_1ms);
        while (TF0 != 1);                           //Check Timer0 Time-Out Flag
        clr_TF0;
        u32CNT --;
    }
    clr_TR0;                                        //Stop Timer0
}
 

 

#ifdef FOSC_160000        // if Fsys = 16MHz 
        #define TIMER_DIV12_VALUE_10us            65536-13        //13*12/16000000 = 10 uS,              // Timer divider = 12 for TM0/TM1
        #define TIMER_DIV12_VALUE_100us            65536-130        //130*12/16000000 = 10 uS,          // Timer divider = 12 
        #define TIMER_DIV12_VALUE_1ms                65536-1334    //1334*12/16000000 = 1 mS,             // Timer divider = 12 
        #define TIMER_DIV12_VALUE_10ms            65536-13334    //13334*12/16000000 = 10 mS         // Timer divider = 12 
        #define TIMER_DIV12_VALUE_40ms            65536-53336    //53336*12/16000000 = 40 ms            // Timer divider = 12 
        #define TIMER_DIV4_VALUE_10us                65536-40        //40*4/16000000 = 10 uS,            // Timer divider = 4    for TM2/TM3
        #define TIMER_DIV4_VALUE_100us            65536-400        //400*4/16000000 = 100 us                // Timer divider = 4
        #define TIMER_DIV4_VALUE_200us            65536-800        //800*4/16000000 = 200 us                // Timer divider = 4
        #define TIMER_DIV4_VALUE_500us            65536-2000    //2000*4/16000000 = 500 us            // Timer divider = 4
    #define TIMER_DIV4_VALUE_1ms                65536-4000    //4000*4/16000000 = 1 mS,           // Timer divider = 4
        #define TIMER_DIV16_VALUE_10ms            65536-10000    //10000*16/16000000 = 10 ms            // Timer    divider = 16
        #define TIMER_DIV64_VALUE_30ms            65536-7500    //7500*64/16000000 = 30 ms            // Timer divider = 64
        #define    TIMER_DIV128_VALUE_100ms        65536-12500    //12500*128/16000000 = 100 ms        // Timer divider = 128
        #define    TIMER_DIV128_VALUE_200ms        65536-25000    //25000*128/16000000 = 200 ms        // Timer divider = 128
        #define TIMER_DIV256_VALUE_500ms        65536-31250    //31250*256/16000000 = 500 ms     // Timer divider = 256
        #define    TIMER_DIV512_VALUE_1s                65536-31250    //31250*512/16000000 = 1 s.          // Timer Divider = 512
#endif

后记:原因找到了,请看下图 注意CKON的默认值

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值