下面程序,由于是连续计数模式,计数器会从0到FFFF重复计数,但是又未设置TA0CCRn的值,所以只在0FFFFh的时候才产生TAIFG这个中断,这个中断的查询在TAxIV=14的位置
【注意】:这是多源中断
#include<msp430f6638.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P4DIR |= BIT1; // P4.1 output
TA0CTL = TASSEL__ACLK + MC__CONTINUOUS + TACLR + TAIE; // 时钟源为ACLK,连续计数模式,清空计数器,是能中断
__bis_SR_register(LPM3_bits + GIE);
//【区分】:__bic_SR_register()这个函数是和上面的作用相反,
//比如__bic_SR_register(LPM0_bits + GIE);是关闭低功耗并且关闭总中断
_NOP();
}
#pragma vector=TIMER0_A1_VECTOR // 这个中断向量和上面的程序不一样
__interrupt void TIMER0_A1_ISR(void)
{
switch(__even_in_range(TA0IV,14))// __even_in_range()本征函数,用于多源中断的查询。
{
case 0: break; // No interrupt
case 2: break; // CCR1 not used
case 4: break; // CCR2 not used
case 6: break; // reserved
case 8: break; // reserved
case 10: break; // reserved
case 12: break; // reserved
case 14: P4OUT ^= BIT1; // TAIFG
break;
default: break;
}
}
|