Все разобрался. Я неправильно сбрасывал счетчик предделителя. Перечитал Евстифеева. Для обнуления предделителя достаточно выставить бит PSRSYNC в регистре GTCCR, обнуляется он сам на след. такте, а я выставлял бит TSM, который хоть и обнуляется сам, но его все равно нужно в 0 выставлять для запуска. Для останова нужно выставить ОБА!!! бита в 1, а для запуска выставить их опять в 0. Прикол в другом, почему это в железа работало? странно. но нужно это запомнить.
так что инициализацию можно сделать так:
; настройка таймера Т0
; инизиализация предделителя на 1024
ldi r16, 0b00000101
out TCCR0B, r16
;разрешаем превывания по переполнению таймера
ldi r16, 1<<TOIE0
sts TIMSK0, r16
; обнуляем предделитель и разрешаем глобально прерывания
ldi r16, 1<<PSRSYNC
out GTCCR, r16
sei
clr r16
К вашим замечаниям. Не обязательно лепить всю таблицу прерываний вначале, достаточно только те, которые вы используете. Остальные запрещены, поэтому вызова их не будет, хотяяя... если вдруг случайно выставится флаг у какого-нибудь, но это очень маловероятно.
По поводу jmp их обязательно нужно использовать в таблице прерываний, для контроллеров с памятью>>8к ваше утверждение справедливо. В теле программы можно свободно пользоваться rjmp если его хватает по дальнобойности в +-65 комманд вверх-вниз