[an error occurred while processing this directive]
|
Вот такой цикл:
do{
PowerDown(); //Enable internal ADC
ADMUX = 0xE0;
ADCSRA = 0x87;
TestOn;
BataryVolume = StartADC();
// _WDR();
TestOFF;
ADMUX = 0x00;
}while(BataryVolume < BataryBorder);
Пробуждение по INT0.Так вот, если нажать и удерживать кнопку на INT0(при BataryVolume < BataryBorder), то мега уходит в непонятный ступор и реанимации не подлежит.
Удалось глюк обойти таким образом, добавлением строчки while(!(PIND & (1 < < PD2)));, то есть, ждать пока не отпустят кнопку:
void PowerDown(void)
{
WDTCR = 0x00;
PORTA = 0x00;
PORTB = 0x00;
PORTC = 0x00;
PORTD = B(0,0,0,0,0,0,0,0);
DDRA = B(0,0,0,0,0,0,1,0);
DDRB = B(0,0,0,0,0,0,0,0);
DDRC = B(0,0,0,0,0,0,0,0);
DDRD = B(0,0,0,1,0,0,0,0);
MCUCR = 0x20; //Power-down
ClrBit(GIFR,INTF0);
SetBit(GICR,INT0);
_SEI();
SetBit(MCUCR,SE);
_SLEEP();
_CLI();
ClrBit(GICR,INT0);
ClrBit(GIFR,INTF0);
ClrBit(MCUCR,SE);
while(!(PIND & (1 < < PD2)));
// WDTCR = 0x0F;
}
Кто-нить может объяснить, почему эта хрень не может пахать при постоянном удержании кнопки?
E-mail: info@telesys.ru