Лпт разъем. Параллельный порт компьютера

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


Прежде чем двигаться дальше и писать программу, необходимо разобраться с LPT портом, посмотреть из чего он состоит и как нам воспользоваться им в своих целях. Если говорить на бытовом уровне, то можно сказать, что LPT порт это набор контактов, на которых мы можем установить напряжение 0 или +5 В (логическая 0 и 1) из программы или это может сделать внешнее устройство снаружи.



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

Из рисунка видно, что выводы порта можно разделить на четыре группы: это "земляные" выводы. Они обозначены черным цветом (контакты 18-25). Все они соеденены между собой, поэтому для своих разработок в качестве земли можно использовать любой из них.

Красным цветом обозначены выводы так называемого регистра Data (контакты 2-9). Под регистром будем понимать (на бытовом уровне) объдинение группы контактов LPT порта. В регистре Data их 8 штук. Это самый толковый регистр - он позволяет нам как из программы, так и из внешнего устройства установить на его контактах лигическую 0 или 1, т.е. он двунаправленный. Именно его мы и использовали в нашей первой программе Port.exe - подключали светодиод ко 2-му выводу порта (как теперь видно, этот вывод принадлежит регистру Data, является его нулевым битом) и 25 выводу (земля), и спомощью программы управляли подачей напряжения на вывод 2 относительно земли. Чтобы обращаться к этому регистру, надо знать его адрес: 0x378 - в 16-ричной системе или 888 в десятичной.


На рисунке написано &H378 - это тоже самое что и 0x378, просто первое обозначение присуще языку Pasсal и ему подобным, мы же пишем на Си.


Опять вспоминая программу Port.exe , заметим, что обращались мы к регистру с помощью следующей функции _outp(Address, 0); , где переменная Address была предварительно определена как 888. Теперь понятно, что этим мы указывали функции _outp() , что мы хотим работать именно с регистром Data.

Продолжим рассмотрение порта. Осталось еще два регистра. Следующим будет регистр Status (контакты 10-13, 15). Это однонаправленный регистр. Управлять им можно только "снаружи", через внешнее устройство (имеется в виду изменять данные на нем; читать можно из любого регистра в любую строну). Он имеет адрес 0x379 - в 16-ричной системе или 889 в десятичной. И регистр Control (контакты 1, 14, 16-17). Он имеет всего 4 контакта и может управляться только программой. Его адрес: 890 в десятичной системе.



Теперь рассмотрим, а как происходит запись и чтение данных в регистры LPT порта, т.е. как нам установить на нужных выводах 0 или 1.


Запись/чтение данных в регистр Data

Итак, рассмотрим сразу практическую задачу. Хочу чтобы на выводе LPT порта под номером 3 (бит D1 регистра Data ) была установлена логическая 1 (т.е. чтобы между ним и землей было +5 В) и на остальных выводах этого регистра (2,4-9 выводы порта) были нули. Пишем код:

Int Address = 888; int data = 2; Out32(Address, data);

Я использовал функцию Out32() библиотеки inpout32.dll , будем привыкать к ней, т.к. дальнейшие примеры будем разбирать именно на этой библиотеке. Если этот код выполнить, то получится что на выводе порта 3 есть +5 В, а на 2,4-9 "висит" ноль. Как это получилось?

Начнем разбираться: первым параметром функции Out32() мы передаем число 888. Как вы уже знаете, это адрес регистра Data LPT порта. Теперь функция знает куда ей писать данные. Далее вторым параметром мы передаем число 2, т.е. значение для записи в порт. Прошу обратить внимание, что двоика в десятичной системе счисления. Что происходит далее? Для лучшей визуализации процесса, переводим число 2 из десятичной в двоичную систему счисления. Каждый разряд двоичного числа справо на лево записывается по порядку в регистр начиная с младшего разряда D0 (вывод 2 порта) и заканчивая старшим D7 (вывод 9). Если вы переведете число 2 из десятичной в двоичную систему счисленияи дополните число по 8 разрядов (по числу разрядов в регистре) то получите 00000010 . Нулевой разряд двоичного числа - 0 (самую правый) записывается в D0, далее 1 записывается в D1. И так до конца, все 8 разрядов.

Ну что, устали немного пока прочитали? Сейчас станет понятнее. Давайте в регистр Data запишем число 245. Пишем код:

