Программирование порта LPT в Visual Basic. Использование принтерного порта для управления внешними устройствами

31.01.2023 Сервисы

Компьютер обрабатывает сигналы параллельными потоками, поэтому ему легче «общаться» с параллельными, а не с последовательными внешними портами. В 1984 г. в составе IBM PC впервые появился параллельный порт. Задуман он был как средство подключения матричных принтеров, отсюда и название LPT - Line PrinTer или Line Printer Terminal. В дальнейшем для принтеров стали использовать быстродействующий интерфейс USB, а LPT-порт начал постепенно вытесняться из компьютерных спецификаций. Остряки сравнивают LPT с чемоданом без ручки - и выбросить жалко, и тащить невозможно. Тем не менее, «ветеран» ещё на многое способен, если, конечно, он присутствует в конкретном компьютере.

Разъём LPT-порта имеет 25 контактов. Нормой «де-факто» считается розетка DB-25F в компьютере и вилка DB-25M в ответном кабеле (Табл. 4.2). Нумерация контактов вилок и розеток зеркальная (Рис. 4.7, а, б).

Таблица 4.2. Раскладка сигналов в 25-контактном разъёме LPT-порта

Расшифровка

Направление

Вход/выход

Вход/выход

Подтверждение

Готовность

Нет бумаги

Автоперенос

Вход/выход

Инициализация

Вход/выход

Выбор входа

Вход/выход

Рис. 4.7. Внешний вид спереди 25-контактных разъёмов LPT-порта: а) розетка DB-25F в компьютере; б) вилка DB-25M в соединительном кабеле.

Первоначально линии LPT-порта были однонаправленными SPP (Standard Parallel Port). Часть из них работала только на вход, часть - только на выход, что по набору сигналов и протоколу обмена соответствовало принтерному интерфейсу «Centronics». В 1994 г. был утверждён новый стандарт параллельного интерфейса IEEE 1284, предусматривающий двунаправленные линии и три режима работы: SPP, EPP (Enhanced Parallel Port), ECP (Extended Capabilities Port).

Уровни электрических сигналов LPT-порта совпадают с обычными «пятивольтовыми» логическими микросхемами. Раньше в компьютерах применялись буферные TTJl-микросхемы серии 74LSxx, позднее - КМОП-микросхемы и БИС, примерно эквивалентные серии 74ACxx. В последнем случае можно ориентировочно считать, что НИЗКИЙ уровень равен 0.1..0.2 В, а ВЫСОКИЙ - 4.5…4.9 В.

Стандартом регламентируется нагрузка 14 мА по каждому выходу при сохранении напряжения не менее +2.4 В ВЫСОКОГО и не более +0.4 В НИЗКОГО уровня. Однако в разных материнских платах выходные буферы LPT-порта могут иметь разную нагрузочную способность, в том числе и ниже стандарта («слабый» порт).

Требования к соединительным кабелям, подключаемым к LPT-порту:

Сигнальные провода должны быть свиты в пары с общим проводом GND;

Каждая пара должна иметь импеданс 56…68 Ом в диапазоне частот 4… 16 M Гц;

Если применяется плоский ленточный кабель, то сигнальные провода должны физически чередоваться с общим проводом GND (локальные экраны);

Уровень перекрёстных помех между сигналами не более 10%;

Кабель должен иметь экран, покрывающий не менее 85% внешней поверхности. На концах кабеля экран должен быть окольцован и соединён с «земляным» контактом разъёма;

В разъёме кабеля можно запаять на контакты 1…17 последовательные резисторы C2-23 (OMJIT-O.125) сопротивлением 100…300 Ом (Рис. 4.8). Это позволит защитить компьютер от случайных коротких замыканий в нагрузке и уменьшить высокочастотный «звон» на фронтах сигналов.

Рис. 4.8. Электрическая схема LPT-кабеля с «антизвонными» резисторами.

Схемы соединения MK с LPT-портом можно разделить на три группы:

Приём сигналов от компьютера (Рис. 4.9, а…з);

Передача сигналов в компьютер (Рис. 4.10, а…д);

