Dspic单片机定时器的定时计算方法

首先,本文以mircochip公司的dspic33f系列介绍定时器的计算方法。

该定时不同于其他单片机的定时算法,但是思想差不多,都是定时器先加载初始计数值,然后进行计数,最后定时器产生中断,然后重新加载初值,进行计数,这样反复进行就是定时器的工作原理。下面附一段代码以便于理解:

//采用内部时钟作为定时器时钟
void timer2()
{
     //Timer 2 中断设置
         IFS0bits.T2IF = 0;         // Clear Timer1 Interrupt Flag
         IEC0bits.T2IE = 1;         // Enable Timer1 interrupt
         IPC1bits.T2IP = 2;         // Set Timer 2 Interrupt Priority Level 此程序可以不设定定时器2优先级,默认为自然优先级

         //TMR2设置,延时400ms
         TMR2 = 0;// Resetting TIMER
         T2CONbits.TGATE = 0;  //disable gated timer mode
         T2CON = 0x0000;            // reset timer configuration
         PR2 = 624999;                       //load the period value
         T2CONbits.TCS = 0;     //内部时钟
         T2CONbits.TCKPS = 3;    //分频比选择为1:256(此处需要查看相应的数据手册,在文章后面贴出)
         T2CONbits.TON = 1;         // Enable Timer2 定时器开启了就一直在工作,除了休眠和空闲模式
}

代码中选取定时器2作为定时对象,先设定timer2的中断,然后进行定时。

定时公式如下:

定时时间(单位:微秒/us)= (PR2+1 )*Tcy(单位:微秒/us)*K

其中定时时间和Tcy单位都是统一的,Tcy是指令周期,指令周期等于系统时钟除以2,K是定时器分频比,PR2是定时器的计数值,PR2是16位寄存器,最大的计数值是65536。

假设系统时钟是80Mhz,那么指令周期Tcy是40Mhz,如果我要设定定时时间是400ms。那么进行以下公式计算:

400*1000 = 65536*1/40*K

K = 244.140625

也就是说,即使我计数值取到最大,K至少需要245(取整)的分频比,因为分频比只有1,8,64,256。所以选择256。

400*1000 = (PR2+1)*1/40*256

PR2 = 62499

此时就完成了定时400ms的需求。

下面是数据手册部分

 如有缺漏或者错误之处,还望指出,我会及时更正修改!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清漠233

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值