Int Address = 888; int data = 245; Out32(Address, data);

Опять переводим 245 в двоичную систему счисления и справо на лево записываем разряды числа в соответсвующие биты регистра. В итоге получим, что на выводах LPT порта под номерами 2,4,6-9 присутствует напряжение +5 В, на выводах 3,5 - ноль.

Ну что, теперь я думаю, с записью данных в регистр Data мы разобрались. Надо отметить, что диапозон десятичных чисел, которые можно записать в регистр Data лежит в пределах от 0 до 255 . Регистр он у нас 8-ми разрядный, значит максимальное число комбинации 0 и 1 на его выводах составляет 2 8 -1=256-1=255.


Чтение данных

Теперь давайте считаем ранее записанные данные в порт, а именно узнаем текущий статс регистра Data . Мы хотим узнать, на каких выводах регистра Data сейчас высокий уровень напряжения, а на каких низкий. Помните, выше мы записали в порт число 245? Давайте его сейчас получим из порта. Пишем код:

Int Address = 888; int data; data = Inp32(Address);

Inp32() - это функция для чтения данных из порта библиотеки inpout32.dll . Единственным параметром для нее является адрес того регистра, откуда мы хотим прочесть данные. На выходе она возвращает десятичное число, соответствующее текущему содержомому регистра. Выполнив этот код, переменная data будет содержать число 245. Что это значит? Чтобы разобраться, переводим число 245 из десятичной в двоичную и смело можем сказать что на выводах порта 2,4,6-9 сейчас +5 В а на выводах 3,5 0 В. (см. рисунок выше)


Запись/чтение данных в регистр Control

Теперь поуправляем регистром Control. Он однонаправленный, данные в него может записать только наша программа. Обратите внимание на несколько особенностей этого регистра. Во-первых, он содержит всего четыре рабочих вывода. Значит в него можно записать число в диапозоне от 0 до 2 4 -1=16-1=15. Во-вторых, он имеет очень непрятную особенность: некоторые из его выводов инвертированы, т.е. если вы на этот вывод пишете 1, то на ней устанавливается 0. И наоборот, читаете 1, а на самом деле там 0. Поэтому, значение записываемых данных и читаемых данных не совсем очевидны. Приведу пример записи числа в регистр Control. Пишем код:

Int Address = 890; int data = 10; Out32(Address, data);

И пример чтения:

Int Address = 890; int data; data = Inp32(Address);

Запись/чтение данных в регистр Status

Наконец, добрались до регистра Status . Он однонаправленный, данные в него может записать только внешнее устройство , т.е. мы в программе можем только читать содержимое этого регистра. Причитав данные из Status , и переведя их в двоичное число, сразу довольно трудно понять что же реально творится с напряжениями на выходах этого регистра. Во-первых, он тоже имеет инвертированные выводы, а во-вторых рабочими являются биты под номерами 4-7, а 0-3 не используются, и следовательно число записывается довольно хитро.

Возникает вопрос, а как эти данные на нем установить? Довольно просто. В качестве внешнего устройства, пока, будете выступать вы. Выполните такой код.

Int Address = 889; int data; data = Inp32(Address);

Вы получите некоторое число. Теперь возмите проводник и соедините им любой из земляных выводов порта (18-25) с каким-нибудь выводом регистра Status (10-13, 15), например с десятым. И снова выполните чтение. Вы получите другое число. Уберите проводник. Прочитав, получете исходное число. Как это работает? Исходно, на всех выводах этого регистра находится высокий уровень напряжения +5 В. Когда мы соеденили один из его выводов с землей, то на нем, соответственно, напряжение стало равным нулю, т.е. логический ноль. Можно попробовать замыкать и другие выводы регистра Status на землю, замыкать сразу несколько.

Следует заметить, что при таких опытах с регистром Status возникает не совсем понятная ситуация с другими выводами порта LPT. После первого замыкания выводов Status , начинают мигать выводы Data и Control . Это связано с тем, что порт LPT предназначен для подключения принтера, а выводы Status он использует, для того чтобы сообщить компьютеру некоторую служебную информацию. Изменения на выводах Status регестрирует системный драйвер операционной системы. Он же проводит и ответные действия, для нас наблюдаемые в виде периодического изменения состояния других выводов. Тут уж ни чего не поделаешь. Я обычно, просто в начале работы с портом далаю замыкание какой-нибудь линии регистра Status на землю и жду примерно минуту, пока драйвер не "утихомирится". После этого порт свободен, и новые операции над регистром Status не приводят к неконтролируемым процессам в порту.