Приём/передача сигналов одновременно (Рис. 4.11, a…e).

В схемах приняты некоторые упрощения. В качестве входного сигнала указывается в основном «DO», а в качестве выходного - «АСК», хотя могут быть и другие, перечисленные в Табл. 4.2. На каждом конкретном компьютере работоспособность самодельных схем необходимо проверять экспериментально, что связано с наличием «сильных» и «слабых» LPT-портов по нагрузочной способности.

Рис. 4.9. Схемы ввода сигналов из LPT-порта в MK (начало):

а) резистор R1 ограничивает входной ток. Элементы R2, C1 могут отсутствовать, но они уменьшают «звон» на фронтах сигналов при длинном кабеле;

б) буферный транзистор VT1 инвертирует сигнал. Диод VD1 не обязателен, но он защищает транзистор от ошибочной подачи большого отрицательного напряжения. Если не ставить резистор R2, то схема останется работоспособной, однако при отстыковке кабеля от LPT-порта возможны ложные срабатывания транзистора VT1 от внешних помех и наводок;

в) диод VD1 отсекает помехи и повышает порог срабатывания транзистора VT1. Резистор R1 надёжно закрываеттранзистор VT1 при НИЗКОМ уровне с LPT-порта;

г) буферный логический элемент DD1 имеет выход с открытым коллектором. Фронты сигналов формируются элементами R1, C1. Можно вместо инвертора DD1 поставить повторитель К155ЛП9, сделав соответствующие изменения в программе MK и компьютера;

д) триггер Шмитта DD1 (замена - К555ТЛ2) повышает помехоустойчивость. Чем меньше сопротивление резисторов R1, R2, тем больше крутизна фронтов сигнала. При отключённом кабеле от LPT-порта резистор R1 не даёт входу микросхемы DD1 «висеть в воздухе»;

е) последовательное включение двух логических элементов DD11, /)/)/.2увеличивает (восстанавливает) крутизну фронтов сигнала. Резистор R1 устраняет выбросы, «звон»;

Рис. 4.9. Схемы ввода сигналов из LPT-порта в MK (окончание):

ж) данные, поступающие от LPT-порта, предварительно помещаются в промежуточный регистр DD1. Запись производится при ВЫСОКОМ уровне на входе «С» микросхемы DD1, хранение - при НИЗКОМ. Такое решение устраняет помехи, поскольку в LPT-порт в зависимости от установленных в компьютере драйверов периодически могут выводиться случайные данные. Их устраняют программно, например, путём многократного считывания входного сигнала с линий MK;

з) буферизация LPT-порта мощными транзисторными ключами, находящимися в микросхеме DA1 фирмы Texas Instruments. Резисторы R1…R8 могут иметь в 10… 15 раз более низкие сопротивления, что позволяет подключить параллельно выходам микросхемы А4/другие узлы устройства.

Рис. 4.10. Схемы вывода сигналов из MK в LPT-порт (начало):

а) непосредственное подключение выхода MK без буферных элементов. Резисторы R1, R2 уменьшают отражение сигналов в линии. Кроме того, резистор R2 защищает выход MK от случайного короткого замыкания с цепью GND в проводах соединительного кабеля;

б) триггер Шмитта DD1 служит защитным буфером для MK при аварийной ситуации на выходе (короткое замыкание или подача большого напряжения);

в) микросхема DD1 имеет выход с открытым коллектором, что защищает её от короткого замыкания в проводах и разъёмах соединительного кабеля;

г) подача двух противофазных сигналов в компьютер. Цель - программная необходимость или организация дублирующего (контрольного) канала передачи данных;

д) опторазвязка на элементах HL1, BL1, которые применяются в компьютерных механических «мышах». Транзистор КГ/усиливает и инвертирует сигнал. Для нормальной работы устройства компьютер должен выставить ВЫСОКИЙ уровень на линии «D8».

Рис. 4.11. Комбинированные схемы ввода/вывода сигналов между MK и LPT-портом (начало):

