Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_СП_2004_1_00.doc
Скачиваний:
69
Добавлен:
04.11.2018
Размер:
882.69 Кб
Скачать

5. Операции ввода/вывода через порты микропроцессоров intel 8086/80286

Все периферийные устройства и внешняя память подключены к системной шине микро-ЭВМ через специальные интерфейсы. Каждый такой интерфейс имеет набор встроенных регистров, называемых портами ввода/вывода, через которые центральный процессор и память взаимодействуют с соответствующими внешними устройствами. Одни порты предназначены для буферирования данных и называются буферными портами или портами данных. Другие служат для хранения информации о состоянии устройства или интерфейса и носят название портов состояния. Третьи, называемые портами управления, используются для получения команд от центрального процессора.

В некоторых компьютерах адреса памяти и портов включены в единое адресное пространство и все команды с обращением к памяти могут обращаться и к портам. В системах же построенных на базе микропроцессоров Intel 8086/80286 допускается организация двух адресных пространств: памяти и ввода/вывода. В этом случае всякий порт снабжается индивидуальным номером, однозначно идентифицирующим его среди всего множества выходных портов. Стандартная библиотека компилятора IBM C/2 предоставляет пользователям две функции с именами inp() и outp(), осуществляющие прямой обмен информацией с портами микропроцессора. Возможность выполнения операций ввода/вывода столь низкого уровня необходима при разработке программных драйверов устройств, однако она может оказаться полезной и при подготовке прикладных программ, требующих взаимодействия с периферийным оборудованием в реальном масштабе времени. Предварительные описания функций inp() и outp() помещены в файл conio.h.

Имя функции и назначение: inp - читает один информационный байт через входной порт с заданным номером

Формат и описание аргументов:

int inp(port)

unsigned port; /* Номер опрашиваемого порта */

Пример использования:

#include <conio.h>

main()

{ char result;

unsigned port = 0x64;

result = inp(port);

printf("Содержимое порта 64H равно %0x\n", (int)result);

}

Имя функции и назначение: outp - записывает один информационный байт в выходной порт с заданным номером

Формат и описание аргументов:

int outp(port, value)

unsigned port; /* Номер выходного порта */

int value; /* Выводимое значение */

Возвращаемое функцией outp значение равно параметру value.

Пример использования:

#include <conio.h>

main()

{ unsigned port = 0x64;

outp(port, 0x03);

}

Лекция 7

Общая структура программы на языке Си. Время существования и видимость переменных. Блоки. Классы памяти. Автоматические, внешние, статические и регистровые переменные. Рекурсивные функции. Реализация рекурсивных алгоритмов. Препроцессор языка Си: включаемые файлы, символические имена и макроопределения. Модели памяти, поддерживаемые компилятором IBM C/2.