© Дмитрий Иванов
2005-2006

Дмитрий Иванов, 21 Сентября 2009 Статья доработана и обновлена 23 Января 2012

За время существования этого сайта мне довольно часто задают один и тот же вопрос, который можно описать примерно следующим образом:



В итоге решил описать этот вопрос подробнее и написать статью. Да, действительно, сейчас стационарных PC с LPT портом нужно поискать (т.е. далеко не каждая "мать" сейчас идет в комплекте с LPT портом). Про ноутбуки вообще говорить не приходится. Современные модели LPT порт вообще не применяют. Только очень дорогие и специализированные машины, типа DELL, могут "похвастаться" наличием этого порта.

Также, сейчас в продаже можно свободно приобрести вот такие устройства, называемые LPT-USB переходниками.

Инстркуция гласит что этот прибор полностью совместим с различными принтерами, сканерами и т.д. Подключаем переходник к USB порту, устанавливаем драйвера. Смотрим диспетчер устройств. Скорее всего в ветке "Порты LPT/COM" ни чего не появилось (хотя бывают исключения). Скорее всего повится либо новая ветка со странным устройством с именем, например, LPT1USB либо в разделе USB устройств появится странная запись о "USB устройстве поддержки LPT принтеров" . Пробуем запустить какой-нибудь пример из статей выше. И ни тут то было - ни чего не работает. Пробуем адрес порта LPT1 - ни чего не работает. Пробуем адресс порта LPT2. К сожалению, такая модернизация адреса в запросах тоже ни к чему не приводит - светодиоды как не загорались так и не загораются.

Чтобы разобраться в чем тут дело давайте вернемся на время к обычному "родному железному" LPT порту - LPT1, который из материнской платы "торчит". Зайдем в диспетчер устройств, заглянем в свойства нашего порта. Там мы увидим вот такую картину. Отлично видно, что система прописала базовый адрес ввода-вывода 0x378 и запрос на прерывание номер 7. Все правильно.

Теперь погрузимся на уровень программирования. В примерах статей выше мы минуя систему защиты ввода-вывода легальными и нелегальными способами напрямую общались с реально существующим регистром ввода-вывода, которому присвоен адрес 0x378. Тут все понятно. Незабудем также о том, что Windows рекомендует работать с LPT портом используя вызовы API функций - OpenFile(), WriteFile(), ReadFile() . Приложения, которые используют LPT порт для обмена информацией по парралельному интерфейсу с внешними устройствами (принтер, например) так и делает. У него нет задачи установить на каком-либо бите регистра Data лигическую еденицу. Ему (приложению) нужно просто отправить пакет данных, а кто там будет какие линиии при этом "дергать" и считывать его не сильно интересует. Эти операции проводит системный драйвер LPT порта. Он подгружается в память при загрузке ОС. Когда мы вызываем функцию OpenFile("LPT1", ....) мы по сути дела обращаемся к драйверу порта, который имеет символическое имя LPT1. Драйвер делает кучу всякой работы - запрещает доступ к порту другим процессам, настраивает параметры протокола передачи данных, собственно реализует эту передачу, но в конечном итоге все это сводится к прямому управлению отдельными битами LPT порта на уровне ядра ОС.

А теперь попробуем поработать с нашим переходником USB-LPT. Начнем как не покажется странным, с API вызовов. Запускаем OpenFile("LPT1USB", ...) (смотря как этот переходник диспетчере устройств назовется, если вообще назовется). Что при этом происходит? Дело в том, что теперь мы будем работать не с драйвером LPT порта ОС а с драйвером этого переходника! Вот в чем фокус то! Он принимает пакет данных от нашего пользовательского приложения и в нужном формате через систмный драйвер USB отсылает этот пакет на USB контроллер, "ноги" которого торчат из внешней LPT розетки на проводе (ну это так, "грубое объяснение"). Видете, здесь нет ни какого намека на обращение к регистрам по адресам 0x378(0x278), т.к. их просто нет!