а) если компьютер выставляет на линии «DO» ВЫСОКИЙ уровень, то MK в режиме выхода может генерировать сигнал «АСК» через резистор R1. Если MK переводится в режим входа, то компьютер может передавать ему данные по линии «DO» через диод VD1 при этом внутренний « pull-up» резистор MK формирует ВЫСОКИЙ уровень;

б) сигнал от LPT-порта вводится в MK через инвертор на транзисторе VT1 при этом компьютер должен выставить ВЫСОКИЙ уровень на линии «D2». Информация в MK вводится с линии «DO» через резистор R1 Высокое сопротивление резистора R1 физически развязывает входной и выходной каналы;

Рис. 4.11. Комбинированные схемы ввода/вывода сигналов между MK и LPT-портом (окончание):

б) сигнал от LPT-порта вводится в MK через инвертор на транзисторе VT1, при этом компьютер должен выставить НИЗКИЙ уровень на линии «DO». Информация в МК вводится через элементы R1, R3, VT2;

г) сигнал от LPT-порта вводится в MK через повторитель на транзисторе VT1, при этом компьютер должен выставить ВЫСОКИЙ уровень на линии «DO». Информация в MK вводится через повторитель на микросхеме DD1\

ж) сигналы «D0»…«D3» вводятся в MK при НИЗКОМ уровне на линии «INIT», при этом компьютер должен настроить линии «D4»…«D7» как входы. В настройках BIOS компьютера надо установить двунаправленный режим EPP или ЕСР для LPT-порта. Информация в компьютер из МК передаётся по линиям «D4»…«D7» при ВЫСОКОМ уровне на линии «INIT». Резистор R1 переводит выходы микросхемы DD1 в Z-состояние при отключённом кабеле от LPT-порта;

e) сигнал от MK в LPT-порт вводится через повторитель DD1.2, при этом компьютер должен выставить ВЫСОКИЙ уровень на линии «D2» и НИЗКИЙ уровень на линии «D5». Информация в MK вводится через повторитель DD1.1 при НИЗКОМ уровне налинии «D2». Стробирование сигналов по входам «Е1», «Е2» микросхемы DD1 повышает достоверность передачи данных.

Д. ЗАХАРОВ, г. Прокопьевск Кемеровской обл.

Овладев управлением интерфейсными портами компьютера, радиолюбитель может подключать к ним различные сигнальные и исполнительные устройства и датчики, превращая компьютер в центр управления бытовой электроникой, системой охраны квартиры или в измерительный прибор. Наиболее привлекателен для начинающего параллельный порт LPT, исходно предназначенный для подключения к компьютеру принтера. Отсюда происходит и аббревиатура LPT - Line Printer Terminal (первые принтеры печатали информацию "line by line" - построчно). Позже область применения этого порта значительно расширилась, к нему стали подключать самые разные периферийные устройства. К сожалению, сегодня его (как, впрочем, и другие порты компьютера) постепенно вытесняет быстродействующая универсальная последовательная шина USB.

Разъем порта LPT на системном блоке компьютера - 25-контактная розетка DB-25F. На ее контакты можно подавать и снимать с них логические сигналы уровней, характерных для микросхем структуры ТТЛ. Логически низким считается напряжение 0...0,8 В, высоким - 2,4...5 В. Соединять выходные контакты разъема с общим проводом или с источником напряжения, не превышающего +5 В, рекомендуется только через резисторы сопротивлением не менее 300 Ом. Не допускается подавать как на входы, так и на выходы порта отрицательное напряжение или положительное более 5 В. Подключать к порту и отключать что-либо от него можно только при полностью отключенном от сети 220 В компьютере (сетевая вилка вынута из розетки). Если подключаемое устройство имеет сетевое питание, оно тоже должно быть физически отсоединено от сети.

Несоблюдение этих требований может иметь тяжелые последствия. Если расположенная внутри компьютера микросхема контроллера параллельного порта выйдет из строя, потребуется ремонт или замена материнской платы.

