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