Нулевой таймер на ATmega8 не имеет апаратного ШИМ'а, поэтому ему трудно придумать применение кроме как простого счетчика. На 16MГц кварце и делителем на 64, прерывание по переполнению счетчика будет вызаваться с частотой 1КГц, т.е. каждый вызов будет равняться одной миллисекунде. Разрядности unsigned long для счетчика должно хватить на 49 дней. В целом, такой счетчик мало годится для построения часов, но в качестве таймера для расчета разных задержек подойдет вполне.
/* timer.c LED Blink whitout delay via 8-bit Timer0 for AVR ATmega8 */ #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> volatile unsigned long millis; ISR(TIMER0_OVF_vect) { millis++; } int main(void) { DDRB |= (1<<PB5); // pinMode(13,OUTPUT); в Wiring TIMSK =(1<<TOIE0); // timer0 enable TCCR0 = (1<<CS01) | (1<<CS00); // prescaler 1/64 volatile unsigned long curTime, lastTime, period; millis=0; lastTime=0; period=1000; // 1 sec sei(); for (;;) { curTime=millis; if ((curTime -lastTime)> period) { PORTB ^= (1<<PB5); lastTime=curTime; } } return 0; }