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.

关于定时器通道的问题

Other Parts Discussed in Thread: MSP430G2553

我使用的是MSP430G2553,我希望使用定时器TimerA0通道1的中断,按照用户手册所说,为了设定定时时间,应该设置TACCR1,并在中断中根据TAIV来判断是否是TACCR1导致的中断。但是我在实验过程中发现,设置TACCR1并不能进入TIMER0_A1_VECTOR对应的中断,而设置TACCR0可以进入中断,而且这时竟然可以出现TAIV = 0x02的情况,即手册上所说的TACCR1导致的中断。

#include <msp430.h> 

/*
 * main.c
 */
int main(void) {
    WDTCTL = WDTPW | WDTHOLD;	// Stop watchdog timer
    //========设置系统时钟==========
	BCSCTL1 = CALBC1_1MHZ;
	DCOCTL = CALDCO_1MHZ;
	BCSCTL2 |=LFXT1S1;
    //========设置定时器==========
    TA0CTL |= MC_1 + ID_0 + TASSEL_2;
    //MC_1 : 增计数模式
    //ID_0 :输入1分频
    //TASSEL_2 : 输入时钟为SCLK
    TA0CCTL1|= CCIE;//使能比较中断
 //   TA0IV = 0x02;
    	TA0CCR0 = 10000;//设置比较值

//    TA0CCR1 = 10000;//设置比较值
	_enable_interrupts();
	while(1);
}


//中断服务程序
#pragma vector=TIMER0_A1_VECTOR//固定的格式
__interrupt void Timer_A (void) //定时器A的CC0中断处理程序 必须是没有返回值的
{
	static unsigned int timer = 0;

	switch(TA0IV){
	case 0x02:
		if(timer++ > 100){
			timer = 0;
			P1DIR |= BIT0;
			P1OUT ^= BIT0;
		} break;
	default:
		_nop();
	}
	_nop();
}