#include <avr/io.h>
#include <avr/interrupt.h>
#define F_CPU 1600000UL
#include <util/delay.h>
volatile uint8_t counter = 0;
ISR(TIM0_COMPA_vect)
{
counter++;
}
int main(void)
{
// seta a porta B0 como saída
DDRB |= (1 << DDB0);
// configura o timer0
TCCR0A |= (1 << WGM01); // modo CTC
TCCR0B |= (1 << CS02) | (1 << CS00); // prescaler de 1024
OCR0A = 156; // valor para gerar interrupção a cada 100ms
TIMSK |= (1 << OCIE0A); // habilita a interrupção do timer0
sei(); // habilita interrupções globais
while (1)
{
if (counter >= 100) // acende o LED por 500ms
{
PORTB |= (1 << PB0);
_delay_ms(500);
PORTB &= ~(1 << PB0);
counter = 0;
}
}
return 0;
}