我使用的是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();
- }
复制代码
此帖出自
小平头技术问答
一周热门 更多>