Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Работа с LPT портом


Автор: Pilgrim 2.4.2004, 15:19
Люди, помогите!!!
Спаял железяку, требуется управлять ею через LPT. Есть два входа, два выхода. Т.е. включить - выключить и проверить состояние. Весь инет перерыл (а может и нет smile.gif ), не могу найти описание кода (рабочего). С COM портом проблем нет. Вроде работает. Сам, к сожалению не могу написать, так как в программировании ну очень недавно bored.gif .

Автор: December 3.4.2004, 00:08
Какая операционка?

Автор: dm9 3.4.2004, 01:57
Вам, как я понял, нужны простейшие манипуляции, то есть нулевого режима (установлен по умолчанию) вполне хватит. Здесь всё просто: LPT-порту выделено 4 байта с адресами, начинающимися, например, с 278h или 378h. Четвёртый управляющий - он Вам не понадобится. Первый - третий байты в нулевом режиме работают так: что туда напишете, то появится на конкатах (единичка - +5В), что будет подаваться на контакты, то и считаете (тут надо учитывать, что запрограмировать отдельные биты на ввод/вывод не удастся - побайтно или по 4 бита только - см. статью по ссылке ниже).

Распиновка (http://www.pda.com.ua/card/c2.gif):
user posted image

Битам байта 278h или 378h соответсвуют 2-9 контакты. Туда и присоединяйтесь для записи. А для чтения можно, например, к BUSY или ACK и читайте 7 и 6 биты соотвественно байта (адрес_порта + 1).

Простейшая программа на Borland Pascal для работы с Вашим устройством будет выглядеть так:

Код

var x : Byte;
begin
...
Port[$378] := $FF; {Включили}
...
x := Port[$379] shr 7; {0 - включено, 1 - выключено}
...
Port[$378] := $00; {Выключили}
...
end.


Статьи
"Как узнать адрес LPT-порта?"
"Работа с последовательными портами"
есть в нашем FAQ:
http://forum.vingrad.ru/index.php?showtopic=15409

Как писать в порт / читать из него есть там же.

Рекомендую просмотреть следующие статьи, чтобы лучше понять, о чём я говорю.
http://www.pda.com.ua/card/4.html
http://electronics.org.ua/techinfo/lpt/p1_5.htm
http://compmus9.valuehost.ru/technlgy/i8255.htm

Не забудьте, что кое-какие биты инвертируются. То есть 0 - это +5В, а 1 - нет потенциала.

И ещё. Я это на практике, признаться, не применял (то есть устройства никакие сам не делал), хотя в теории кое-что приходилось читать/слушать и даже писать простенькие программки для работы с внешним оборудованием. Так что если что напутаю - не обижайтесь smile.gif

Кстати, с COM-портом работать гораздо сложнее, чем с LPT... Если, конечно, всё писать самому.

Автор: December 3.4.2004, 04:36
Цитата
(единичка - +5В)
Слишком хорошо, чтобы быть правдой smile.gif От силы 4,7 вольт, чаще 4.
Цитата
учитывать, что запрограмировать отдельные биты на ввод/вывод не удастся - побайтно или по 4 бита только - см. статью по ссылке ниже).

Совсем неправда. Побитно - сколько угодно.
Смотреть также сюда:
http://forum.vingrad.ru/index.php?showtopic=18210

Напоследок - напрямую с портом работать можно только под W9X/Me. Ну и ДОС, ессно.

Автор: Pilgrim 3.4.2004, 06:06
Прошу прощения, забыл уточнить:
Операционка XP, но может быть и 98, среда - Delphi6, порт двунаправленный EPP.
Два выхода и два входа, оба сидят на контактах данных LPT.

Автор: dm9 5.4.2004, 09:42
December, знаю, что можно побитно, но это немного сложнее...

Pilgrim, что значит, что "оба сидят на контактах данных LPT"? На D0-D7, в смысле? Не понимаю...

Автор: Pilgrim 5.4.2004, 10:21
dm9 , да, конечно.

Автор: Darksquall 5.4.2004, 11:18
Когда то писал прогу для работы с COM и LPT правда она представляет все в 10й системе.Но может пригодиться.Можешь читать и писать в порты.

Качать здесь:

www.darklibr.narod.ru/ports.rar

Автор: Pilgrim 5.4.2004, 12:50
Darksquall спасибо, но этот вариант на XP не работаетsad.gif

Автор: p0s0l 5.4.2004, 13:08
Pilgrim, вполне могут тебе помочь под XP:
CreateFile('LPT1', ...);
Смотри статью в FAQе:
http://forum.vingrad.ru/index.php?showtopic=1950&hl=%EF%EE%F0%F2

Автор: Pilgrim 5.4.2004, 13:34
p0s0l спасибо. Буду пробовать.

Автор: PILOT 16.1.2006, 23:49
Цитата(December @ 3.4.2004, 01:36)
Цитата
(единичка - +5В)
Слишком хорошо, чтобы быть правдой smile От силы 4,7 вольт, чаще 4.

Если порт неработающий или работающий под нагрузкой, то да. Иначе +5Вольт.

СУВ.

Автор: Bog d`An 17.1.2006, 06:00
Я нашел информацию по вопросу и исходники http://pccontrol.bib.com.ua/XpCoding/Shablon_XP.html
также есть скомпилированная тестовая программа(скрин прилагается).

зы: девайс отлично работает...
зыы: Да, действительно 4.7в... ставь что-нить буферное... хотя смотря что тебе надо...
зыыы: Питание девайса взял с компа - отрезал от кулера 4-х пиновый разъем, переставил провод с +12 на +5 и кинул на неиспользуемые провода в кабеле (соеденил в вилке лпт), через дырку протащил внутрь корпуса - вуаля!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)