Поэтому, когда Вы патаетесь запускать примеры данного раздела и обращаться напрямую по адресам 0x378 (если этот "псевдо порт" назвался LPT1USB или что-то в этом духе), 0x278 (LPT2_...) и т.д. ни чего не происходит. Их просто нет! А вот программа котороая работает через API вызовы ни чего не заметит - вся низкоуровневая работа делается драйвером, а каким драйвером и куда пойдут пакеты данных (в реальный порт ввода-вывода или в USB хост-контроллер) - приложению неважно! Попробуйте открыть свойства "псевдопорта" в диспетчере устройств. Нет вкладки с ресурсами? Есть, но там каие-то неадекватные значения или вкладка деактивировнна? В том то и дело.



Почему 99%? Потомоу что есть самодельниые USB-LPT переходники, которые определяются Windows как полноценный порт LPT1 и ему присваивается вполне обыденный адрес 0x378. Обращения на прямую к пинам порта проходят успешно! Однако это очень нестандартная конструкция (в первую очередь драйвер, который занимается перехватом обращений по базовому адресау порта LPT1). Все это не очень надежно (обновление ОС - и конструкция теряет работоспосбность) и для использования рекомендовано быть может только с натяжкой.



Как ни покажется странным - решение ЕСТЬ. Вы всегда сможете добавить настоящий LPT порт в свой настольный компьютер или ноутбук. Во-первых, забудте сразу о переходниках с интерфейсом USB. Для решения этой задачи необходимо приробрести PCI-LPT переходник для настольного PC (необходимо наличие свободного PCI слота) или PCMCIA-LPT переходник для ноутбука (см. фото ниже).


В случае использования этих устройств ни каких проблем нет. Определяются они как настоящие "родные" LPT порты. Соответствующая запись будет добавлена в диспетчер устройств во вклдаку "LPT/COM порты" . Прямое обращение к пинам порта будет работать.

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

Овладев управлением интерфейсными портами компьютера, радиолюбитель может подключать к ним различные сигнальные и исполнительные устройства и датчики, превращая компьютер в центр управления бытовой электроникой, системой охраны квартиры или в измерительный прибор. Наиболее привлекателен для начинающего параллельный порт 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

Скачать распиновку порта принтера:

IEEE 1284 (порт принтера, параллельный порт, англ. Line Print Terminal, LPT) - международный стандарт параллельного интерфейса

В основе данного стандарта лежит интерфейс Centronics и его расширенные версии (ECP, EPP).

Название «LPT» образовано от наименования стандартного устройства принтера «LPT1» (Line Printer Terminal или Line PrinTer) в операционных системах семейства MS-DOS. Интерфейс Centronics и стандарт IEEE 1284

Параллельный порт Centronics - порт, используемый с 1981 года в персональных компьютерах фирмы IBM для подключения печатающих устройств, разработан фирмой Centronics Data Computer Corporation; уже давно стал стандартом де-факто, хотя в действительности официально на данный момент он не стандартизирован.

Изначально этот порт был разработан только для симплексной (однонаправленной) передачи данных, так как предполагалось, что порт Centronics должен использоваться только для работы с принтером. Впоследствии разными фирмами были разработаны дуплексные расширения интерфейса (byte mode, EPP, ECP). Затем был принят международный стандарт IEEE 1284, описывающий как базовый интерфейс Centronics, так и все его расширения.

Виды Разъёмов паралельного порта

Кабельный 36-контактный разъём Centronics для подключения внешнего устройства (IEEE 1284-B)

25-контактный разъём DB-25, используемый как LPT-порт на персональных компьютерах (IEEE 1284-A)

Порт на стороне управляющего устройства (компьютера) имеет 25-контактный 2-рядный разъём DB-25-female ("мама") (IEEE 1284-A). Не путать с аналогичным male-разъёмом ("папа"), который устанавливался на старых компьютерах и представляет собой 25-пиновый COM-порт.

На периферийных устройствах обычно используется 36-контактный микроразъем ленточного типа Centronics (IEEE 1284-B), поэтому кабели для подключения периферийных устройств к компьютеру по параллельному порту обычно выполняются с 25-контактным разъёмом DB-25-male на одной стороне и 36-контактным IEEE 1284-B на другой (AB-кабель). Изредка применяется AC-кабель с 36-контактным разъемом MiniCentronics (IEEE 1284-C) .

