/****************************************************** ctimer.c exemplo de rotina de interrupção de overflow do TIMER0 e de uso do modo sleep idle mostra também que o otimizador não gera código para atribuições de variáveis não usadas MC404 Junho 2008 Prof Célio G. *******************************************************/ #include #include #include int count = 1; // será atualizada dentro da rotina de interrupção int foo; // idem ISR(TIMER0_OVF_vect) { count++; //contador de interrupções foo=foo + 2* count; // somente para teste: veja o código gerado } int main() { TIMSK0=1; // habilita interrupçõs do TIMER 0 TCCR0B=1; // sem preescaler, dispara TIMER0 set_sleep_mode(SLEEP_MODE_IDLE); // prepara sleep mode idle sleep_enable(); // habilita sleep (SMCR |=1, ou seja SE=1), sei(); // e interrupções globais while(1) { sleep_cpu(); // "dorme": será acordado pelo overflow do TIMER0 count++; // nenhum código gerado aqui! foo=foo + 2* count; // idem, veja no arquivo .lss } }