При включении компьютера его параллельный порт работает в режиме Centronics - простейшем и традиционном для этого порта с момента его появления в компьютерах. Иногда этот режим называют Simple Parallel Port (SPP). Более сложные режимы ЕРР и ЕСР используются, как правило, для скоростного обмена информацией с лазерными принтерами и сканерами. Мы их рассматривать не будем, потому что программирование работы с портом в таких режимах доступно лишь опытным программистам.

С точки зрения программы порт LPT в режиме Centronics представляет собой три восьмиразрядных регистра в пространстве ввода-вывода микропроцессора: регистр данных DR по адресу &Н378, регистр состояния принтера SR по адресу &Н379 и регистр управления принтером CR по адресу &Н37А. Указанные адреса относятся к порту LPT1, обычно единственному в компьютере. Если в нем имеются другие параллельные порты, им также отводят по три регистра с последовательными адресами. Например, регистры порта LPT2 обычно имеют адреса &Н278-&Н27А.

Входы и выходы регистров порта (правда, не все) соединены с контактами интерфейсного разъема, как показано на рис. 1.

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

Работать с портом LPT можно практически в любой среде программирования и операционной системе. Наиболее доступными считаются среды Visual Basic и Delphi, причем во всем, что требуется для программирования порта, они весьма схожи. Нужно сказать, что современные многозадачные операционные системы (в том числе семейства Windows) не допускают прямых обращений из прикладных программ к портам компьютера. Это сделано для того, чтобы избежать конфликтов между одновременно выполняемыми программами, если они случайно обратятся к одному и тому же порту в один и тот же момент времени. Связь с портами возможна лишь через специальные программы-драйверы, автоматически выполняющие все, что необходимо для разрешения конфликтов. Программисту остается лишь написать несколько управляющих команд.

Мы будем использовать одну из самых популярных библиотек таких программ - Inpout32.dll второй версии, которую легко найти в Интернете. Она применима в различных средах программирования и операционных системах. Работая в Windows 98, файл lnpout32.dll необходимо скопировать в папку C:\Windows\system\, а в Windows ХР - в папку C:\Windows\system32\. Во многих случаях достаточно просто поместить этот файл в папку исполняемой программы. Для программирования в DOS дополнительные драйверы не нужны, достаточно предусмотренных в используемом языке программирования обычных команд ввода-вывода в порт.

Дальнейшее изложение относится к работе с параллельным портом в системе программирования Visual Basic 6.0 под управлением Windows ХР. Для ее освоения разработана простая программа. Ее проект, в том числе исполняемый фаил test.exe и файл главной (и единственной) формы Form1.frm приложены к статье. При запуске этой программы на экране монитора появится окно, показанное на рис. 2.


Нажимая в нем на экранные кнопки и вводя числа в соответствующие поля, можно устанавливать уровни напряжения на выходах порта и считывать состояние его входов (оно будет отображено числом в соответствующем поле). Библиотеку для работы с портом LPT "подключает" к программе фрагмент файла Form1.frm, показанный в таблице.


Прежде всего, разберем работу с регистром управления CR (напомним, его адрес - &Н37А). В рассматриваемом случае ее выполняет подпрограмма

Private Sub Command4_click()
out &H37A, Text2.Text
End Sub

При нажатии на экранную кнопку Command4 ("Отправить") она записывает в регистр по адресу &Н37А двоичный код, соответствующий десятичному числу, введенному в поле над этой кнопкой.

Для наглядности соберем и подключим к разъему LPT светодиодный узел по схеме, изображенной на рис. 3.


Введем в нужное поле число 4 (двоичное 00000100) и нажмем на кнопку "Отправить". После этого все четыре светодиода окажутся включенными. Дело в том, что разряды CR, CR и CR соединены с контактами разъема через инверторы, поэтому при записи 0 в эти разряды уровни на соответствующих им контактах стали высокими. Чтобы включить только светодиод HL3, нужно ввести число 15 (двоичное 00001111), а при вводе числа 11 (двоичное 0001011) все светодиоды будут выключены. Старшие разряды регистра управления (CR-CR) с контактами разъема не соединены, поэтому их состояние в данном случае никакого значения не имеет.

Чтобы изучить работу с регистром состояния SR, подключим к разъему порта узел, схема которого изображена на рис. 4.


