Мини комп на AVR

Что бы еще такого сделать?... Предлагайте! Обсудим все!!!
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Мини комп на AVR

Сообщение DX168B »

Вот вариант кода для переходов в зависимости от полученных команд:

Код: Выделить всё

;----------
HANDLERS:
.dw PRG0, PRG1, PRG2, PRG3    ;Массив с метками вызываемых п\программ
;----------
.............
.........
ldi           temp0,            0x01    ;задаём значение регистра от 0 до 3
rcall         HANDLER
.............
.........
;----------
HANDLER:
ldi           ZL,               Low(HANDLERS*2)  ;Инициализация массива с метками
ldi           ZH,               High(HANDLERS*2)
lsl           temp0         ;так как память 2хбайтная надо сдвинуть в лево управляющий регистр
clr           temp1
add           ZL,               temp0   ;складываем содержимое управляюшего р-ра с парой Z
adc           ZH,               temp1
lpm           dx2,              Z   ;Грузим младший байт метки из массива
inc           ZL                    ;Можно выкинуть если перед ней использовать "lpm dx2, Z+"
lpm           dx3,              Z   ;Грузим старший байт метки из массива
mov           ZL,               dx2 ;переносим их в пару Z
mov           ZH,               dx3
icall                   ;Вызываем п\программу (в данном случае 0x01 = PRG1, 0x00 = PRG0...)
ret                    ;по окончанию выходим
;---------- Тут сами п\программы
PRG0:
ret
;----------
PRG1:
ret
;----------
PRG2:
ret
;----------
PRG3:
ret
;----------

Так мы вызываем нужную подпрограмму в
зависимости от содержимого в регистре temp0.
Я его уже выкладывал тут.
I am DX168B and this is my favourite forum on internet!
Ответить

Вернуться в «Умные мысли»