При частоте тактирования МК в 1мГц таймер-счетчик "переполняется" при входном сигнале ниже 15 Гц, тоесть насчитывает больше чем $FFFF (вернее тактов проходит больше чем максимальное значение счетчика), и естественно когда вычитает из нового значение старое, то получается котовасия.
Спойлер
Код: Выделить всё
tim1_capt:
push tmp ;сохраняем данные
push tmp0 ;которые можем потерять
in tmp,sreg ;tmp, tmp0,
push tmp ;sreg
in tmp,icr1l
in tmp0,icr1h
lds r18,timl
lds r19,timh
sts timl,tmp
sts timh,tmp0
clc
sub tmp,r18
sbc tmp0,r19
sts timindl,tmp
sts timindh,tmp0
pop tmp ;восстанавливаем ранее
out sreg,tmp ;сохранённые данные
pop tmp0 ;в обратном порядке
pop tmp ;sreg,tmp,tmp0
reti
Как решить эту проблему? Очевидно нужно добавить третий регистр в результат.
Примерно так, но это работать не будет.
Спойлер
Код: Выделить всё
in tmp,icr1l
in tmp0,icr1h
lds r18,timl
lds r19,timh
sts timl,tmp
sts timh,tmp0
clc
clr r20
sub tmp,r18
sub tmp0,r19
ror r20
sts timindl,tmp
sts timindh,tmp0
sts timindh2.r20