NUVOTON新唐单片机使用总结

1 定时器

1.1 定时器中断计时的计算

1.1.1 定时器3的中断计算

打开官方板级支持包(BSP),找到 time.c 文件,以定时器3延时100ms为例,学习如何计算 RH3RL3 的计算。注意系统时钟为16MHz
以下定义在 Function_Define_MS51_16K.h 文件中

//系统时钟为16MHz
#define TIMER_DIV128_VALUE_100ms     65536-12969  //12969*128/16600000 = 100 ms    // Timer divider = 128
//16 --> 8 x 2
#define HIBYTE(v1)              ((UINT8)((v1)>>8))                      //v1 is UINT16
#define LOBYTE(v1)              ((UINT8)((v1)&0xFF))

以下函数在 time.c 文件中


void Timer3_Delay100ms(UINT32 u32CNT)
{
    T3CON = 0x07;                               //Timer3 Clock = Fsys/128
    set_T3CON_TR3;                                    //Trigger Timer3
    while (u32CNT != 0)
    {
        RL3 = LOBYTE(TIMER_DIV128_VALUE_100ms); //Find  define in "Function_define.h" "TIMER VALUE"
        RH3 = HIBYTE(TIMER_DIV128_VALUE_100ms);
        while ((T3CON&SET_BIT4) != SET_BIT4);    //Check Timer3 Time-Out Flag
        clr_T3CON_TF3;
        u32CNT --;
    }
    clr_T3CON_TR3;                                    //Stop Timer3
}

计算如下:
已知条件 Fsys = 16MHz,分频系数为128,中断周期定为0.1s,Hz对应s为单位。
计算所需计数次数x:
128x / 16MHz = 0.1 ,x = 12500
定时器3为向上计数模式,即在RH3和RL3 的基数上向上计数,当计数到65536则产生中断。所以RH3和RL3的基数为 y = 65536 - 12500 = 53036(0xCF2C),即 RH3 = 0xCF,RL3 = 0x2C。
验证:
Fsys = 16MHz,分频系数为 128,则分频后定时器3的时钟为 16MHz / 128 = 125000
所以 1/125000 * 12500 = 0.1s

举例:如果Fsys = 24Mhz ,分频系数为128,中断周期定为0.1s
128x / 24MHz = 0.1 , x = 18750
65536 - 18750 = 46786(0xB6C2) 即 RH3 = 0xB6,RL3 = 0xC2。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值