Почему-то из подпрограммы не возвращает, а отправляет в начало исполняемого сегмента.
что я сделал не так?
В железе не пробывал ибо пока не на чем.
код ниже.
Длинные коды оформляйте вложением. Паятель.
Вот смотрите здесьQwq писал(а):Здравствуйте!
Почему-то из подпрограммы не возвращает, а отправляет в начало исполняемого сегмента.
что я сделал не так?
Код: Выделить всё
brne sensorinuse ;то обрабатываем это самое чегонибудьКод: Выделить всё
cpi sensor,1 ; если считали 1
brne s1 ; тогда обрабатываем функцией S1
cpi sensor,2 ; Если считали 2
brne s2 ; тогда обрабатываем функчией S2Код: Выделить всё
rcall s1
; или
rcall s2Код: Выделить всё
ldi Temp,low(RamEnd*2)
out SPL,temp
ldi Temp,high(RamEnd*2)
out SPH,tempЧушь полнаяТаблица обработки прерываний неправильна - раз, стек по-моему надо инитить так:
Код:
ldi Temp,low(RamEnd*2)
out SPL,temp
ldi Temp,high(RamEnd*2)
out SPH,temp
Код: Выделить всё
MAIN замкнутая функция в которой мы все делаем
main:
in sensor,PinB ;проверяем сенсоры
clr temp, 0 ; обнуляем temp
cpse sensor, temp ;если sensor =0, то пропускаем следующую команду
RCALL sensorinuse ;то ВЫЗЫВАЕМ ПОДПРОГРАММУ sensorinuse
rjmp mainКод: Выделить всё
sensorinuse:
cpi sensor,1 ; если считали 1
breq s1 ; тогда обрабатываем функцией S1
cpi sensor,2 ; Если считали 2
breq s2 ; тогда обрабатываем функчией S2
ret
s1:
ldi temp, 0b00000110 ; оба мотора вперед
rcall usemotor
ret
s2:
ldi temp, 0b00001001 ; оба мотора назад
rcall usemotor
ret