请问:定时器中增计数模式和连续计数模式有什么区别吗?难道就是增计数模式能计数到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
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我已经明白了。
增计数模式只能设置一个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,和上面效果一样了。
刚才我在msp430f5438A上写程序跑了一下,验证了我上面说的是对的。效果非常的好。
连续模式,除了计数到设置的CCRO,CCR1时产生中断,在计数到65535时也会产生中断?
一周热门 更多>