atmega644 看门狗疯狂重启!!!一条疯狗啊!
不说,直接上我的代码:void WDT_Init(void) // 看门狗初始化
{
//WDTCSR = 0x00; // 关闭看门狗
//CLR_BIT(MCUSR, WDRF); // 看门狗复位标志清零
asm("wdr"); // 复位WDT(喂狗)
WDTCSR = ( (1 << WDCE) | (1 << WDE) ); // 使能看门狗修改
WDTCSR = (1 << WDE) | (1 << WDP2) | (1 << WDP1); // 使能看门狗, 溢出时间~1s(Vcc = 5V)
}
然后在主程序主循环里面,我会加上 asm("wdr"); // 复位WDT(喂狗)
然后发现上电就疯狂重启,狗狗疯了!
谁能告诉我这是为什么啊?
我用的是atmega644芯片! 我要疯了啊,644芯片这么恶心啊?我以前用ATmega64就不会这样。
我也直接上64的看门狗程序,在64芯片上是正常能跑的,所以我拷贝到644了,结果居然疯狂饿死狗?
void WDT_Init(void)
{
WDR();//复位WDT(喂狗)
WDTCR = (1 << WDCE) | (1 << WDE);//使能看门狗修改
WDTCR = 0x0F;//使能看门狗,溢出时间~1.8s(Vcc = 5V)
}
主程序主循环有 WDR();//复位WDT(喂狗)
楼主问题解决了吗 喂到狗了吗?喂狗指令对不对 以前我好像也遇到644看门狗问题,但不记得是不是和你同样的情况,后来我给timeout加上中断好像就好了,时间长了记不住了。你试看看
ISR(WDT_vect)
{
//Watchdog timeout
wdt_disable();
wdt_reset();
}
void WDT_Init(void)
{
cli();
wdt_reset();
wdt_enable(WDTO_2S); //watch dog set to 2S
sbi(WDTCSR,WDIE); //enalbe WDT ISR
sei();
} void watchdog_init(void)
{
//__disable_interrupt();
CLI();
//__watchdog_reset();
WDR();
/* Start timedequence */
WDTCSR |= (1<<WDCE) | (1<<WDE);
/* Set new prescaler(time-out) value = 256K cycles (2 s) */
WDTCSR= (1<<WDE) | (1<<WDP2) | (1<<WDP1) | (1<<WDP0);
//__enable_interrupt();
SEI();
}
LZ你解决了没有,我在MEGA48也碰到这个问题,发现是那狗定时设置不起作用要很短时间就要喂一下要不然就重启,不知道哪位兄弟找到解决方法??http://www.amobbs.com/thread-5545987-1-1.html这个是我遇到问题的程序,在MEGA8就没有问题非常奇怪 是不是熔丝位没有设置对呢
页:
[1]