On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru






 

Исследование асинхронного обмена с внешними устройствами.

 В процессорах семейства 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). Тогда головная программа и подпрограмма
под одинаковыми логическими именами регистров "подразумевают" различные
физические ячейки памяти. Такой подход освобождает программиста от проблем
защиты регистровой памяти при  обслуживании прерываний.  


Компьютеры - контроллеры