Вот кусок программы, микроконтроллер ATmega8, частота кварца 16 Мгц.
.include "m8def.inc"
;r31 - temp
rjmp init
.org $09
rjmp TIMER0_OVF
;конфигурирование
init:
	
	;инициализация стека
	ldi	r31,HIGH(RAMEND) 
	out	SPH,r31	         
	ldi	r31,LOW(RAMEND)	 
	out	SPL,r31
	;конфигурирование таймера 100 мс
	ldi r31, (1<<TOIE0)  ;разрешение прерывание
	out TIMSK, r31       ;по переполнению счетчика
	ldi r31, $64     ;Устанавливаем переполнение
	out TCNT0, r31   ;каждые 10 ms
	ldi r31, (1<<CS02) | (1<<CS00) ; CK/1024 = 15625 Hz = 0,064 ms
	out TCCR0, r31    
	
	sei  ;разрешение глобальных прерываний	
	ldi r30, 10    ;количество переполнений
	;основная часть
start:
	rjmp label
TIMER_100ms:
	
	nop 
TIMER0_OVF:
	dec r30
	breq TIMER_100ms
	ldi r31, 82        ;дополнительная задержка
TIMER0_OVF_1:
	dec r31
	brne TIMER0_OVF_1
	
	;конфигурирование таймера 100 мс
	ldi r31, (1<<TOIE0)  ;разрешение прерывание
	out TIMSK, r31       ;по переполнению счетчика
	ldi r31, $64     ;Устанавливаем переполнение
	out TCNT0, r31   ;каждые 10 ms
	ldi r31, (1<<CS02) | (1<<CS00) ; CK/1024 = 15625 Hz = 0,064 ms
	out TCCR0, r31    
	reti
На базе TIMER_COUNTER_0 выполнена задержка 100 мс, т.к. максимум переполнения счетчика могут 
происходить через каждые 16 мс, время переполнения поставлено 10 мс, и переполнения 
выполняются 10 раз.(TIMER_COUNTER_1 нужен для других целей, поставить частоту кварца меньше 
нельзя).
Эмулирую все это дело на AVR STUDIO 4.12 (пробовал 4.11, 4.05, 3.56), первое переполнение 
происходить как надо через 10 мс, а последующие через 9,98 мс.
Не знаю что это, глюк AVR STUDIO или моей программы?
			
		


