8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

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

Оператор языка ассемблера

Машинные команды

Выполняемая операция

Требуемое число

импульсов тактовой частоты

EI

(Enable Interrupt)

F3

Разрешает прерывание по сигналу INT в процессе выполнения программы

4

DI

(Disable Interrupt)

FB

Запрещает прерывание по сигналу INT в процессе выполнения программы

4

Различают три режима («О», «1», «2») работы ЦПУ в случае прерывания по сигналу INT в зависимости от способа указания адреса программы обработки прерывания. Мы знаем, что для активизации функции прерывания ПИ следует использовать в режиме «2».

Чтобы установить режим «2» обработки прерывания, в текст программы на ассемблере нужно добавить команду «1М 2» (Interrupt Mode 2). В этом случае в момент, когда по сигналу на выводе INT в ЦПУ вводится запрос прерывания, происходит считывание двух байтов информации из ячейки по адресу, который хранится в регистре V (Vector - вектор) внутри ПИ и регистре I ЦПУ Считанное таким образом число будет адресом 1-й команды программы обработки прерывания. Получив команду прерывания, ЦПУ начинает выполнять программу, записанную в его памяти, начиная именно с этого адреса. Пример организации работы ЦПУ в режиме прерывания схематично показан на Рис. 8.6.

Режим прерывания «2»

ЦПУ

Регистр I

озн \

INT

ПИ

Регистр V ООН

V )

озоон

Если из ПИ подан сигнал 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.


Управление прерыванием

D7

D6

D5

D4

D3

D2

Di

Do

1

AND /OR

H/L

1

0

1

1

1

©

Код управления прерыванием й£ Производится маскирование (если в этом разряде «О», то маска игнорируется)

. Вызывается прерывание (если в этом разряде «О», то прерывание не вызывается)

•ж ВЫСОКИЙ/НИЗКИЙ

Указывает «полярность» сигнала вызова прерывания (если установлена «1», то прерывание вызывается по сигналу «1», если «О», то - по сигналу «О»)

® И/ИЛИ

Установка логической функции прерывания

( «1» - «И», «О» - «ИЛИ»)

Пример: Если код управления прерыванием равен 1111011] (F7H), то прерывание возникает при подаче «1» на все входы источников прерывания, если код управления прерыванием - 10010111 (97И), то прерывание возникает при подаче «О» хотя бы на один вход

Маска

D7

Об

D5

D4

D3

D2

Di

Do

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