[an error occurred while processing this directive] [an error occurred while processing this directive]
Ответ: нельзя.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Mihasic 07 апреля 2002 г. 16:08
В ответ на: Вопрос по семейству x51. отправлено Игорь А. 07 апреля 2002 г. 11:51

Как справедливо заметил уважаемый ValterG, "RETI чего-то с прерываниями делает, чтобы не было повторного"; только не академик, заметим мы от себя, вспоминая BLACKEAGLE'а, а футболист: не RETI это делает, а переход на прерывание. На это справедливо указал уважаемый Kuka: "Нужно обязательно сделать IRET, иначе прерывания будут запрещены". Только не Амбарцумян, продолжаем мы свою мысль, а Акопян: не все прерывания будут блокированы, а только равные и низшие по уровню приоритета. И вернуться из этого состояния у нас нет другой возможности, кроме как выполнить команду RETI или аппаратный RESET, зато уж этого достаточно. Поэтому мы не можем согласиться с замечанием уважаемого Игоря А.: "Команда RET также возвращает управление
основной программе, но при этом не снимает
блокировку прерываний, что приводит к
необходимости иметь ПРОГРАММНЫЙ
МЕХАНИЗМ АНАЛИЗА ОКОНЧАНИЯ
ПРОЦЕДУРЫ ОБСЛУЖИВАНИЯ ПРЕРЫВАНИЯ". Видимо, книжка Игоря не имеет отношения к пятьдесят первым. В 51-х нет такой программной возможности.
Однако попасть из обработчика прерываний в произвольное место программы можно, для этого существует УЛОВКА ФИЛИПСА. Выглядит это примерно так:

'обработчик прерываний
:here_it_begins
'обработка
........
'выход
acall durka
dec SP
dec SP
ljmp WHERE_YOU_WANT
durka:
RETI
'и больше уже ничего не надо

Идея здесь в том, что возврат из подпрограммы durka происходит не командой RET, как у приличных людей, а командой RETI, которая одновременно сбрасывает недоступный программно флаг обработки прерывания. Эта уловка мною проверена в рабочих проектах.
С уважением,
Михасик.

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

Ответы



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

E-mail: info@telesys.ru