MEGA8 或 MEGA16,掉电休眠时经常死机,开看门狗又不行,有解决的法子吗?
。 怎么没人回答啊? 我也关注一下这个问题,在低功耗产品中这可是个头痛的问题呀。 我是用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关闭 3楼的回答很好啊 WDR(); //看门狗复位
MCUSR&=~(1<<WDRF); //看门狗复位标志WDRF清零
//关闭看门狗的步骤:
//1. 在同一个指令内对WDCE 和WDE 写"1“,即使WDE 已经为"1“。
//2. 在紧接的4 个时钟周期之内对WDE 写"0”。
WDTCSR|=(1<<WDCE)|(1<<WDE);
WDTCSR=0x00;
这只是把看门狗关掉了,能保证程序不会跑飞么
开看门狗怎么不行?
页:
[1]