geniusly111 发表于 2012-8-8 16:25:16

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芯片!

geniusly111 发表于 2012-8-8 16:27:19

我要疯了啊,644芯片这么恶心啊?我以前用ATmega64就不会这样。

我也直接上64的看门狗程序,在64芯片上是正常能跑的,所以我拷贝到644了,结果居然疯狂饿死狗?

void WDT_Init(void)
{
        WDR();//复位WDT(喂狗)
        WDTCR = (1 << WDCE) | (1 << WDE);//使能看门狗修改
        WDTCR = 0x0F;//使能看门狗,溢出时间~1.8s(Vcc = 5V)
}

主程序主循环有                WDR();//复位WDT(喂狗)

ipoqing 发表于 2013-3-6 08:58:04

楼主问题解决了吗

StoneSun 发表于 2013-3-6 09:12:18

喂到狗了吗?喂狗指令对不对

crazyroc 发表于 2013-3-8 22:06:41

以前我好像也遇到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();
}

cloudou14 发表于 2013-6-5 22:43:37

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();
}

2408308628 发表于 2013-8-9 23:49:42

LZ你解决了没有,我在MEGA48也碰到这个问题,发现是那狗定时设置不起作用要很短时间就要喂一下要不然就重启,不知道哪位兄弟找到解决方法??http://www.amobbs.com/thread-5545987-1-1.html这个是我遇到问题的程序,在MEGA8就没有问题非常奇怪

杨遥 发表于 2014-9-10 16:09:51

是不是熔丝位没有设置对呢
页: [1]
查看完整版本: atmega644 看门狗疯狂重启!!!一条疯狗啊!