[资料分享] msp430f149编程之中断处理函数

灞波儿奔   2019-10-8 15:46 楼主

//本平台 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 ++;
    }
    
    

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复