程序如下:
#include <msp430x14x.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1SEL |= 0x0E; // P1.1 - P1.4 option select
P1DIR |= 0x0F; // P1.0 - P1.4 outputs
CCTL0 = OUTMOD_4 + CCIE; // CCR0 toggle, interrupt enabled
CCTL1 = OUTMOD_4 + CCIE; // CCR1 toggle, interrupt enabled
CCTL2 = OUTMOD_4 + CCIE; // CCR2 toggle, interrupt enabled
TACTL = TASSEL_2 + MC_2 + TAIE; // SMCLK, Contmode, int enabled
_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
}
// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0 (void)
{
CCR0 += 200; // Add Offset to CCR0
}
// Timer_A3 Interrupt Vector (TAIV) handler
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A1(void)
{
switch( TAIV )
{
case 2: CCR1 += 1000; // Add Offset to CCR1
break;
case 4: CCR2 += 10000; // Add Offset to CCR2
break;
case 10: P1OUT ^= 0x01; // Timer_A3 overflow
break;
}
}
想问的是P1.1 P1.2 P1.3为什么会分别输出2000Hz,400Hz,40Hz的方波?(这个希望有非常详细解答)
还有在定时器中断服务函数中为什么要给CCRx增加偏移量,这样的话CCRx的值就变了(这个我用Jtag调试过的),这样做有什么用处呢?
这个程序的问题困惑了我很久了,希望各位大神能够回答我的问题,小弟万分感激!!!