Раздел: Документация
0 ... 27 28 29 30 31 32 33 ... 39 Сигнал NMI - сигнал принудительного запроса прерывания который невозможно «замаскировать» программно. Когда на вывод NM1 ЦПУ подается «О», ЦПУ прерывает выполняемую программу и переходит к выполнению команды, загруженной по адресу 0066Н. Поэтому в случае использования сигнала NMI необходимо заранее загрузить по адресу 0066Н программу обработки прерывания. Можно разрешить или запретить прерывание, включив в текст программы операторы, с помощью которых на выводы NMI и INT подаются соответствующие сигналы. Оператор «EI» (Enable Interrupt) разрешает прерывание, оператор «DI» (Disable Interrupt) запрещает его. Машинные коды операций, выполняемых операторами «Е1» и «DI», показаны в Табл. 8.1. Таблица 8.1. Операторы EI и DI
Различают три режима («О», «1», «2») работы ЦПУ в случае прерывания по сигналу INT в зависимости от способа указания адреса программы обработки прерывания. Мы знаем, что для активизации функции прерывания ПИ следует использовать в режиме «2». Чтобы установить режим «2» обработки прерывания, в текст программы на ассемблере нужно добавить команду «1М 2» (Interrupt Mode 2). В этом случае в момент, когда по сигналу на выводе INT в ЦПУ вводится запрос прерывания, происходит считывание двух байтов информации из ячейки по адресу, который хранится в регистре V (Vector - вектор) внутри ПИ и регистре I ЦПУ Считанное таким образом число будет адресом 1-й команды программы обработки прерывания. Получив команду прерывания, ЦПУ начинает выполнять программу, записанную в его памяти, начиная именно с этого адреса. Пример организации работы ЦПУ в режиме прерывания схематично показан на Рис. 8.6. Режим прерывания «2»
озоон Если из ПИ подан сигнал INT на ЦПУ, то ЦПУ переходит к выполнению программы, загруженной по адресу 0800 Н, который хранится в ячейках с адресами ОЗООН и 0301Н 0800 ЗУ 00 08 Программа отработки прерывания Рис. 8.6. Так формируется адрес программы обработки прерывания Пусть программа обработки прерывания загружена в область памяти начиная с адреса 0800Н. Если в регистре I ЦПУ содержится число ОЗН, а в регистре V ПИ - ООН, то в этом случае содержимое регистров V и I образует 16-разрядное число ОЗООН. Следовательно, по двум последовательным адресам ОЗООН и 0301Н должно храниться число 0800Н, указывающее первый адрес программы обработки прерывания (не забывайте, что при загрузке в память 16-разрядного числа 0800Н сначала записывается младший байт). Если микрокомпьютер запрограммирован, как описано выше, то, получив сигнал INT, ЦПУ прервет выполняемую программу и приступит к выполнению команд программы обработки прерывания, записанной в памяти, начиная с адреса 0800Н. В свою очередь, этот адрес находится в ячейке памяти по адресу ОЗООН (и следующей за ней ячейке), заданному регистрами I и V. Когда выполнение Программы обработки прерывания закончится, ЦПУ продолжит выполнение прерванной программы. Программирование ПИ на обработку прерывания Чтобы ЦПУ выполнило прерывание после получения сигнала INT из ПИ, в регистр V ПИ заранее загружается младший байт адреса ячейки памяти, в которой находится первый адрес программы обработки прерывания. Число, загруженное в этот регистр, называют вектором прерывания. - Вектор прерывания ~ Это младший байт адреса, по которому находится адрес первой команды программы обработки прерывания D, D, D, 0-й разряд установлен в «0» J В качестве вектора прерывания могут быть заданы, например, числа ООН, 04Н, ОАН, 80Н Для программирования ПИ нужно по адресу управляющего кода портов ввода и вывода (в примере предыдущего раздела - 0А1Н, ОАЗН) с помощью команды OUT последовательно загрузить вектор прерывания и код установки режима (0FH или 4FH). В момент получения от внешнего устройства сигнала STB ПИ посылает в ЦПУ сигнал INT, который запускает «механизм» выполнения программы обработки прерывания. Рассмотрим на примере, как можно оптимизировать работу микрокомпьютера с помощью функции обработки прерывания. Допустим, внешнее устройство, соединенное с ПИ, посылает сигнал STB, требуя выполнения процессором процедуры прерывания лишь в тот момент, когда оно готово к следующему сеансу обмена данными с ЦПУ. В свою очередь, ЦПУ запускает программу обработки прерывания только на время, необходимое для того, чтобы получить данные из внешнего устройства и дать ему новое задание-Очевидно, такой режим «общения» ЦПУ с внешним устройством позволяет повысить производительность микрокомпьютера. Действительно, проведя кратковременный сеанс связи с внешним уст- ройством, ЦПУ может выполнять другие задачи, пока внешнее устройство отрабатывает команды, полученные из ЦПУ или готовит очередной пакет данных. На Рис. 8.7 приведена схема работы ЦПУ в режиме прерывания при пересылке данных на внешнее устройство вывода (например, принтер), а также показано направление сигналов RDY, STB, и INT. Прерывание в режиме вывода ПИ С помощью сигнала квитирования и сигнала INT ЦПУ синхронизирует работу внешнего устройства ЦПУ D0~D7 По команде вывода данные транслируются в ПИ © Сигнал готовности данных INT Шина данных RDY ПИ INT STB ©Оповещает ЦПУ о том, что данные приняты внешним устройством
ПИ о том, что данные приняты Рис. 8.7. Использование ПИ в режиме прерывания при выводе данных Аналогичным образом осуществляется синхронизация работы ЦПУ и внешнего устройства ввода при обмене данными через ПИ. Теперь посмотрим, как происходит обработка прерывания, когда установлен «3» режим работы ПИ, позволяющий одновременно обслуживать несколько источников сигналов. В этом случае при программировании ПИ следом за загрузкой вектора прерывания, кода установки режима и кода установки назначения разрядов необходимо загрузить в регистры ПИ еще 2 управляющих кода - код управления прерыванием и маску прерывания (оба - 8-разрядные числа). Структура и содержимое этих кодов показаны на Рис. 8.8. Управление прерыванием
© Код управления прерыванием й£ Производится маскирование (если в этом разряде «О», то маска игнорируется) . Вызывается прерывание (если в этом разряде «О», то прерывание не вызывается) •ж ВЫСОКИЙ/НИЗКИЙ Указывает «полярность» сигнала вызова прерывания (если установлена «1», то прерывание вызывается по сигналу «1», если «О», то - по сигналу «О») ® И/ИЛИ Установка логической функции прерывания ( «1» - «И», «О» - «ИЛИ») Пример: Если код управления прерыванием равен 1111011] (F7H), то прерывание возникает при подаче «1» на все входы источников прерывания, если код управления прерыванием - 10010111 (97И), то прерывание возникает при подаче «О» хотя бы на один вход Маска
A Пример: Если 1-й, 3-й и 5-й разряды являются входами прерывания, а код маски равен llOUllO(OBDH), то 0-й и 5-й разряды становятся источниками прерывания Разряд 8-разрядного порта, запрограммированный на ввод, будет входом прерывания, если соответствующий ему разряд маски равен «О» Рис. 8.8. Код управления прерыванием и маска прерывания Для программирования ПИ в режиме «3» следует, используя команду вывода, загрузить 5 управляющих кодов, как показано на Рис. 8.9. Как видно из рисунка, для установки режима необходимо последовательно загрузить следующие коды: младший байт (вектор прерывания) адреса, по которому помещен первый адрес программы обработки прерывания, код 0CFH, устанавливающий ПИ в режим «3», код установки соответствующих разрядов в режим ввода, код управления прерыванием, определяющий условия возникновения прерывания, и маску прерывания - код, определяющий входы прерывания. Порядок записи кода управления прерыванием Управляющие коды с помощью команды вывода загружаются в следующем порядке Вектор прерывания I Код установки режима Т Код установки назначения разрядов I Код управления прерыванием Код маски Для случая вызова прерывания в режиме «J» ПИ с. 8.9. Порядок установки кодов управления для выполнения прерывания в режиме «3» ПИ Теперь рассмотрим пример системы управления, использующей ерывание в указанном режиме. Задача № 6 - программа контроля механической системы Взгляните на Рис. 8.10, на котором представлена схема взаимо-ействия ЦПУ и ПИ, работающего в режиме «3». Назначение выво-ов приведено на рисунке. Сначала определим структуру управляющих кодов. Соответст-:нно назначению разрядов порта управляющий код установки со-ержит «О» в тех разрядах, которые будут использоваться для вывода данных, и «1» - в тех разрядах, которые предназначены для ввода данных. Таким образом, для разрядов Ао...А7 получим значение 01010100 (в шестнадцатеричной системе - 54Н). Код управления прерыванием в этой задаче вызовет прерывание, если хотя бы на одном из трех входов появится сигнал «1». Поэтому из Рис. 8.8 возь- 0 ... 27 28 29 30 31 32 33 ... 39
|