Реклама:

Используя описанные выше функции программирования уКПО, можно реализовать самые разные режимы его работы и алгоритмы взаимодействия с внешними устройствами.

Например, на основе УКПО может быть построен простей-щий тактовый генератор. Для этого будет использован один лз битов порта О УКПО. Ниже приведен пример программы тактового генератора, работающего с частотой 1 кГц.

// *** Программа тактового генератора на 1 кГц // *** на базе УКПО.

// *** Выход генератора — бит 0 порта 0.

#include <DOS.H> include <CONIO.H>

#define MASK_BIT 1 // Маска бита 0

// Глобальные переменные

unsigned BASE_ADDR; // Базовый адрес УКПО

unsigned CW_ADDR; // Адрес регистра

// управляющего слова

void main (void) {

unsigned char data = 0; // Начальное состояние — 0

outportb (CW_ADDR, 1); // Установка конфигурации:

// порт 0 на вывод, // остальные на ввод

while (! kbhit()) // Пока не нажата

//любая клавиша

{

outportb (BASE, data); // Запись данных data "= MASK_BIT; // Инверсия бита

delay (1); // Задержка на 1мс

I \

II*** Конец программы

В этой программе изменение состояния выхода УКПО про, изводится инверсией бита с помощью операции "ИСКЛЮ-ЧАЮЩЕЕ ИЛИ" с позиционной маской бита. Для выдержки временного интервала использована системная функция delay языка Си, в качестве аргумента принимающая время в миллисекундах. Очевидно, что максимальная частота такого тактового генератора как раз и равна 1 кГц, чего в большинстве случаев недостаточно. Кроме того, точность установки частоты снижается из-за суммирования задержек выполнения остальных команд цикла.

Для повышения частоты тактового генератора можно использовать другой способ формирования программной задержки — цикл с заранее определенным временем исполнения. Например, если известно, что операция

for (i=0;i<1;i++) // Пустой цикл, выполняемый ; // один раз выполняется N микросекунд, то, устанавливая предел выполнения цикла, можно получить любую задержку в диапазоне от N до 65536-N с шагом N. Однако такой способ требует предварительного определения быстродействия компьютера, что обычно нелегко сделать с достаточной точностью.

Наконец, для выдержки временного интервала можно использовать системный таймер компьютера. При этом программные прерывания 08 Н и 1СН позволяют устанавливать интервалы, не меньшие чем 55 мс (частота примерно 18.2 Гц). Для получения меньших временных интервалов необходимо самому запрограммировать таймер.

С помощью УКПО просто реализуется асинхронный протокол взаимодействия с "медленными" внешними устройствами. Основа такого протокола — цикл типа "команда—ожидание реакции—действие". В качестве примера рассмотрим сопряжение БИС АЦП 1113ПВ1 с компьютером с помощью УКПО. Условное обозначение БИС, ее подключение к портам УКПО и временные диаграммы работы показаны на рис. 2.58. Видно, процедура чтения кода с АЦП реализуется последовательностью действий: запуск — ожидание готовности — чтение данных.

Рис. 2.58. Подключение БИС АЦП 1113ПВ1.

// *** Программа чтения данных из БИС АЦП 1113ПВ1


⇐ Предыдущая страница| |Следующая страница ⇒