Здравствуйте. Стал изучать ассемблер для ATMega8. Сразу появилась масса примитивных вопросов, тем не менее на них ответов я найти не могу

. Если возможно, подскажите мне. Итак, задача простейшая - запустить таймер, при его переполнении отработать прерывание. Адрес прерывания переполнения - $0009.
Программу написал следующую
...........................................................
.include "C:\asm\AvrAssembler2\Appnotes\m8def.inc"
ldi r20,0b10000000 ; Пишем в седьмой бит r20 единицу
out sreg,r20 ; В SREG записываем r20 (разрешаем прерывания)
ldi r16,0b00000001 ; Пишем в нулевой бит r16 едиицу
ldi r17,0 ; Очищаем r17
out timsk,r16 ; В бит 0 TIMSK записываем 1 (разрешить прерывания таймера)
out tccr0,r16 ; Запускаем таймер на тактовой частоте
er: ;*****ЦИКЛ ОЖИДАНИЯ ПРЕРЫВАНИЯ*****
rjmp er ;***** ------------------------------------ *****
.org $0009 ; По адресу $0009 (где вектор прерывания)...
rjmp xxx ; Находится прыжок к подпрограмме ххх
xxx: ; Подпрограмма ххх
ret ; Возврат из подпрограммы
..................................................
После первого флага переполнения (который вроде бы обрабатывается), программа начинает постоянно обрабатывать программу переполнения, а в счётчике таймера пишутся какие-то случайные значения... Обнуление счётчика/флага переполнения не помогает. Что не так? И правильно ли я указываю путь к прерыванию таймера (я не очень понимаю как надо это делать).. Заранее прошу извинения за возможный примитивизм

. Спасибо