Изучение принципов программирования платы расширения содержащей параллельный периферийный адаптер с использованием интегрированной среды разработки языка программирования С++ Builder 5, страница 4

В дальнейшем, для использования в лабораторной установке БИС ППА платы расширения 5600 будет настроен в режим «0», каналы А и В настраиваются на ввод, канал С на вывод. Код управляющего слова ППА, решающий поставленную задачу, представляет собой константу 0х92.

          Итак, в общем случае работа с БИС плат расширения предполагает запись необходимых кодов (констант) в соответствующие регистры или чтение кодов из регистров. Конкретные действия определяются назначением БИС. Очевидно, что в языке программирования необходимо иметь функции записи/чтения кодов регистров БИС.

          Использование платы расширения в прикладной программе требует в начале программы сделать так называемое «открытие» платы. Открытие платы расширения представляет собой создание специальной переменной (в виде целого длинного числа (32 разряда)), которое в функциях записи/чтения кодов БИС будет идентификатором конкретной платы расширения с которой идет работа. В наших программах это будет переменная Hdevice объявленная типа long в которую заносится 32 разрядное число с помощью функции OpenDevice(N).

          Открытие платы расширения происходит с помощью функции OpenDevice( ), например:

          Hdevice  =  OpenDevice (N);

          Где N – десятичный номер платы расширения (0 - N) в списке плат расширения компьютера;

          Hdevice - переменная в которой хранится константа (длинное, целое 32 разрядное число);

          В конце программы необходимо «закрыть» плату расширения с помощью функции CloseDevice (  ), например:

          CloseDevice ( Hdevice );

          Тем самым сообщая операционной системе об окончании работы с данной платой расширения в конкретной прикладной программе и давая возможность другим прикладным программам работать с данной платой.

          Запись/чтение кодов БИС плат расширения производится с помощью функций ввода/вывода, соответственно:

          WriteDeviceData (Hdevice, &DataIO[i], k);

          ReadDeviceData (Hdevice, &DataIO[i], k);

          Где:

          Hdevice – переменная, определяющая плату расширения с которой ведется работа;

          DataIO – имя массива данных типа структура в котором располагаются адреса и коды регистров БИС, используемые при записи/чтении. (Будет рассмотрено далее);

          DataIO[i] –   элемент массива данных, номер которого определяется переменной i;

          &DataIO[i]  –   взять адрес элемента массива данных с номером i;

          k –   количество элементов массива, начиная с номера i, используемых при работе функции записи/чтения.

          Тип данных типа структура используются в дальнейшем как тип данных каждого элемента массива, который используется в функциях записи и чтения регистров БИС.

          Структура объединяет несколько переменных, возможно разного типа, в нашем случае одного типа.

          Тип данных структура используемых в дальнейшем имеет вид:

          typedef struct

          {

              unsigned short int port, value;

          } TDataIO;

          Где:

          struct – ключевое слово для объявления структуры;

          port, value – переменные объявленные (как беззнаковые, целые, короткие (16 разрядов каждая) ) в структуре;

          TDataIO – имя переменной типа структура;

          Typedef – оператор позволяющий назначать имена новым типам данных.

          В целом же эту конструкцию надо рассматривать так:

          Имя – TDataIO будет определять тип данных типа структура, рассмотренная выше.

          Следовательно, в дальнейшем TDataIO следует рассматривать как тип данных объявленных для каких либо переменных, например в массиве.

          Тип данных типа одномерный массив структур будет иметь следующий вид:

          TDataIO DataIO [   ]  =

          {

                    { port, value },

                    { port, value },