//本平台 msp430f149
#include<msp430.h>
void select_xt2(void){
unsigned char i;
/*------选择系统主时钟为8MHz-------*/
BCSCTL1 &= ~XT2OFF; //打开XT2高频晶体振荡噿
do{
IFG1 &= ~OFIFG; //清除晶振失败标志
for (i = 0xFF; i > 0; i--); //等待8MHz晶体起振
}while ((IFG1 & OFIFG)); //晶振失效标志仍然存在_
BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK选择高频晶振
}
void main(){
WDTCTL = WDTPW + WDTHOLD;
select_xt2();
P2DIR = 0x80;
P2OUT = 0xff
CCTL1 = CCIE; // CCR1 中断使能
CCR1 = 10000;
TACTL = TASSEL_2 + MC_2 + ID_3; // SMCLK = 1MHz, 连续计数模式
_EINT(); //打开全局中断
while(1){
if(count == 50){
count = 0;
P2OUT ^= BIT7; //led灯每0.5s变化一次
}
}
}
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A1(void)
{
CCR1 += 10000; //
count ++;
}
写了一段这样的代码,本想用定时器a 每0.5s控制led灯状态,发现程序运行不符合预期效果,仔细检验发现根本就没有进中断,count 值不变。先贴上可用的代码,再仔细分析
修改后的中断处理函数:
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A1(void)
{
switch(TAIV){
case 2:
CCR1 += 10000; //
count ++;
}