При разомкнутых выключателях SA1-SA5 через резисторы R1-R5 на контакты разъема поступает напряжение высокого логического уровня. Его источником могут быть любой сетевой адаптер с выходным напряжением 5 В, батарея из трех гальванических элементов и даже один из выходов порта LPT, на котором описанным ранее способом установлен нужный уровень напряжения. Во многих компьютерах резисторы, по назначению аналогичные R1- R5, уже имеются, в установке внешних резисторов в таких случаях нет необходимости.

При нажатии на экранную кнопку "Принять" будет выполнена подпрограмма

Private Sub Command5_c1ick()
Text3.Text = Inp(&H379)
End Sub

Она выведет в поле над кнопкой число, отображающее содержимое регистра SR. Если все выключатели (рис. 4) разомкнуты, это будет 126 (двоичное 01111110), а если они замкнуты - 134 (10000110). Значения разрядов SR- SR соответствуют уровням, поданным на соответствующие контакты разъема, а значение разряда SR инверсно уровню на контакте 11. Так как младшие разряды SR-SR на разъем не выведены, их значения не зависят от поданных на его контакты сигналов.

Главный регистр порта - регистр данных DR по адресу &Н378. Именно через него печатаемая информация побайтно передается на принтер. Все восемь разрядов регистра соединены с контактами разъема, причем без инверторов. Эти восемь цепей часто объединяют названием "шина данных". В исходном состоянии она работает только на вывод. Однако почти во всех современных компьютерах имеется возможность переключить ее на параллельный ввод восьмиразрядных двоичных кодов. Для этого достаточно записать единицу в разряд CR регистра управления.

К сожалению, в режиме Centronics никакие сигналы о том, в каком направлении работает шина данных порта LPT, на его разъем не выводятся. Поэтому необходимо соблюдать особую осторожность и подавать на эту шину внешние сигналы, только удостоверившись, что ее программное переключение "на прием" выполнено. Иначе могут быть повреждены интерфейсные микросхемы как самого компьютера, так и подключенного к порту источника сигналов. Этот недостаток устранен в режимах ЕРР и ЕСР, где предусмотрен полный набор сигналов управления направлением передачи информации по шине данных параллельного порта.

В рассматриваемой тестовой программе с регистром данных работает подпрограмма

Private Sub Command3_Click()
Out &H378, Text1.Text
Text1.Text = Inp(&H378)
End Sub

При нажатии на экранную кнопку "OK" она записывает в регистр данных число из поля, находящегося над кнопкой, а затем читает содержимое регистра и отображает его в том же поле. Естественно, если регистр работает как выходной (на экране отмечен пункт "Передача"), число в поле остается прежним. Чтобы убедиться, что логические уровни на контактах 2-9 разъема порта в этом случае соответствуют введенному в поле вручную и записанному в регистр данных числу, подключите к разъему узел, аналогичный тому, схема которого показана на рис. 3, но с увеличенным до восьми числом светодиодов и резисторов.

Операцию переключения шины данных на ввод выполняет подпрограмма

Private Sub Option1_Click()
Out &H37A, 32
End Sub

Ее вызов происходит при нажатии на экранную кнопку с зависимой фиксацией "Прием". Кнопкой "Передача" вызывают аналогичную подпрограмму, отличающуюся лишь тем, что она записывает в регистр управления не 32 (двоичное 00100000), а ноль, возвращая таким образом шину данных в режим вывода.

Когда шина данных переведена в режим ввода, процедура Out в рассмотренной ранее подпрограмме, вызываемой при нажатии на кнопку "ОК", фактически не работает. Однако функция Inp возвращает значение, соответствующее уровням на выводах 2-9, установленных подключенными к ним внешними цепями. В виде десятичного числа оно появляется в поле над кнопкой "ОК". Задавать логические уровни на линиях шины данных можно с помощью узла, подобного использовавшемуся для работы с регистром состояния (рис. 4).

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

