everyhelp 发表于 2007-11-5 18:54:53

MEGA8 或 MEGA16,掉电休眠时经常死机,开看门狗又不行,有解决的法子吗?

zhangxun0712 发表于 2009-6-9 09:36:54

怎么没人回答啊?

jiangxingyuan 发表于 2009-6-9 10:43:53

我也关注一下这个问题,在低功耗产品中这可是个头痛的问题呀。

myfriend 发表于 2009-6-10 09:43:57

我是用M168的,你参考看看
///////////////////////////////////////////////
                  TCCR0B=0;
                  TIMSK2=0x00;//关闭定时器2中断
                  TIMSK0=0x00;//关闭定时器0中断
               
                  UCSR0B = 0x00;//disable usart while setting baud rate
                  ACSR|=(1<<ACD);//关闭比较器
               ADCSRA&=~(1<<ADEN);      //关闭ADC
                  _NOP(); _NOP();   
                  WDR();
                  MCUSR&=~(1<<WDRF);//清wdrf
                  WDTCSR|=(1<<WDCE)|(1<<WDE);
               WDTCSR=0x00;
                  _NOP();
                  _NOP();
                  _NOP();
                  _NOP();
                  _NOP();
                  _NOP();
                          
                  PRR=0xeb;
                  EICRA=0x00;//低电平方式中断
                  EIMSK=0x01;//外部中断0使能
               EIFR=0x01;
                  PCICR=0x00;
                  SMCR=0x05;//睡眠使能 掉电模式(外部中断触发
                  SEI(); //
                  asm("SLEEP");//换醒时先在中断执行后回到该处执行下一条
                  ///////////////////////////////////////////////////

                  
                  _NOP();
                  PRR=0x09;//ad与PRTIM1关闭

myyule 发表于 2010-5-11 20:39:01

3楼的回答很好啊

mountainsheep 发表于 2012-9-2 22:53:44

WDR();    //看门狗复位
MCUSR&=~(1<<WDRF);    //看门狗复位标志WDRF清零

//关闭看门狗的步骤:
//1. 在同一个指令内对WDCE 和WDE 写"1“,即使WDE 已经为"1“。
//2. 在紧接的4 个时钟周期之内对WDE 写"0”。
WDTCSR|=(1<<WDCE)|(1<<WDE);
WDTCSR=0x00;


这只是把看门狗关掉了,能保证程序不会跑飞么

h542723151 发表于 2012-9-9 18:02:19

开看门狗怎么不行?
页: [1]
查看完整版本: MEGA8 或 MEGA16,掉电休眠时经常死机,开看门狗又不行,有解决的法子吗?