Существуют также CC-кабеля с разъёмами MiniCentronics на обоих концах, предназначенные для подключения приборов в стандарте IEEE 1284-II, который применяется редко.

Длина соединительного кабеля не должна превышать 3 метров. Конструкция кабеля: витые пары в общем экране, либо витые пары в индивидуальных экранах. Изредка используются ленточные кабели.

Для подключения сканера, и некоторых других устройств используется кабель, у которого вместо разъема (IEEE 1284-B) установлен разъем DB-25-male. Обычно сканер оснащается вторым интерфейсом с разъемом DB-25-female (IEEE 1284-A) для подключения принтера (поскольку обычно компьютер оснащается только одним интерфейсом IEEE 1284).

Схемотехника сканера построена таким образом, чтобы при работе с принтером сканер прозрачно передавал данные с одного интерфейса на другой. Физический интерфейс

Интерфейс разъема

Базовый интерфейс Centronics является однонаправленным параллельным интерфейсом, содержит характерные для такого интерфейса сигнальные линии (8 для передачи данных, строб, линии состояния устройства).

Данные передаются в одну сторону: от компьютера к внешнему устройству. Но полностью однонаправленным его назвать нельзя. Так, 4 обратные линии используются для контроля за состоянием устройства. Centronics позволяет подключать одно устройство, поэтому для совместного очерёдного использования нескольких устройств требуется дополнительно применять селектор.

Скорость передачи данных может варьироваться и достигать 1,2 Мбит/с.

Стандартные шнуры провода кабеля Centronics IEEE 1284 Printer lpt:

Упрощённая таблица - схема сигналов интерфейса Centronics LPT - разъема

Контакты
DB-25 IEEE 1284-A
Контакты
Centronics IEEE 1284-B
Обозначение Примечание Функция
1 1 Strobe Маркер цикла передачи (выход) Управление Computer
2 2 Data Bit 1 Сигнал 1 (выход) Данные Computer
3 3 Data Bit 2 Сигнал 2 (выход) Данные Computer
4 4 Data Bit 3 Сигнал 3 (выход) Данные Computer
5 5 Data Bit 4 Сигнал 4 (выход) Данные Computer
6 6 Data Bit 5 Сигнал 5 (выход) Данные Computer
7 7 Data Bit 6 Сигнал 6 (выход) Данные Computer
8 8 Data Bit 7 Сигнал 7 (выход) Данные Computer
9 9 Data Bit 8 Сигнал 8 (выход) Данные Computer
10 10 Acknowledge Готовность принять (вход) Состояние Printer
11 11 Busy Занят (вход) Состояние Printer
12 12 Paper End Нет бумаги (вход) Состояние Printer
13 13 Select Выбор (вход) Состояние Printer
14 14 Auto Line Feed Автоподача (выход) Управление Computer
15 32 Error Ошибка (вход) Состояние Printer
16 31 Init Инициализация (выход) Initialize Printer (prime-low) Управление Computer
17 36 Select In Управление печатью (выход) Select Input Управление Computer
18-25 16-17, 19-30 GND Общий Земля

Распайку порта Centronics IEEE 1284 Printer Cable lpt - com9 можно и в виде картинки-изображения

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

Конечно на дворе сегодня 21-й век, в котором уже даже не выпускаются подобные принтеры, также как и на материнских платах, более новых моделей, порт LPT тоже исчез. Это конечно всё верно, но, даже в наше время сейчас у многих подобные принтеры ещё есть и используются, при этом полностью в рабочем состояние, с отличным качеством печати.

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

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

