Назад в раздел
Исследование асинхронного обмена с внешними устройствами.
Untitled
Исследование асинхронного обмена с внешними устройствами.
Внешние прерывания.
1. Краткие сведения.
В процессорах семейства 8051 не предусмотрено таких механизмов управления
вводом и выводом информации , как состояния ожидания (WAIT-STATE) или
непосредственный доступ к памяти. Это не существенно при работе с
устройствами "постоянно готовыми" то есть такими, который могут
принимать информацию с портов процессора (или выдавать информацию на
них) в произвольный момент времени. Однако если процессор и внешние
устройства работают асинхронно необходимо предусматривать средства
взаимного оповещения абоненто
в о готовности к обмену.
Возможно использование следующих способов взаимного оповещения
Периодическая проверка готовности данных
Программные петли ожидания готовности данных
Использование прерываний.
В любом случае периферийное устройство для оповещения процессора о
своей готовности принять или выдать данные подает на один из
внешних контактов процессора активный уровень.
В первом варианте в программу включают несколько команд анализа
определенного бита ( или битов ) входных портов. Эти команды
распределяют по программе так, чтобы они исполнялись с интервалом не
меньшим некоторого заданного, гарантирующего отсутствие пропуска данных.
Если на соответствующих входах обнаруживается изменение сигнала,
выполняется переход на программу обработки ( или подготовки) новых данных.
Во втором варианте в том месте программы, где требуются новые данные,
размещается последовательность команд:
- считывание признака готовности ( например MOV C,bit )
- условный переход на первую из этих команд, если обнаружена
неготовность.
Таким способом можно проверять как выделенные биты портов ввода/вывода,
так и состояния некоторых внутренних регистров, связанных с асинхронными
процессами, например бит переполнения таймера, бит готовности
последовательного порта.
Если используется вызов подпрограммы обработки данных по прерываниям, то
для оповещения процессора о необходимости выполнить программу подготовки и
выдачи данных ( либо приема и обработки новых данных) используются линии
INT0 или INT1 ( Второй или третий биты порта P3 соответственно).
Для управления режимом обслуживания прерываний служит прерываниями в
микроконтроллере служат регистр масок прерываний IE и регистр
приоритетов IP, состояние которого изменяется программно либо целиком,
либо за счет селективной установки или сброса отдельных разрядов. Если
старший бит регистра IE ( IE.7) установлен в нулевое состояния
заблокированы любые прерывания. В противном случае прерывания от
конкретного источников запросов разрешены, если установлен в единицу
соответствующий разряд регистра
IE и заблокированы, если в этом разряде ноль. Внешние прерывания
управляются IE0 для прерывания по входу INT0, и IE2 для прерываний по
входу INT1. Прочие прерывания и вопросы управления приоритетами
обсуждаются в описании следующей работы. если ITx
Биты IT1 и IT0 ( находящиеся в регистре TCON в позициях TCON.2 и TCON.0
соответственно) задают тип прерываний. Они устанавливаются программно, и
=1, то запрос инициируется по спаду сигнала на входе INTx. В противном
случае запрос существует пока на входе INTx присутствует низкий уровень. В
последнем случае, если на момент окончания обслуживания на входе
попрежнему сохраняется низкий уровень, прерывание возникает повторно. В
любом случае фронт сигнала INTx устанавливает бит IEx ( IE1 и IE0
находятся TCON
в позициях TCON.3 и TCON.1 соответственно) состояние которого который
может опрашиваться программно, например для организации программных
циклов ожидания. Бит IЕx автоматически сбрасывается при запуске программы
обслуживания связанного с ним прерывания
Если обнаружен запрос INT1 или INT0 ( спад или низкий уровень
сигнала в зависимости от настройки), и прерывания от этого входа
разрешены, то процессор по окончанию текущего программного цикла
записывает в стек адрес следующей команды прерываемой программы, после
чего загружает на счетчик адреса команд адрес начала программы
обслуживания прерываний. Важно отметить, что в микроконтроллерах
семейства 8051 для программ обслуживания зафиксированы постоянные
начальные адреса. Так программа, вызываемые по
запросу INT0 должны начинаться с адреса 0003, а вызываемые по INT1 - с
адреса 0013Н. Если в системе возможно обслуживание нескольких прерываний,
то программы обслуживания должны "обходить" участки программной
памяти, зафиксированные как начальные участки программ обслуживания
других прерываний ( используется команда JMP). Всякая программа
обслуживания прерываний должна оканчиваться командой RETI (возврат из
прерываний) Это команда не только восстанавливает из стека состояние
счетчика команд, соответ
ствующее моменту начала обслуживания прерываний ( как и команда возврата
из подпрограмм RET), но и разрешает прерывания равного и низших
приоритетов .
Прерывающая программа и прерываемая обычно используют
аккумулятор и регистр слова состояния программы (PSW). Для того, чтобы
запомнить PSW на время обслуживания прерываний, следует в начале программы
обслуживания исполнить команду сохранения слова состояния программы в
стеке микроконтроллера( PUSH PSW). Для засылки в стек аккумулятора
специальной команды в системе команд микроконтроллера не предусмотрено.
Поэтому аккумулятор следует сохранять в одном из неиспользуемых общих
регистров. Внутри вызванной подпрограммы рекомендуется установить новый
регистровый банк, используя установку или обнуление битов выбора банка (
напр. SETB RS0, CLRB RS1). Тогда головная программа и подпрограмма
под одинаковыми логическими именами регистров "подразумевают" различные
физические ячейки памяти. Такой подход освобождает программиста от проблем
защиты регистровой памяти при обслуживании прерываний.
|
|
|
|