sxbo88 发表于 2013-12-26 16:51:11

avr单片机软件看门狗复位不成功

使用ATMEGA88单片机 晶振3.6864MHZ
看门狗程序:
初始化程序:
void watchdog_init(void)
{   
asm("wdr");
WDTCSR = (1 << WDCE) | (1 << WDE);
WDTCSR = (1 << WDCE) | (1 << WDE) | (1 << WDP2) | (1 << WDP1) | (1 << WDP0);
}
喂狗指令:asm("wdr");
在系统晶振为晶振3.6864MHZ下,单片机能够正常复位,运行的很好

问题是:
当我使用系统的8分分频后,即系统晶振为3.6864MHZ的八分之一后,单片机能够上电启动,但遇到while(1);死循环后,
单片机就死机,无法复位。
现向各位请教一下原因,谢谢!

xiaodao35 发表于 2013-12-26 17:17:53

看看复位周期和循环时间!

sxbo88 发表于 2013-12-26 17:30:29

复位周期改大改小都没有用处,还是死机

z350126876 发表于 2014-1-16 17:16:36

程序                  

alias 发表于 2014-1-16 18:16:10

Mega88 的文档是这样的,你在第二次改变 WATCHDOG 时限指令中多用了(1<<WDCE)。


/*
void watchdog_init(void)
{   
asm("wdr");
WDTCSR = (1 << WDCE) | (1 << WDE);
WDTCSR = (1 << WDCE) | (1 << WDE) | (1 << WDP2) | (1 << WDP1) | (1 << WDP0);
}
*/

void watchdog_init(void)
{   
asm("wdr");
WDTCSR = (1 << WDCE) | (1 << WDE);
WDTCSR =(1 << WDE) | (1 << WDP2) | (1 << WDP1) | (1 << WDP0);
}

页: [1]
查看完整版本: avr单片机软件看门狗复位不成功