(команда RST n поступает в МП по системной шине данных через приемопередатчик системного контроллера 8238). В МП -системах с восьмивекторным обслуживанием внешних устройств по прерыванию не нужно программным способом определять внешнее устройство, запросившее обслуживание, а значит, уменьшается размер ППОП и увеличивается производительность системы.
Пример 3 (подпрограммы обслуживания прерываний, соответствующие рис. 2.14):
0000 JMP Main
; Точка входа по запросу прерывания RST 0 и по аппаратному сбросу
; RESET = 1 (при
включении питания или нажатии кнопки сброса)
0008 PUSH PSW ; Начало подпрограммы обработки прерывания RST 1
PUSH H ; Сохранение в стеке состояния прерванной (основной) программы
PUSH D ; (абсолютные адреса 0000. 0008. 0010 и 0018 добавлены только
PUSH В ; для удобства анализа программы — в транслируемой программе
JMP IO_1
; они должны отсутствовать)
NOP
0010 PUSH PSW ; Начало полпрограммы обработки прерывания RST 2
PUSH H
PUSH D
OUT Reset_2 ; Сброс запроса прерывания от 1/О-2
JMP IO_2
001S PUSH PSW ; Начало подпрограммы обработки прерывания RST 3
JMP IO_3
; и т. д. (для внешних устройств I/O—4 ... I/O - 7)
IO_1: ; Продолжение подпрограммы обработки прерывания RST 1
OUT Reset_1 ; Сброс запроса прерывания от I/O - 1
POP В ; Восстановление состояния прерванной программы
POP D
POP Н
POP PSW
EI ; Разрешение прерываний (INTE 1)
RET ; Возврат в прерванную программу
I0_2: PUSH В ; Продолжение подпрограммы обработки прерывания RST 2
;
POP В ; Восстановление состояния прерванной программы
POP D
POP Н
POP PSW
EI ; Разрешение прерываний (INTE 1)
RET ; Возврат в прерванную программу
IO_3: ; Продолжение подпрограммы обработки прерывания RST 3
RET
; и т. д. (для внешних устройств I/O - 4 ... I/O - 7)
Main: ; Начало основной программы: тестирование и инициализация
; устройств МП - системы
Команды сброса запросов прерывания от внешних устройств OUT Reset_m могут располагаться в любом месте подпрограмм, но не после команды EI, а команда разрешения прерываний EI — только в конце ППОП. В противном случае выполнение ППОП с большим приоритетом будут прерывать запросы прерываний, имеющие меньший приоритет. Катастрофически же опасен в этом случае повторный запрос прерывания обслуживаемого внешнего устройства до выполнения команды RET ППОП, вызванной предыдущим запросом — будет нарушена работа стека. Если есть гарантия, что во время выполнения ППОП не будет повторных запросов (частота запросов невелика), то прерывания можно разрешать и до завершения ППОП. Если команда EI расположена в конце ППОП, то приоритетность внешних устройств срабатывает только лишь при выборе их для обслуживания. Все это справедливо и для МП 8085, имеющего пять входов запросов прерываний с пятью уровнями приоритетов.
Рассмотренные выше системы прерываний являются одноуровневыми — выполнение текущей ППОП не могут прервать другие внешние устройства. В многоуровневых системах прерывании любое внешнее устройство, имеющее больший приоритет, может прервать выполнение ППОП внешнего устройства, имеющего меньший приоритет, а после выполнения новой ППОП будет автоматически продолжено выполнение прерванной подпрограммы. Понятно, что в этом случае команда EI в допускающей прерывание подпрограмме должна находиться не в самом ее конце. Если система прерываний имеет m уровней прерываний, то одновременно в обслуживании могут находиться до m ППОП в разной степени завершенности. Последовательность выполнения ППОП аналогична последовательности выполнения обычных команд CALL addrвызывающих подпрограммы, имеющие т уровней вложенности. Для построения многоуровневой системы прерываний требуются дополнительные аппаратные затраты.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.