打印

看门狗使用的问题

[复制链接]
489|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Varus|  楼主 | 2017-1-26 09:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在想将程序加入看门狗功能,搞了半天也不明白该如何使用,小弟不才,希望能够获得大家指点
#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;
   }
}

相关帖子

沙发
Snow7| | 2017-1-26 09:53 | 只看该作者
代码while(1)
是不是缺少{}

使用特权

评论回复
板凳
android2| | 2017-1-26 10:11 | 只看该作者
看门狗,通常是为了怕程序跑飞从而就不会进看门狗的中断,没有喂狗这个动作,程序就会复位。

使用特权

评论回复
地板
拉克丝| | 2017-1-26 10:23 | 只看该作者
看门狗也可以作为定时器来使用,喂狗后,再用来查询状态。

使用特权

评论回复
5
309030| | 2017-1-26 10:46 | 只看该作者
先初始化看门狗,再使能看门狗。隔一段时间喂一次狗,时间间隔要合适。别让看门狗的计数器溢出。

使用特权

评论回复
6
迪卡| | 2017-1-26 10:57 | 只看该作者
如果停止喂狗。看门狗就会重启系统。

使用特权

评论回复
7
米尔豪斯| | 2017-1-26 11:08 | 只看该作者
喂狗的动作一定要有,不然,看门狗计数器就溢出了,但这不是中断源。

使用特权

评论回复
8
lefeng| | 2017-1-26 11:24 | 只看该作者
while(1)循环都没有,程序不跑飞才怪,和看门狗没有关系

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

155

主题

703

帖子

1

粉丝