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();
} |