This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

急!!!开不启定时器

Other Parts Discussed in Thread: MSP430G2553

    while(1)
    {  
        Doucon_Long_Press();                                      如果有长时间按按钮的话就标志Doucontrol_Flag=1
        WDTCTL = WDTPW+WDTCNTCL+(WDTCTL&0x00ff);
        if(Doucontrol_Flag == 1)                                //如果发送了双控主开关触摸标志
        {  
           testtest =10;
            P2OUT          &= ~BUZ;                             //蜂鸣器响一声
            delay_ms(1);
            P2OUT          |=  BUZ;
            WDTCTL = WDTPW+WDTCNTCL+(WDTCTL&0x00ff);
            Turn_On_TA1();                                                  //开启定时器,定时6S         
            while(Doucontrol_Flag)
         {
               WDTCTL = WDTPW+WDTCNTCL+(WDTCTL&0x00ff);              //清看门狗              
//                if((ReceiveValue == 0xa1)||(ReceiveValue == 0xa0)||(ReceiveValue == 0xb1)||(ReceiveValue == 0xb0)||(ReceiveValue == 0xc1)||(ReceiveValue == 0xc0))
//                {
//                    P2OUT          &= ~BUZ;                             //蜂鸣器响一声,代表双控连接上
//                    delay_ms(1);
//                    P2OUT          |=  BUZ;
//                    ReceiveValue    = 0;
//                    Doucontrol_Flag = 0;   
//                    Bein_Host_Doucontrol = 1;                        //可以进入双控模式的标志位
//                }
          }

void Init_TA1(void)
{
    TA1CCR0  = 60000;                                             //0.6s
    TA1CCTL0 |= CCIE;
    TA1CCTL0 &= ~(CAP+CCIFG);
}

void Turn_On_TA1(void)
{
    TA1CTL |= TASSEL_2 + MC_1;
    //_BIS_SR(GIE);
     __bis_SR_register(GIE);
}

#pragma vector=TIMER1_A0_VECTOR
__interrupt void Timer1_A0 (void)
{
    static int countnum = 0;
//    TA1CCTL0      &= ~CCIFG;
    countnum++;

我的主体函数基本上就这样,有一个很严重的问题就是,定时器开启不了。

我在测试的时候,如果把while(Doucontrol_Flag)注释掉了,那么定时器是可以开启的,可以看到countnum在变化。

如果我加上while(Doucontrol_Flag),但是里面什么都不做,可以看到可以开启定时器countnum在变化。但是程序会复位,因为开启了开门狗了

如果我加上了while(Doucontrol_Flag),在循环里再加上 WDTCTL = WDTPW+WDTCNTCL+(WDTCTL&0x00ff);   喂看门狗或者其他的程序countnum就一直是0,貌似定时器启动不了,是什么原因?????