вот специально по быстрому набросал, в протеусе проверил - работаетСериг писал(а):тоже не прокатывает
правда думаю нужно учитывать еще время на wake-up при расчете
Код: Выделить всё
#include <mega8.h>
#include <delay.h>
#define LED PORTB.3
#define ON 0
#define OFF 1
bit LE = 0;
// Timer1 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
TCNT2 = 64560 + 6; //выставляем начальное значение TCNT2 для 1 сек; 65536 - ( xtall/1024 = 977Hz)
//6 тиков на просыпание
if (LE == 0)
{
LED = ON;
LE = 1;
}
else
{
LED = OFF;
LE = 0;
}
}
void main(void)
{
DDRB=0b11111111;
PORTB=0b11111111;
TCCR2 = (1<<CS12)|(1<<CS11)|(1<<CS10); // преддделитель 1024 для таймера2
TCNT2 = 64560 + 6; //выставляем начальное значение TCNT2 для 1 сек; 65536 - ( xtall/1024 = 977Hz)
//6 тиков на просыпание
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK |= (1<<TOIE2); // разрешить прерывание по переполнению таймера2
MCUCR |= (1 << SE)|(0 << SM2)|(1 << SM1)|(1 << SM0); // Разрешить Power-save mode
ASSR |= (1 << AS2); // Установить в асинхронный режим
// Global enable interrupts
#asm("sei")
//LED = ON;
//LE = 1;
while (1)
{
#asm("Sleep")
}
}


