В коде угол считается с шагом квантования 0.7°, замер от 0.01° для низких оборотов, а счет отталкивается от значения 360°/2=180°, это обусловлено кварцем 4МГц. Вы хотите считать базой длину метки 25°, и для работы математики нам нужно извлечь из нее 180°(Х/7.2) либо 0.7°, далее задержка из таблицы R25 умножается на 0.7° из метки и мы получаем время ожидания, прибавляем его к текущему счетчику и вуаля. Умножение на дробные числа в случае МК достаточно громоздко, ардуинщики например умножат на 144 и затем разделят на 10, это займет 9999 тактов рабочего времени и будет ужасно
Код: Выделить всё
sub R25,R23 ;"табл."-"метка"
;далее расчет на "запаздывание",второй имп.дат.
mov R5,R9 ;сохраним регистры
mov R6,R10 ;счетчика
; R9 - старший байт счетчика метки 2; R10 - младший, вместе число будет R9:R10(ст:мл)
lsr R9 ;1/2=12.5°, циклический сдвиг в право
ror R10 ;с переносом в младший регистр
lsr R9
ror R10 ;1/4=6.25°
lsr R9
ror R10 ;1/8=3.12°
lsr R9
ror R10 ;1/16=1.56°
lsr R9
ror R10 ;1/32=0.78°
;matematika [R9:R10]*R25=[R7:R8] поправка, при 0xFFFF 25°=4551, 1/32=142, а реальные значения R25=2..9
mul R10,R25 ;мл.байт*угол с таблицы=[R1:R0]
mov R8,R0 ;результат мл.байт
mov R7,R1 ;результат ст.байт
mul R9,R25 ;ст.байт*угол с таблицы=[R1:R0]
add R7,R0 ;ст.байт+мл.результат
;теперь имеем величину задержки для счетчика [R7:R8]
;прибавим к текущему счету
add R8,R6 ;мл.байт
adc R7,R5 ;ст.байт+перенос
;далее нужно записать в регистр сравнения счетчика и ждать искру


