Режим обработки прерываний отличается прежде всего тем, что реализуется аппаратно. Прерывание основной программы выполняется нажатием клавиши <INT> и, возможно, если оно разрешено в основной программе, командой E1. Следует помнить, что после начальной установки МП и сразу после любого запроса на прерывания - прерывания запрещены.
В случае, если прерывание разрешено, то после нажатия клавиши <INT> и подачи на вход INT МП сигнала запроса на прерывание, МП по шине данных получает код команды RST 7. После выполнения этой команды его программный счетчик устанавливается на адрес монитора 0038H. По этому адресу записана команда перехода на адрес 1FE6H, с которого располагается подпрограммы обработки прерываний.
Программа 3. В регистровой паре BC процессор производит накопление единиц от значения 0000H до значения FFFFH и повторяет этот процесс еще четыре раза, после чего осуществляется выход в монитор. В процессе работы программы прерывания разрешены и, если пришел запрос на прерывание (нажата клавиша INT), то выполнение основной программы прерывается и осуществляется вывод в нулевую позицию дисплея символа «Г», после чего продолжается выполнение основной программы.
Программа имеет вид:
Адрес | OBJ | Метка | КОП | Операнды | Комментарий: |
1000H | FB | EI | : разрешить прерывания | ||
1001H | LXI | B, 0000H | : BC <= 0000H | ||
1002H | |||||
1003H | |||||
1004H | 3E | MVI | A, 0FFH | : A <= FFH | |
1005H | FF | ||||
1006H | MVI | D, 05H | : D <= 05H счетчик | ||
1007H | |||||
1008H | 0C | COUNT: | INT | C | : C <= C + 1 |
1009H | B9 | CMP | C | : A - C | |
100AH | C2 | JNZ | COUNT | : переход если < > 0 | |
100BH | |||||
100CH | |||||
100DH | INR | B | : B <= B + 1 | ||
100EH | B8 | CMP | B | : A - B | |
100FH | C2 | JNZ | COUNT | : переход если < > 0 | |
1010H | |||||
1011H | |||||
1012H | DCR | D | : D <= D - 1 | ||
1013H | C2 | JNZ | COUNT | : переход если < > 0 | |
1014H | |||||
1015H | |||||
1016H | C3 | JMP | ENTRY | : выход в монитор с | |
1017H | : сохранением содержимых | ||||
1018H | : регистров. |
Ввод объектного кода программы в микро-ЭВМ осуществляется описанным выше способом посредством директивы Mem. C адреса 1200H c помощью этой же директивы вводится объектный код программы обработки прерывания.
Подпрограмма обработки прерывания имеет вид:
Адрес | OBJ | Метка | КОП | Операнды | Комментарий: |
1200H | F5 | PUSH | PSW | : сохранить значения A, F | |
1201H | 3E | MVI | A, OCEH | : A <= код "Г" | |
1202H | CE | ||||
1203H | D3 | OUT | 0F8H | : Port A <= A | |
1204H | F8 | ||||
1205H | F1 | POP | PSW | : вернуть значения A, F | |
1206H | C9 | RET | : выход из подпрограммы. |
По адресу 1FE6 необходимо ввести коды С3 00 12 команды JMP 1200Н перехода на подпрограмму обработки прерывания.
После этого директивой G 1000 производится запуск программы на выполнение. Программа выполняется в течение 5 секунд, при этом в крайней левой позиции дисплея монитора индицируется символ «Е», это признак того, что программа выполняется. После того, как произойдёт пятикратное накопление единиц в регистровой паре BC осуществится выход в монитор и на дисплее появится сообщение «br – stop». Теперь необходимо проверить содержимое регистров процессора, участвубщих в выполнении программы – A, B, C и D. Это делается следующим образом:
Комментарий | Клавиатура | Дисплей |
1. Ввод директивы Reg. просмотра и изменения содержимого регистров МП | "br - StoP" | |
Next | ? | |
Reg. | r | |
2. Ввод регистровой пары PSW | A (PSW) | r FF** AF |
3. Переход к следующей регистрвой паре BC | Next | r FFFF BC |
4. Переход к следующей регистровой паре DE | Next | r 00** DE |
5. Выход из директивы Reg. | Reset | "Энерго" |
Содержимое регистровой пары BC число FFFFH свидетельствует о том, что произошло накопление единиц, значение счётчика D уменьшилось с числа 05Н (оно задаётся в программе) до значения 00Н, это показывает, что накопление произошло пять раз подряд. Значение аккумулятора FFH задаётся в программе и служит для сравнения со значениями регистров B и C для определения момента прекращения накопления.
Теперь необходимо произвести прерывание. Для этого директивой G 1000 программа запускается на выполнение и в произвольный момент времени, не превышающий 5 секунд, нажимается клавиша <INT>. При этом управление передаётся программе обработки прерывания, которая сохраняет значение аккумулятора и регистра признаков, используемых в программе, высвечивает в крайней левой позиции дисплея символ «Г», возвращает прежнее значение аккумулятору и регистру признаков и осуществляет возврат в основную программу, в которой произойдёт дальнейшее накопление единиц и осуществится выход в монитор.
После этого необходимо проверить значение регистров, используемых в программе, и убедиться, что прерывание не повлияло на результаты выполнения программы накопления единиц.
Варианты заданий.
1. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 0ой и 1ой позиции инициалы. Нажимаем клавишу «0», переходят на первую и вторую позицию.
2. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 1ой и 2ой позиции инициалы. Нажимаем клавишу «0», переходят на 2ую и 3ю позицию.
3. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 3ей и 4ой позиции инициалы. Нажимаем клавишу «3», переходят на 3ю и 5ю позицию.
4. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 3ей и 4ей позиции инициалы. Нажимаем клавишу «3», переходят на 4ю и 5ю позицию.
5. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 4ой и 5ой позиции инициалы. Нажимаем клавишу «4», переходят на 5ую и 6ую позицию.
6. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 5ой и 6ой позиции инициалы. Нажимаем клавишу «5», переходят на 6ю и 7ю позицию.
7. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 6ой и 7ой позиции инициалы. Нажимаем клавишу «6», переходят на 7ю и 8ю позицию.
8. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 0ой и 2ой позиции инициалы. Нажимаем клавишу «1», переходят на 1ую и 3ю позицию.
9. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 1ой и 3ей позиции инициалы. Нажимаем клавишу «2», переходят на 2ю и 4ю позицию.
10. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 2ой и 4ой позиции инициалы. Нажимаем клавишу «3», переходят на 3ю и 5ю позицию.
11. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 3ой и 5ой позиции инициалы. Нажимаем клавишу «4», переходят на 4ю и 6ю позицию.
12. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 4ой и 6ой позиции инициалы. Нажимаем клавишу «5», переходят на 5ю и 7ю позицию.
13. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 5ой и 7ой позиции инициалы. Нажимаем клавишу «6», переходят на 6ю и 8ю позицию.
14. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 7ой и 8ой позиции инициалы. Нажимаем клавишу «7», переходят на 6ю и 6ю позицию.
15. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 6ой и 7ой позиции инициалы. Нажимаем клавишу «6», переходят на 5ю и 6ю позицию.
16. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 5ой и 6ой позиции инициалы. Нажимаем клавишу «5», переходят на 4ю и 5ю позицию.
17. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 4ой и 5ой позиции инициалы. Нажимаем клавишу «4», переходят на 3ю и 4ю позицию.
18. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 3ой и 4ой позиции инициалы. Нажимаем клавишу «3», переходят на 2ю и 4ю позицию.
19. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 2ой и 3ой позиции инициалы. Нажимаем клавишу «2», переходят на 1ю и 2ю позицию.
20. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 1ой и 2ой позиции инициалы. Нажимаем клавишу «1», переходят на 0ю и 1ю позицию.
21. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 0ой и 1ой позиции инициалы. Нажимаем клавишу «0», переходят на 0ю и 8ю позицию.
22. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 0ой и 8ой позиции инициалы. Нажимаем клавишу «8», переходят на 1ю и 7ю позицию.
23. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 1ой и 7ой позиции инициалы. Нажимаем клавишу «1», переходят на 2ю и 6ю позицию.
24. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 2ой и 6ой позиции инициалы. Нажимаем клавишу «2», переходят на 3ю и 5ю позицию.
25. Запускаем программу – молчит. Нажимаем клавишу INT появляется на 3ой и 5ой позиции инициалы. Нажимаем клавишу «3», переходят на 4ю и 6ю позицию.