问定时器增计数模式和连续计数模式的区别

2019-08-04 17:47发布

请问:定时器中增计数模式和连续计数模式有什么区别吗?难道就是增计数模式能计数到CCR0,而连续计数模式只能计数到65536?如果是这样,那在连续计数模式下就不用设置CCR0的值了,但我看到例程中,仍然设置了CCR0,不解,请指教。

#include  <msp430x14x.h>
void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P3DIR |= BIT4;                            // P3.4 output
  CCTL0 = CCIE;                             // CCR0 interrupt enabled
  CCR0 = 50000;
  TACTL = TASSEL_2 + MC_2;                  // SMCLK, contmode
  _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt
}
// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
  P3OUT ^= BIT4;                            // Toggle P3.4
  CCR0 += 50000;                            // Add Offset to CCR0
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
18条回答
(⊙o⊙)你
2019-08-06 10:29
本帖最后由 (⊙o⊙)你 于 2014-3-18 18:16 编辑
wuhao1061 发表于 2013-11-21 23:16
CCR0 += 50000;  这句程序是什么意思?CCRO的最大值不是65536么,怎么能不断地增加?还是每次进入定时中 ...


我已经明白了。

增计数模式只能设置一个CCR0(小于65535)来产生一个中断/事件。
连续模式可以设置CCR0,CCR1(小于65535)等来产生多个中断,这样就可以产生时间间隔(占空比)不同的方波了。

至于+=50000的问题的解释:当进入中断后,CCR0 +=50000,这时CCR0=10 0000,超过了16位最大值65535了,这时硬件会把多出的高16位截掉,剩下低16位,即10 0000&0x0000FFFF=0x86A0=34464,即下一次定时器计数值TAR要和34464比较。计数器TAR也是16位的,当记到65535再加1后他就会自动变为0,直到记到34464,和CCR0值一样后又发生一次中断,这样的话定时器的中断时间间隔永远保持在了50000。

如果在中断中不 +=50000的话,那么以后的中断间隔就是65535了。

如果直接是 =50000的话,那么以后的中断间隔就是50000+(65535-50000)=65535,和上面效果一样了。

一周热门 更多>