这样喂狗狗也会跑飞,高人近来看看,会养狗的

楼主
这样喂狗狗也会跑飞,高人近来看看,会养狗的
#include "msp430x14x.h"
void main()
{
      int i;
      WDTCTL=WDTPW+WDTHOLD;
      BCSCTL1&=~XT2OFF;
      do
      {
            IFG1&=~OFIFG;
            for(i=0XFF;i>0;i--);
      }
      while((IFG1&OFIFG)!=0);
      BCSCTL2|=SELM1;
      BCSCTL2|=SELS;
      WDTCTL = WDT_ARST_1000;                      //开狗
      while(1)
      {
            WDTCTL = WDTPW + WDTCNTCL;             //喂狗
            unsigned int i,j;
            for(i=0;i<5;i++)
                    for(j=0;j<2000;j++);
      }
}

我打开的8M时钟,但是发现只要有超过几千个的软件延迟,系统就自动复位了.我开的可是1秒的看门狗啊,高手指点下为什么啊,
1楼
你可以看看以下这个关于“训狗心法”
【MC430F14入门例程】:WDT看门狗
http://www.microcontrol.cn/mcbbs/Announce/Announce.asp?BoardID=112&ID=8211&q=1&r=4116
2楼
DC的喂狗心得好象没有涉及到我说的情况啊,也就是我设的是1000ms的看门狗,专门测试过,一秒自动复位,没有任何问题,但是只要有超过5ms的时间不喂,它就自动复位,而不是理论的一秒,只能在程序里遍地撒狗粮才可以不跑飞,ms秒级的延迟必须在2000延迟内喂狗,否则用超过5ms的延迟就会导致复位.用几个149测试过都这样
3楼
  你延时是不是已超过5ms,有精确计算过“for(i=0;i<5;i++) for(j=0;j<2000;j++);”有多长时间吗。
  看来是延时过长没有喂狗的原因吧。
4楼
他是把狗喂错了,WDTCTL = WDT_ARST_1000; 改成这样试试WDTCTL |= WDT_ARST_1000;
5楼
楼上说得对
但是错是在WDTCTL = WDTPW + WDTCNTCL这句,应改为WDTCTL |= WDTPW + WDTCNTCL;
前者将SSEL和IS0、1都赋0,因此时钟选为了smclk,8m,此时狗的定时时间应该在4ms左右
剩下就要看for循环的具体时间了,估计是大于4ms了

电脑版 Page created in 0.0625 seconds width 2 queries.