Освоив приведенные в статье примеры, мы научились выводить через порт из компьютера 12 и выводить в него 5 логических сигналов либо (в другом режиме) выводить 4 и вводить 13 таких сигналов. Теперь можно разрабатывать гораздо более сложные программы и устройства, подключаемые через порт LPT к компьютеру.

От редакции. Упомянутые в статье и другие необходимые для работы с тестовой программой файлы находятся на нашем FTP-сервере по адресу ftp://ftp.radio.ru/pub/2007/09/testlpt.zip

Радио 2007 №9

Большинство современных принтеров используют lpt порт для подключения. В комплекте идет кабель, который с одной стороны подключается к этому порту, а с другой к USB-разъему компьютера. Но важно найти этот порт, чтобы использовать принтер.

Расположение lpt1 порта принтера

В большинстве моделей lpt-разъем находится на задней или боковой панели, рядом с портом для подключения питания. Если для питания необходимо черный провод (идет в комплекте, обычно похож с проводом питания для компьютера и монитора), то для lpt-порта необходим более тонкий провод. Обычно он серого или белого цвета (реже черного) и подключается к USB-разъему компьютера.

В зависимости от модели

Необходимый порт находится на задней панели, для устройств, которые печатают бумагу в формате А4 и больше. Чаще всего такие устройства используются в офисах или дома. На боковых же панелях такие разъемы используют для устройств в магазинах и торговых точках, например, для печатания этикеток или чеков. Устройства с разъемом передней и верхней панелях практически не встречаются, поскольку это сделает процесс печатания неудобным. Кабеля постоянно будет контактировать с бумагой.

Справка! На нижней панели тоже разъем не делают, поскольку тогда устройство не сможет стоять на столе.

Как подключить принтер через lpt1 порт

Для подключения делаем следующее:

  1. Вставляем кабель в lpt-разъем.
  2. Теперь необходимо настройка. Вызываем системное меню. Для этого нажимается кнопка «Пуск».
  3. Выбираем раздел «Принтеры и факсы».
  4. У нас высветит окно со списком подключенных устройств. Нам нужно найти значок принтера, который используется.
  5. Нажимаем на этот значок правой кнопкой мыши.
  6. Выбираем пункт «Свойства».
  7. Открываем вкладку «Порты».
  8. Определяем порт, который используется.

Если устанавливается новое оборудование, делаем следующее:

  1. Открываем «Пуск».
  2. Выбираем «Панель управления».
  3. Открываем ссылку «Принтеры и прочие устройства».
  4. Разворачиваем «Принтеры и факсы».
  5. Указываем «Установка принтера». Эта команда находится на окне, которое открылось с левой стороны.
  6. Пропускаем первое окно мастера.
  7. Нажимая «Далее».
  8. Применяем флажок рядом с надписью «Локальный». Это появляется на втором окне мастера.
  9. Теперь необходимо подождать, пока принтер определится автоматически.
  10. Если мастер не обнаружил подключенное оборудование, нажимаем далее и выбираем функцию «LPT1»:(Рекомендуемый порт).
  11. Теперь необходимо подтвердить сохранения изменений. Для этого нажимаем кнопку «Далее». Выполняем все последующие рекомендации мастера.

Все перечисленные выше шаги можно сделать такие при установке драйвера для устройства. В комплекте идет диск с приложением, которое настраивает автоматически через мастер установки. В таком случае использовать «Панель управления» нет необходимости, все будет сделано автоматически. Но эту функцию поддерживают только современные устройства.

Оборудование работает через два кабеля. Один из них позволяет передавать устройству питание, необходимее для работы. Другой же передает информацию с компьютера (что именно нужно распечатать). Именно для последнего случая и нужен lpt-разъем, к нему подключается соответствующий кабель.

Интерфейсный порт LPT (другие названия параллельный или принтерный порт) используется в персональных компьютерах для подключения различных периферийных устройств. На практике с его помощью чаще всего обслуживались принтеры. Фокусная область применения интерфейса прямо отражается в его англоязычном наименовании: сокращение LPT образовано от Line Print Terminal.

После появления интерфейса USB быстро начал терять свою популярность и в настоящее время по своему прямому назначению применяется редко.

