Вот тут виноват - исправляюсь:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено 51 05 апреля 2004 г. 20:05
В ответ на: Занудой буду, но push R0 не годится. В push только direct addressing. отправлено -=ВН=- 05 апреля 2004 г. 19:24


int_rout:
push ACC
push PSW
push DPL
push DPH
;push whatever_else
;.......
;....... Здесь сам код обработчика
;.......
;pop whatever_else
pop DPH
pop DPL
pop PSW ;SP указывает на сохраненный ACC, но POP мы пока не делаем
;
;Начало процедуры принудительного возврата
;
mov A,R0 ;Сохраняем ТЕКУЩИЙ R0
push ACC ;
mov R0,SP ;Копируем SP в R0
dec R0 ;Пропускаем сохраненные R0 и ACC
dec R0 ;Теперь R0 указывает на старший байт адреса возврата
mov @R0,#high(kuda_nado);Подменяем старший байт адреса возврата
dec R0 ;Теперь R0 указывает на младший байт адреса возврата
mov @R0,#low(kuda_nado) ;Подменяем младший байт адреса возврата
pop ACC ;Восстанавливаем ТЕКУЩИЙ R0
mov R0,A ;
pop ACC ;Восстанавливаем ACC
reti ;Возврат kuda_nado

А на практике для этого либо специальное "сохранилище" в IRAM надо выделять, либо банки регистров переключать, чтобы не извращаться.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru