Архитектура микроконтроллера Intel 8051. Горюнов А.Г - 53 стр.

UptoLike

53
6.3 Выполнение подпрограммы прерывания
Система прерываний формирует аппаратный вызов (LCALL)
соответствующей подпрограммы обслуживания, если она не
заблокирована одним из следующих условий [3, 4, 5]:
в данный момент обслуживается запрос прерывания равного или
высокого уровня приоритета;
текущий машинный цикл не последний в цикле выполняемой
команды;
выполняется команда RETI или любая команда, связанная с
обращением к регистрам IЕ или IP.
Отметим, что если флаг прерывания был установлен, но по одному
из указанных выше условий не получил обслуживания и к моменту
окончания блокировки уже сброшен, то запрос прерывания теряется и
нигде не запоминается.
По аппаратно сформированному коду LCALL система прерывания
помещает в стек только содержимое счетчика команд (PC) и загружает
в него адрес вектора соответствующей подпрограммы обслуживания.
По адресу вектора должна быть расположена команда безусловной
передачи управления (JMP) к начальному адресу подпрограммы
обслуживания прерывания. В случае необходимости она должна
начинаться командами записи в стек (PUSH) слова состояния
программы (PSW), аккумулятора, расширителя, указателя данных и
т.д. и должна заканчиваться командами восстановления из стека (POP).
Подпрограммы обслуживания прерывания должны завершаться
командой RETI, по которой в счетчик команд перезагружается из стека
сохраненный адрес возврата в основную программу. Команда RET
также возвращает управление прерванной основной программе, но при
этом не снимут блокировку прерываний, что приводит к
необходимости иметь программный механизм анализа окончания
процедуры обслуживания данного прерывания [1].