Исполнение LPT-порта

Порт LPT выполнен по параллельной схеме на основе интерфейса Centronics и физически выполнен как 25-контактный двухрядный разъемный соединитель DB25. Кабельная часть выполнена по схеме вилки, соответственно розетка образует приборную часть интерфейса.

Фото LPT разъема на материнской плате

В нижнем ряду помещается 13 контактов, тогда как оставшиеся 12 располагаются в верхнем.

Правильная полярность соединения в собранном состоянии разъема обеспечивается за счет применения механической блокировки, обеспечиваемой устанавливаемой на розетке жесткой металлической юбки трапециевидной формы. Этот конструктивный компонент дополнительно берет на себя функции внешнего кругового экрана.

Из-за большой массы кабеля вилка соединительного шнура в собранном состоянии разъема дополнительно фиксируется на розетке с помощью двух не выпадающих винтов. Это позволяет добиться нужного уровня эксплуатационной надежности.

Схема раскладки проводов по контактам

Распиновка lpt порта , несмотря на большое количество контактов интерфейсного разъема оказывается достаточно простой и приведена в таблице.

Достаточно большое количество сервисных и служебных сигналов обусловлено необходимостью управления работой принтера и поддержкой его взаимодействия с компьютером. При этом обеспечивается только однонаправленная передача данных.

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

В качестве кабеля могут применяться обычные или защищенные индивидуальными экранами витые пары. Допустимо использование плоского шлейфового кабеля. Общая длина шнура не должна превышать 3 м.

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

LPT порт имеет 25 контактов на которых может быть установлено 0 или +5В (0 или 1). Устанавливать значения можно программным путем или с помощью внешнего устройства. Давайте рассмотрим следующий рисунок который поможет нам в работе.
(Сразу признаюсь, рисунок не мой, он взят с сайта www.pcports.ru , где есть много информации на данную тему).

Как мы видим, выводы порта можно разделить на четыре группы. Восемь крастных выводов относятся к регистру Data . Чтобы к нему обращаться, надо знать его адресс: 378h - в 16-ричной системе или 888 - в 10-ричной. Биты этого регистра могут быть установлены (или сброшены) как программно, так и внешним устройством.
Выводы обозначенные черным цветом являются земляными. Все они соединены между собой и для наших целей мы можем использовать любой.
Зеленым цветом обозначены контакты, устанавливать значение которых можно только через внешнее устройство. То есть программно мы их изменить не можем. Мы можем только считывать их состояние. Они относятся к регистру Status , который имеет адрес 379h в 16-ричной или 889 в 10-ричной системе.
И регистр Control , выводы которого обозначены синим цветом. Он как и регистр Status однонаправленный, но тут его состояние изменять можно только программно.
Ну что, надо бы и на практике закрепить. Давай вспомним старый, добрый Ассемблер. Для работы с портами он предоставляем нам две команды: in и out . Команда in загружает данные в аккумулятор из порта устройства ввода/выводы. Пример:

n аккумулятор, порт.

В этом случае можно выводить из портов с адресами до 255. Нам этого недостаточно. Используя регистровую адресацию можно выводить из портов до 65536. Вот пример:

in аккумулятор, dx .

