|
|
|
| Исследование асинхронного обмена с внешними устройствами. |
Автор: |
Источник: н/д | Язык: русский |
В процессорах семейства 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). Тогда головная программа и подпрограмма под одинаковыми логическими именами регистров "подразумевают" различные физические ячейки памяти. Такой подход освобождает программиста от проблем защиты регистровой памяти при обслуживании прерываний. |
Доступные файлы (отрапортовать об ошибке!): |
Просмотреть
Загрузить
В портфель! (руководств: 0)
Обсудить на форуме
|
|
|
|
|