#include <avr/io.h>
#include <avr/interrupt.h>
// Calculando 1s usando Prescaler = 256
// Tempo de estouro = (256 * 65536)/ 16MHz -> 1,04856 segundos
// Para 1s o Registrador OCR1A precisa esta configurado com 62501
int main(void){
const int interruptInterval = 62501; // Valor para 1 segundo com um prescaler de 256 e clock de 16 MHz
// Configurando pinos de entrada e saída
DDRD = 0x04;
// Configurando o Timer
TCCR1A = 0x00; // Desabilita todas as configurações do registrador A
TCCR1B |= (1 << WGM12); // Configura o modo CTC (Clear Timer on Compare Match)
TIMSK1 |= (1 << OCIE1A); // Habilita a interrupção de comparação OCIE1A
// Configura o valor de comparação para 1 segundo
OCR1A = interruptInterval - 1;
// Prescaler 256
TCCR1B &= ~(1 << CS10);
TCCR1B &= ~(1 << CS11);
TCCR1B |= (1 << CS12);
// Habilitando as interrupções
sei();
while(1){
}
}
//Rotina de interrupção
ISR(TIMER1_COMPA_vect) {
PORTD ^= (1<<2);
}