Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебники 6054.doc
Скачиваний:
4
Добавлен:
01.05.2022
Размер:
421.89 Кб
Скачать

Операции ввода-вывода в реальном масштабе времени

Цель работы: получение навыков разработки программ, реализующих обмен с внешними устройствами в реальном масштабе времени.

Оборудование: INTEL-286 c платой L-154, генератор сигналов, осциллограф.

8.1. Плата ввода-вывода L-154

В лабораторной работе используется универсальная плата ввода-вывода L-154 и ее программное обеспечение. Плата имеет в своем составе программируемый таймер для отсчета интервалов времени, 8-разрядные параллельные интерфейсы ввода и вывода, 16/32 аналоговых входа, аналоговый выход и устройство запросов прерывания. Программно установлен запрос прерывания по линии IRQ5. Необходимое программное обеспечение для выполнения работы размещено в модуле lpas.

Плата содержит в своем составе одноканальный ЦАП, аналоговый выход которого выведен на осциллограф. Обращение к регистру вывода ЦАП происходит по адресу 300H. Для вывода в этот регистр можно использовать библиотечную процедуру OUTDA объектной библиотеки размещенной в модуле lpas. Для включения этой процедуры необходимо отметить этот модуль в числе вызываемых модулей в директиве USES.

Содержимое регистра данных ЦАП может изменятъся от 0 до 4096. Числу 0 типа WORD (целому числу без знака) соответствует выходное напряжение (–5.12в), числу 2048 соответствует 0в, а числу 4096 соответствует напряжение (+5.12в).

12 разрядный АЦП может быть включен в одном из двух режимах: 16 дифференциальных канала или 32 канала с общей землей. В плате перемычками установлен второй режим. АЦП на своем входе имеет предварительный усилитель, обеспечивающий коэффициент усиления 1, 2, 5.

При усилении равном 1 диапазон входного напряжения равен –(5.12в)  (+5.12в). Напряжение на выходе АЦП представлено в дополнительном 12-разрядном коде, так что напряжению 0в соответствует код 0, а напряжению 5.12в – код 2048. Отрицательному напряжению (–5.12в) соответствует дополнительный код числа –2048. Например, для вывода напряжения Nв необходимо заслать в ЦАП код равный целому числу от величины . Ввод этого сигнала через АЦП даст дополнительный код целого числа от величины . Таким образом, можно считать, что напряжения представлены целыми числами со знаком (integer) в диапазоне (-2048)- (2048), но при выводе в ЦАП необходимо добавлять число 2048.

При вводе данных через АЦП номер канала ввода и усиление задаются в виде кода присвоенного целочисленной переменной “Номер канала”. Для нулевого канала и единичного усиления значение этой переменной равно $c0.

В таймерах временные интервалы в микросекундах задаются целочисленной переменной Rate.

В работе предлагается использовать язык программирования Паскаль.

8.2. Процедуры и функции для работы с платой

В программное обеспечение платы для выполнения работы включены следующие процедуры:

procedure OUTDA(dat:integer);- вывод данных в ЦАП;

procedure INITINTR(rate1,rate2:word, name:pointer);- инициализация режима прерывания.

Процедура выполняет следующие действия:

  1. Запоминает регистры в стеке.

  2. Запрещает прерывания на плате.

  1. Запоминает адрес старой программы обработки прерывания (старый вектор) в переменной OldHand.

  1. Устанавливает новую программу name обработки вектора прерывания от внутреннего таймера.

  2. Инициализирует контроллер прерывания.

  3. Устанавливает период между прерываниями равный rate1*rate2 мксек.

  4. Разрешает прерывания.

  5. Восстанавливает регистры.

procedure STOP_INTR;- выключение прерывания

Процедура выполняет следующие действия:

  1. Запоминает регистры в стеке.

  2. Запрещает прерывания.

  3. Восстанавливает старый, ранее запомненный в переменной

OldHand, вектор.

  1. Восстанавливает контроллер прерываний.

  2. Восстанавливает регистры.

procedure RESET_IRQ; - Процедура сбрасывает контроллер прерываний. Она должна быть последней в программе обработки прерывания.

procedure INTR_SETUP(n:word); Данная процедура сообщает драйверу о номере прерывания IRQ, установленному на плате с помощью перемычек.

Для IRQ5 значение n должно быть равно 2, для IRQ3 n равно 0.

function ADCHAN(channel:word):integer ;- однократный ввод с установкой номера канала.

Процедура выполняет следующие действия:

  1. Устанавливает номер канала channel. Нулевой канал, к которому подключен аналоговый вход, при единичном усилении имеет значение channel=C0h (в Паскале $c0).

  2. Дожидается установления номера канала.

  3. .Дает старт преобразования в АЦП.

  4. Дожидается бита готовности.

  5. Считывает данные с АЦП.

procedure SETCHANNEL(Nch:word); - установка номера канала.

Процедура устанавливает номер канала.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]