/* timer_normal_mode_01.c ATmega88 @ 8MHz */
#include <avr/io.h>
#include <avr/interrupt.h>

#define preload_value 64536		// Timer1 Vorladewert

void init_timer_1 (void)
{
	TCCR1A = 0x00;				// Timer1 Normal Mode (Mode 0)
	TCCR1B = (1<<CS11);			// Prescaler = 8 -> 8Mhz/8 = 1MHz
	TIMSK1 = (1<<TOIE1);		// Timer1 overflow interrupt enable
	TCNT1 = preload_value;		// Timer1 Zählregister vorladen
}

int main(void)
{
	DDRB = 0xFF;				// PORTB Richtungsregister = Ausgang
	init_timer_1();				// Timer 1 initialisieren
	sei();						// Interrupts einschalten
	
	while(1)
	{
		asm ("NOP");			// Nichts tun
	}
}

ISR(TIMER1_OVF_vect)			// Timer1 Interrupt wird alle 1ms ausgeführt
{
	TCNT1 = preload_value;		// Timer1 erneut vorladen
	PORTB ^= (1<<PB3);			// PB3 toggeln (1kHZ Takt erzeugen)
}