求大神指导看门狗使用

2019-03-24 09:17发布

现在想将程序加入看门狗功能,搞了半天也不明白该如何使用,小弟不才,希望能够获得大家指点
#include "msp430x14x.h"
#define UINT8 unsigned char
#define UINT16 unsigned int
#define False 0
#define True 1

UINT16 Timer_Counter = 0;
UINT8  Timer_Flag = False;
UINT8  Light_Start = False;
UINT8  Fun_Choose = False;

/***********时钟初始化函数***********/
void clk_init()
{
  UINT8 i;
  BCSCTL1&=~XT2OFF; //打开高频晶体振荡器
  BCSCTL2|=SELM_2+SELS; //MCLK和SMCLK都选择XT2,8MHZ
    do
    {
      IFG1&=~OFIFG;   //清除振荡器失效标志
      for(i=0xff;i>0;i--);  //延迟待稳定
      
    }
   while((IFG1&OFIFG)!=0);
}   
   
void GPIO_Init()
{
  P1DIR &= ~BIT5;
  P1OUT |= 0xFF;
  P2DIR |= BIT6;
  P2OUT &= 0x00;
  
  P5DIR |= BIT4;
  P5OUT &= ~BIT4;  
}
/*****************TimerA_Init*******************/
void TimerA_Init()
{
  TACTL|=TASSEL_2+MC0+TACLR+TAIE+ID_3;
  CCTL0 = CCIE;
  TACCR0=29999;
}
//******************************************************
//352微秒延时程序
void delay_352us(UINT16 i)//352us延时程序
{
  UINT8 j;
  while(i--)
  {
   for(j=0;j<255;j++)
   {  
    _NOP();
    _NOP();
    _NOP();
    _NOP();   
    }
  }
}

/************************************************/
/*                   主函数                     */
/************************************************/
void main(void)

{

//  WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer

    WDTCTL = WDTPW + WDTCNTCL;

    P5DIR |= BIT4;                            // Set P5.4 to output direction
    P5OUT ^= BIT4;
    clk_init();
  
    GPIO_Init();
   
    TimerA_Init();

    _EINT();
    LPM0;                       
    WDTCTL = WDTPW + WDTCNTCL;



}

/************定时器A中断函数******************/
#pragma vector=TIMERA0_VECTOR
__interrupt void timer0()
{
   switch(TAIV)
   {
     case TAIV_TACCR1:break;
     case TAIV_TACCR2:break;
     case TAIV_TAIFG:
     {
       Timer_Counter++;
       if(((P1IN & BIT5)>>5) == 1)
       {
           Fun_Choose = False;  
       }
       else
       {         
           Fun_Choose = True;
       }
      
      
       if(Fun_Choose == True)
       {
         if(Timer_Counter >= 11)
            
         {
         
            Timer_Flag = 0;
           
         }
         if(Timer_Counter >= 33)
            {
              Timer_Counter = 0;
              Timer_Flag = 1;
            }  
         if(Timer_Flag == True)
         {
           P2OUT |= BIT6;
           P5OUT |= BIT4;
         }
         else
         {
           P2OUT &= ~BIT6;
           P5OUT &= ~BIT4;
         }
       }
       else
       {
         P5OUT |= BIT4;
         P2OUT |= BIT6;
       }   
     }
     break;
   }
}



此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
wateras1
1楼-- · 2019-03-24 15:41
 精彩回答 2  元偷偷看……
ywlzh
2楼-- · 2019-03-24 21:19
< :TI_MSP430_内容页_SA7 --> 看门狗,通常是为了怕程序跑飞从而就不会进看门狗的中断,没有喂狗这个动作,程序就会复位。

看门狗也可以作为定时器来使用,喂狗后,再用来查询状态。
1111A
3楼-- · 2019-03-25 02:48
ywlzh 发表于 2016-6-14 13:06
看门狗,通常是为了怕程序跑飞从而就不会进看门狗的中断,没有喂狗这个动作,程序就会复位。

看门狗也可 ...

像在我的这个程序里,就是还需要添加喂狗这个操作,添加一个喂狗的中断源么
1111A
4楼-- · 2019-03-25 04:59
 精彩回答 2  元偷偷看……
ienglgge
5楼-- · 2019-03-25 06:10
先初始化看门狗,再使能看门狗。隔一段时间喂一次狗,时间间隔要合适。别让看门狗的计数器溢出。如果停止喂狗。看门狗就会重启系统。
1111A
6楼-- · 2019-03-25 10:07
ienglgge 发表于 2016-6-15 01:39
先初始化看门狗,再使能看门狗。隔一段时间喂一次狗,时间间隔要合适。别让看门狗的计数器溢出。如果停止喂 ...

就是上边这个程序,430输出总是跑飞,用了内部看门狗,效果也不是很理想,现在这位这件事发愁,不知道到底为什么会跑飞,(430实现的功能 就是闪烁输出,在开启电源后,开启闪烁,然后重复启停电源,然后就没有输出了,还没有能够理解,还望能够指点下)

一周热门 更多>

相关问题

    相关文章