This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

msp430 Timer_A 计数模式

Other Parts Discussed in Thread: MSP430G2452

#include <msp430g2452.h>

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P1DIR |= 0x01;                            // P1.0 output
  CCTL0 = CCIE;                             // CCR0 interrupt enabled
  CCR0 = 50000;
  TACTL = TASSEL_2 + MC_1;                  // SMCLK, upmode

  _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt
}

// Timer A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
  P1OUT ^= 0x01;                            // Toggle P1.0
}

********************************************************************************************************************

#include  <msp430g2452.h>

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P1DIR |= 0x01;                            // P1.0 output
  CCTL1 = CCIE;                             // CCR1 interrupt enabled
  CCR1 = 50000;
  TACTL = TASSEL_2 + MC_2;                  // SMCLK, Contmode

  _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt
}

// Timer_A3 Interrupt Vector (TA0IV) handler
#pragma vector=TIMER0_A1_VECTOR
__interrupt void Timer_A(void)
{
  switch( TA0IV )
  {
  case  2:                                  // CCR1
    {
    P1OUT ^= 0x01;                          // Toggle P1.0
    CCR1 += 50000;                          // Add Offset to CCR1
    }
           break;
  case  4: break;                           // CCR2 not used
  case 10: break;                           // overflow not used
 }
}
我想问一下,这两个程序分别用的是TACCR0和TACCR1计数器哦

为什么一个用增计数模式,一个用连续模式呢,他们的计数值都是50000啊

这两个程序中断发生的时间上区别吧

求指教

  • 你可以看一下他们的中断程序里分别做了什么。建议你去看一下user guider里的timer那个模块,里面有详细解释。

  • MC_1 是连续模式, MC_2 是递增模式。

    upmode 递增到CCR0值 后重新计数。频率为f = ftimer / 5000

    连续模式 是十六位计数器溢出后重新计数。频率为f = ftimer / 2^16

    具体请参考器件对应user guide TIMER_A部分章节。

x 出现错误。请重试或与管理员联系。