8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 4 5 6 7 8 9 10 ... 105

От компьютера к принтеру

Линии данных

STR0SE группе контроля

Безразличное состояние

1мкс минимум

и

От принтера к компьютеру

0,5мкс минимум

-1 Омкс

Busy

группе состояния

as"k

б группе состояния

1 Омкс

Рис. 1.5. Временные диаграммы взаимодействия компьютера с принтером

переводит принтер в состояние «занят» (BUSY=1). Принтер принимает и обрабатывает данные, а затем переводит сигнал АСК в низкий уровень для индикации, что принятые данные обработаны. В то же время принтер переводит линию BUSY в низкий уровень.

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

Если к компьютеру подсоединена внешняя схема, то в ней должна быть специальная схема для генерации сигналов BUSY и АСК. Удобнее всего, если ПК при взаимодействии будет использовать только линии АСК. BUSY постоянно соединяется с цифровой «землей» для индикации, что схема готова к приему данных, а РЕ показывает, что в принтере есть бумага; на линию ERROR подается высокий уровень. Если не соединить таким образом линии РЕ и ERROR, при запросе компьютера на печать будут выдаваться сообщения об ошибке. Более гибкий способ управления параллельным портом - непосредственный доступ к регистрам порта.

Непосредственный доступ к регистрам порта

Это метод управления портом при помощи непосредственного доступа к его регистрам. Параллельный порт рассматривается как три отдельных регистра ввода/вывода, два из которых предназначены для вывода данных, а один - для ввода.

Рассмотрим пример управления портом LPT1. Так как адреса регистров данных, управления и состояния имеют номера 888, 890 и 889 соответственно, для


записи информации в регистры данных и управления применяются следующие команды языка QBASIC:

OUT 888, X OUT 890, X

где X - записываемое значение в десятичном представлении. Некоторые линии порта управления инвертированы, что необходимо учитывать при выводе данных. Для чтения данных из регистра состояния можно пользоваться следующей командой:

Y=INP(889)

где Y - десятичное входное значение. Биты входных данных соответствуют номерам с 3 по 7 регистра состояния, некоторые из них инверсные.

Следующие процедуры на языке ТР6 записывают информацию в регистры данных и управления. Обеим процедурам требуются базовый адрес выбранного параллельного порта и значение выходных данных. Выходные данные для регистра управления предусматривают проведение некоторых преобразований над битами.

(•-Библиотека ресурсов № А4 (запись информации в порт данных компьютера)-.*) Procedure Write data port(P address:integer, port data:byte); (*Биты регистра данных не инвертированы,*) begin

port(P address):=port data; («Ввод байта данных в регистр данных.*) end;

(•-Библиотека ресурсов № А5 (запись данных в регистр управления.)-.*) Procedure Write control port(P address:integer; port data:byte); (•Биты 0, 1 и 3 инвертированы. Требуются преобразования над битами.*) begin

if port data and 1=1 then port data:=port data and (255-1)

else port data:=port data or 1; if port data and 2=2 then port data:=port data and (255-2)

else port data:=port data or 2; if port data and 8=8 then port data:=port data and (255-8)

else port data:=port data or 8; port(P address+2):=port data; (*Ввод байта данных в регистр управления.*) end;

Следующая функция на языке ТР6 считывает биты с 3 по 6 из регистра состояния. Она требует базовый адрес выбранного параллельного порта. Функция также выполняет битовые преобразования и возвращает значение четырехбитовых входных данных.

(•-Библиотека ресурсов № A3 (считывание данных в компьютер).-*)

Function Read status port(P address:integer):byte;

var

bytel:byte; begin

bytel:=port(P address+1);(«Считывание байта из регистра состояния.*)

bytel :=byte1 and 120;(*01111000 (от старшего к младшему) and Odddd... = OddddOOO.*)

Read status port:=byte1 shr 3; (*Сдвиг на 3 бита вправо, Read status port=0000hhhh.*) end;


(•-Библиотека ресурсов № А5 (запись данных в регистр управления).-*)

Function Write control port(P address:integer; port data:integer) integer; export;

(♦Биты 0, 1 и 3 инвертированы Требуются преобразования над битами.*)

begin

if port data and 1=1 then port data:=port data and (255-1)

else port data:=port data or 1; if port data and 2=2 then port data:=port data and (255-2)

else port data:=port data or 2; if port data and 8=8 then port data:=port data and (255-8)

else port data:=port data or 8, port(P address+2):=port data; (*Ввод байта данных в регистр управления.*)

(«-Библиотека ресурсов № A3 (считывание данных в компьютер).-*) Function Read status port(P address:integer).integer; export; var

bytel byte; begin

bytel =port(P address+1);(«Считывание байта из регистра состояния *)

bytel =byte1 and 120;(«01111000 (от старшего к младшему) and Odddd = OddddOOO «)

Read status port:=byte1 shr 3; («Сдвиг на 3 бита вправо, Read status port=0000hhhh.*)

Преобразования над битами

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

Вес бита

Соотношения между битами и их весами приведены ниже: бит 01 (десятичное значение)

end;

end,

end;

бит 1 бит 2 бит 3 бит 4 бит 5 бит 6 бит 7

2

4

8

16

32

64

128

В следующих примерах, написанных на языке Turbo Pascal для Windows, представлен ввод и вывод данных через параллельный порт.

(♦-Библиотека ресурсов № А4 (запись информации в регистр данных).-*) Function Write data port(P address:integer, port data:integer); export; (*Биты регистра данных не инвертированы.*) begin

port(P address):=port data(«Ввод байта в регистр данных.*)



0 ... 4 5 6 7 8 9 10 ... 105