Этот алгоритм и есть у ТС.
ALS писал(а):
Гугл, "avr math routines", третья ссылка
Так тут уже ворох ссылок, в том числе и родные аппноты от атмела.
dccharacter, а чего это у тебя в часах не пошли itoa и sprintf ? Вроде бы говорил что ленивый, а вроде "Ну это я в своих часах делал... Только пива было выпито ого-го сколько"
Пачиму?
arm-17, выкладываю твой исходник с доработками, убери pdf в расширении и погоняй в студии. Форум сьедает форматирование программы, а читать без табуляции сложно...
Для начала, надо выдернуть все Forward, Back, bin16_ascii из прерываний. В прерывании оставить только установку нужных флагов для обработки. Например как ниже, это не совсем корректно, т.к. можно выставить оба флага, но сейчас пойдет.
Код:
.def flags = r0 ; state flags
.equ EventForward = 0 ;=1 если надо обслужить прямой счет
.equ EventRevers = 1 ;=1 если надо обслужить обратный счет
В инициализации обнулить clr flags.
В основном цикле Inf нельзя все время инициировать прерывания как у тебя. Это делается 1 раз и забывается. т.е. "ldi temp1,(1__INT1)+(1__INT0)" переносим в инициализацию. Вот основной цикл, постоянная проверка флагов и если надо - переход на обработку:
Код:
Inf: sbrc flags, EventForward ;переход если установлен EventForward
rjmp Forward ;
sbrc flags, EventRevers ;соотв. для EventRevers
rjmp Forward ;
rjmp Inf ;бесконечный цикл
а в самих обработчиках сбрасывать соотв. флаг:
Код:
cbr flags, (1__EventForward) ;сбросить флаг, обработали событие
Форум глючит, в сообщениях нельзя вставлять значок "стрелочка влево (знак меньше), у меня по тексту заменено на "__"
Вложение:
test.asm.pdf [5.11 КиБ]
Скачиваний: 0