TI中文支持网
TI专业的中文技术问题搜集分享网站

急!!!开不启定时器

    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,貌似定时器启动不了,是什么原因?????

Lina Lian:

tesla nigus,

从你的描述看,好像是因为while(Doucontrol_Flag)的循环里增加了内容或者清看门狗,导致定时器启动不了。这里可能需要你做更多的实验,来定位一下问题。首先排除看门狗的影响—禁止看门狗,看看while(Doucontrol_Flag)中增加内容,timer可否正常运行。另外,你使用的是哪个芯片啊?你可以看看Errata上有没有相关问题。

tesla nigus:

回复 Lina Lian:

我使用的是MSP430G2553,用的是时钟TA1。

Lina Lian:

回复 tesla nigus:

我查看了Errata, Timer_A和WDT不存在你所描述的问题。先逐步定位问题吧,排除看门狗的影响—禁止看门狗,看看while(Doucontrol_Flag)中增加内容,timer可否正常运行。

tesla nigus:

回复 Lina Lian:

我又重新调试了一边,发现是开启了定时器,但是进不了中断函数。

tesla nigus:

回复 Lina Lian:

我的定时器进不了中断,定时器的TA1CCTL0是1049,发现CCIE为置1使能了,中断标志位CCIFG也置1了,但是就是进不了中断,用的是MSP430g2553单片机

Lina Lian:

回复 tesla nigus:

tesla nigus,请问是在while(Doucontrol_Flag)中增加内容后,才发生CCIFG置1, GIE bit 也为1,但是就是不进TIMER1_A0_VECTOR中断的现象吗? 不添加的时候,timer中断是否可以正常进入?请问不开看门狗是否还发生同样的情况?麻烦你详细测试一下并描述。我们需要定位一下问题,看看究竟是什么引起这种情况的发生。

Shi JianHua:

告诉你个简单的解决问题的办法,先用ti的例程基本不动,测试程序的运行情况,然后再改。多用仿真其仿真运行,都很快找的问踢的,你找不到问题就是仿真运行不熟练。

赞(0)
未经允许不得转载:TI中文支持网 » 急!!!开不启定时器
分享到: 更多 (0)