MSP430讨论区
返回
登录/注册
这样喂狗狗也会跑飞,高人近来看看,会养狗的
楼主
friendljy 于 2007-01-25 09:40:08
这样喂狗狗也会跑飞,高人近来看看,会养狗的
#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楼
DC 于 2007-01-25 10:11:29
你可以看看以下这个关于“训狗心法”
【MC430F14入门例程】:WDT看门狗
http://www.microcontrol.cn/mcbbs/Announce/Announce.asp?BoardID=112&ID=8211&q=1&r=4116
回复
2楼
friendljy 于 2007-01-26 10:05:10
DC的喂狗心得好象没有涉及到我说的情况啊,也就是我设的是1000ms的看门狗,专门测试过,一秒自动复位,没有任何问题,但是只要有超过5ms的时间不喂,它就自动复位,而不是理论的一秒,只能在程序里遍地撒狗粮才可以不跑飞,ms秒级的延迟必须在2000延迟内喂狗,否则用超过5ms的延迟就会导致复位.用几个149测试过都这样
回复
3楼
DC 于 2007-01-26 10:59:37
你延时是不是已超过5ms,有精确计算过“for(i=0;i<5;i++) for(j=0;j<2000;j++);”有多长时间吗。
看来是延时过长没有喂狗的原因吧。
回复
4楼
01d 于 2007-06-04 21:21:00
他是把狗喂错了,WDTCTL = WDT_ARST_1000; 改成这样试试WDTCTL |= WDT_ARST_1000;
回复
5楼
tony_1944 于 2007-06-05 08:59:30
楼上说得对
但是错是在WDTCTL = WDTPW + WDTCNTCL这句,应改为WDTCTL |= WDTPW + WDTCNTCL;
前者将SSEL和IS0、1都赋0,因此时钟选为了smclk,8m,此时狗的定时时间应该在4ms左右
剩下就要看for循环的具体时间了,估计是大于4ms了
回复
1
2
电脑版
Page created in 0.0625 seconds width 2 queries.