То есть адрес порта должен быть заранее помещен в регистр dx. Команда out наоборот - помещает в порт данные из аккумулятора. Пример: out dx , аккумулятор. Здесь также используется регистровая адресация, что бы можно было работать с портами, адреса которых до 65536. Теперь запускаем наш любимый Делфи, ставим на форму кнопку и по событию ее нажатия пишем следующий ассемблерный код (это называется ассемблерная вставка (примечание Soffrick"а - Inline assembler ) и она записывается между ключевыми словами asm и end ):
(этот пример не будет работать в Windows NT. Потом расскажу как это побороть)

procedure TForm1. Button1Click (Sender: TObject ) ; asm //обозначает, что дальше пойдет ассемблерный код mov dx, 888 //засылаем в регистр dx адрес нашего порта в 10-чной системе mov al, 00000001b //в аккумулятор засылаем "маску" в двоичной сис. out dx, al //выводим в порт (а точнее в регистр Data знач. 00000001 end ;

Теперь обьясню чего мы добились. Давай посмотрим на наш рисунок, а точнее на красные разьемы которые соответствуют битам от D0 до D7 регистра Data. А теперь угадай какой из них мы установили в 1. Правильно, бит D0, а следовательно и контакт №2 установлен в 1. А это значит, что на этом контакте сейчас находится +5 Вольт. Проверяется легко. Нужно взять светодиод и его "+" засунуть во второй контакт, а его "-" в 25-й (тоесть заземлить). Вот тут я должен тебя предупредить, что подключение к LPT порту всяких самодельных устройств (сделанных не грамотно) может обернутся выходом из строя материнской платы. Обычно длинный усик светодиода - это "+" (лучше проверить это с помощью батарейки). Наш светодиод должен загореться. Но вот не задача. Наша программа при нажатии на кнопку ругается. Дай угадаю, у тебя винда не 9х.

Дело в том, что ОС Windows NT (2000, XP) с целью обеспечения безопасности использования совместных аппаратных ресурсов компьютера, запрещает к ним прямой доступ из программ пользовательского режима. И чтобы обратиться к порту, необходимо все операции проводить через драйвер. Я предлагаю использовать библиотеку Inpout32.dll. Скачать ее можно здесь http://www.pcports.ru/files/inpout32.rar . Эта библиотека, при работе с NT, обращения к ней конвертирует в запросы к стандартному драйверу ОС, через который и идет обмен данными с портом. Узнать больше об этой библиотеке и ее авторе можно здесь: http://www.logix4u.net/inpout32.htm . Эта библиотека содержит две следующие функции которые нам пригодятся. Вот их описание:

Inp32(PortAdr: word): byte.

Ей передается адрес порта, а она возвращает значение которое в нем установлено. Внимание, значение передает в десятичной системе. Следующая функция:

Out32(PortAdr: word; Data: byte): byte.

Из описания видно что она тоже может возвращать какой то результат, но нам это не понадобится. Она отсылает в указанный порт указанное значение (тоже в 10-чной сис.). Снова открываем наш отчаянно закрытый после первой попытки Делфи и делаем следующее. Нам необходимо объявить функции из библиотеки. Для этого в нашем исходнике после перечня модулей и перед объявлением типов пишем следующее:
...

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, jpeg; function Inp32(PortAdr: word ) : byte ; stdcall ; external "inpout32.dll" ; function Out32(PortAdr: word ; Data: byte ) : byte ; stdcall ; external "inpout32.dll" ; type TForm1 = class (TForm)

...
Здесь мы объявили две функции. Указали, что вызываться они будут стандартным способом (написав stdcall), а также мы указали, что процедура внешняя и находится в библиотеке (external "inpout32.dll").Кстати, эта библиотека должна находиться в папке вместе с исполняемым файлом. Далее кидаем на форму кнопку и по ее нажатию пишем:

Out32(888,1);

Компилируем, запускаем и о чудо, загорелся наш светодиод. А теперь давай вспомним "маску" (00000001) из предыдущего примера. Наша единица, которая передается во втором параметре в порт 888 (регистр Data) в 10-чной сис. равносильна 00000001 в 2-чной. То есть, если взять еще два светодиода, и "+" одного засунуть в 3-й контакт LPT порта, а "+" другого, например в пятый, а ихние минусы конечно заземлить подключив к 25-му выводу, то для того что бы их все зажечь, надо во втором параметре функции Out32 отправить на порт 11: Out32(888,11), потому что 11, в двоичной системе будет выглядеть так 00001011. Непонятно? Попробуй эти нолики и единички визуально наложить на рисунок, начиная с девятого контакта и до 2-го. Теперь не сложно догадаться, что на контактах 5,3 и 2 будет установлено напряжение +5В и наши светодиоды, которые мы туда засунули, будут гореть. Теперь мы можем сделать что-нибудь по интереснее, например мигалку. Используя таймер это не сложно сделать. Попробуй сам.

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

Written by: Kastor