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);死循环后,
单片机就死机,无法复位。
现向各位请教一下原因,谢谢!
看看复位周期和循环时间! 复位周期改大改小都没有用处,还是死机 程序 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]