Список самых популярных причин, почему не печатает принтер подключённый по LPT

  • Первым номером в этом списке, является проверка кабеля. Да-да банально, но все же как ни крути сначала проверяем на целостность наш кабель LPT. А именно, что бы на нем не было различных физических повреждений, так же, обратите внимание непосредственно на сами коннекторы, которые подключаются к принтеру и компьютеру, они должны быть тоже в хорошем состояние, без каких либо поломанных частей или креплений.
  • Следующей причиной почему может не печатать принтер подключенный по LPT – это не плотно подсоединён кабель к LPT порту на задней стенке системного блока. На крепление по обеим сторонам присутствуют 2 винта, которые вам нужно обязательно, подключив LPT, закрепить его с помощью отвёртки.Как два незакрепленных винтика могут повлиять на работу принтера? Смотрите, ну например, так, кабель который вы подключили, через время чуть отошел, вследствие чего соединение между устройствами уже не полноценное. В результате, ваш принтер в списке устройств будет отображать состояние «Подключен » но, на самом деле печать не будет работать.

    Этот вариант проверен мной уже не раз на практике, так что такое бывает и очень даже часто, рекомендую не относится к этому совету легкомысленно, а обязательно принять его во внимание.
  • Итак, идем дальше. Третей причинной из-за которой не печатает принтер подключенный по LPT является драйвера. В начале, я упоминал о том, что многие принтеры уже не поддерживаются производителями в виде программного обеспечения, что является очень не удобный для того чесла потребителей которые до сих порт используют подобные устройства.

    Так вот, если у вас Windows 7,8 или 10, рекомендую заходить на сайт производителя и качать от туда драйвера для Windows Vista. Хоть эти операционные системы разные, но архитектура у них одна поэтому, все драйвера, которые идут на Vista подойдут и для остальных более новых систем.Этот вариант я тоже практикую постоянно и он ни разу меня ещё не подводил, принтеры которые не печатали по LPT, начинали работать как ни в чём не бывало.
  • Если вы всё-таки не нашли нужный вам драйвер для вашего устройства (Например: HP LaserJet 5L или 4L ) и вам не подошли, то программное обеспечение, которое заранее установлено в операционной системе, тогда я, вам рекомендую, попробовать скачать «универсальный драйвер для печати ».

    Как правило, подобные драйвера присутствуют у всех производителей принтеров и МФУ. Заметил такую штуку, что при обращение в техническую поддержку с проблемой связанной с драйверами (Например, не можете найти нужный драйвер ), тех. служба сразу же рекомендует попробовать и проверить результат.Скажу от себя, что иногда он помогает, но, попадаются случаи, когда установив этот драйвер, с принтером ничего не происходит и он продолжает молчать как и ранее.Но всё же, если у вас не печатает принтер подключенный по LPT и вы не можете найти нужное вам программное обеспечение, тогда обязательно скачайте и попробуйте тот универсальный драйвер, который вам предложит производитель вашего принтера. Возможно вы окажитесь счастливчиком и он вам поможет, но может быть и на оборот, так что не огорчайтесь.
  • Попробуйте подключить другой LPT кабель. Конечно, если вы не нашли на основном кабеле ни одного повреждения о которых я говорил в первом пункте, тогда скорей всего с ним всё нормально. Но все же, если у вас есть такая возможность как взять совсем другой LPT и подключить его, тогда сделайте это, да бы полностью исключить этот вариант неисправности устройства
  • Иногда, причиной по которой не печатает принтер подключенный по LPT капелью, является неправильная настройка принтера при первом его подключение. А именно, я имею веду тот момент, когда вы начинаете , у вас просят выбрать порт к которому подключено устройство, вам нужно однозначно выбрать LPT1 (Так как на материнской плате обычно присутствует только один порт LPT ).

    Многие по случайности выбирают LPT2 или LPT 3, что неверно и в результате в дальнейшем тратят уйму времени на то, что бы разобраться в чем была ошибка из-за которой не печатает принтер и как её исправить. Так что при выборе порта будьте внимательны, и обязательно выбирайте LPT 1, и тогда всё у вас будет работать нормально.
  • Ну и в заключительном пункте, расскажу о такой штуке, как Parallel port, с помощью которого и подключается принтер к компьютеру. Данный порт включается, отключается и полностью настраивается в БИОСе, кстати, именно из-за этих настроек иногда принтер подключённый по LPT и не печатает.Дело в том, что на некоторых материнках Parallel port по умолчанию отключен и принтер начинает печатать только после его включения. Но, чаще всего это происходит в тех случаях, когда , и все установки сбрасываются к заводским, как в общем и настройки порта.

    В результате при следующем включение принтер уже не будет печатать так, как нужный порт, будет попросту отключен в меню BIOS. Поэтому, и проверяем не отключен ли там нужный нам Parallel por, если стоит «Disable», тогда включаем его и радуемся работе принтера.

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