zzq963254 发表于 2013-7-14 17:32:17

关于MSP430连续计数模式

#include <msp430g2553.h>

void main(void)
{
WDTCTL = WDTPW + WDTHOLD;               // 关闭看门狗
P1DIR |= 0x01;                            // P1.0方向为输出
TACCTL0 = CCIE;                           // 允许TACCR0中断
TACCR0 = 20;                           //捕获比较寄存器中的值   
TACTL = TASSEL_2 + MC_2;                  // 计数器时钟源为SMCLK,连续计数模式,计数至0xffff
P1OUT |=0x01;
_BIS_SR(LPM0_bits + GIE);               //LPM0,开总中断
while(1);
}

// Timer A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
P1OUT ^= 0x01;                            // Toggle P1.0
TACCR0 +=20;                            // Add Offset to CCR0
}


当TACCR0的值为10的时候频率为8Hz,当TACCR0的值为20的时候频率却为27KHz,设为50000的时候频率为10Hz。为什么呀?
我对程序的理解是:由于工作在连续模式,所以TAR从0开始计数,计数到10的时候触发中断,P1口状态改变,且此时TACCR0的值变为40,然后当TAR计数到40的时候,触发中断灯的状态又发生改变,TACCR0的值变成60.依次往上加。直到65536之后TAR的值变成0,重新开始。这样理解有错吗?并且TACCR0在超过其数值范围之后是不是也会从0开始?

皮爱了西 发表于 2013-7-17 15:19:24

我的理解应该是,周期=时钟频率/taccr0/2

dianyuan 发表于 2013-7-17 16:23:37

这个进中断出中断都要时间的,加10时肯定来不及了
页: [1]
查看完整版本: 关于MSP430连续计数模式