Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.10;
Скачать: CL | DM;

Вниз

Работа с LPT портом.   Найти похожие ветки 

 
VEG ©   (2002-07-20 19:15) [0]

Мне требуеться программно узнать, имееться ли напряжение в данный момент на определенном штырьке (напряжение от моего устройства). Я еще не определился с его номером, но точно могу сказать, что его номер не может быть равен 2,3,4,5,9,11,15,18,19,20,21,22,23,24,25. Скорее всего будет использован один из штырьков: 10,12.13.


 
Методист-технолог   (2002-07-20 19:29) [1]

Вольтметр вам нужен, батенька! И перчатки диэлектрические.


 
VEG ©   (2002-07-20 21:21) [2]

>Методист-технолог
Мда...:-) ПРОГРАММНО!


 
Методист-технолог   (2002-07-21 00:38) [3]

Вольтметр надобно взять не стрелочный а с автовыбором предела по программе!


 
VolvoUser   (2002-07-21 04:49) [4]

А прочитать порт 0x378 не судьба? ТОлько сначала в SPP Control Port установи бит чтения из порта.


 
VEG ©   (2002-07-21 12:51) [5]

>Методист-технолог
:-)

>VolvoUser
Так вот как это сделать меня и интересует. Работа с портами сводиться к встроенному ассемблеру, в котором я еще ничего не понимаю.


 
Anatoly Podgoretsky ©   (2002-07-21 13:10) [6]

Работа с портами сводится только к двум фкнциям на ассемблере, коих опубликована туча, включая и этот сайт, не затруднись посмотреть в FAQ


 
МИФИст ©   (2002-07-21 15:19) [7]

Хотел бы я посмотреть на эту ассемблерную вставку, которая будет идти под [D6, Win95/98, WinME, NT4, Win2k, WinXP ], я думаю за это можно даже денег дать =)



 
Слесарь-технолог   (2002-07-21 16:55) [8]

Правильно, голым asm-ом не полутчится.
Пишитте драйверокк :)


 
saten   (2002-07-22 09:54) [9]

есть масса готовых компанентов, для прямого доступа к LPT.
Делфа, Билдер, С++, даже для VB...
----------------------------------------------------------
TDLPortIO - http://diskdude.cjb.net/
SmallPort - где лежит непомню у меня есть
ZLPortIO - http://www.specosoft.com
TVicPort, TVicHW32 - http://www.entechatiwan.com/tools.htm
Instrument Interface VCL Delphi Component - www.instrument-science.com (правда, только для определенной аппаратуры)
----------------------------------------------------------


 
VEG ©   (2002-07-22 12:12) [10]

>Anatoly Podgoretsky
Я в ассемблере ничего не понимаю, поэтому и этих двух функций не знаю.
На этом сайте в FAQ нет ни одного раздела, посвященного системе. Этим поиск затруднителен. Скорее всего здесь нет такой темы вообще.
Недавно в форуме нашел ветвь, частично связянную с этой темой. Там разговор шел об функции:
function PortReadByte(Addr:Word) : Byte; assembler; register;
asm
MOV DX,AX
IN AL,DX
end;

Этот код мне мало чего говорит. Так же еще у меня есть функция:
Function FromPort(adr:Word):Word;
var
Rez:Word;
begin
asm
mov dx,adr
in ax, dx
mov rez,ax
end;
fromport:=lo(Rez);
end;

Я примерно знаю, что делает эта функция, но не понимаю, как она работает. Да еще эта функция не работает в системах семейства NT, для которых и делаеться моя программа.
В этих двух функциях я вижу те две ассемблерные функции, об которых ты мне говорил. Это mov и in. Я не знаю значения этих ассемблерных функций.
Если можешь, то, пожалуйста, разъясни мне, что к чему, или дай ссылку по этой теме.

>Слесарь-технолог
Мне нужно все это реализовать программно в моей программе.

>saten
Сейчас я погляжу, что это за компоненты. У меня есть один компонент для работы с портами, но он без исходного кода, для третьей Delphi. Да с этим компонентом еще три файла таскать нужно (*.sys, *.dll,*.vxd).

>All
Так же меня интересует, как можно реализовать эту проблему в DOS-е, т.е. в PASCAL-е.

Огромное спасибо всем тем, кто не игнорирует эту ветвь!!! Огромное спасибо всем тем, кто помогает мне!!!


-<>-<>-<<<Фраза>>>-<>-<>-
Зверь, самый лютый, жалости не чужд.
Я чужд. Значит я не зверь.



 
VEG ©   (2002-07-22 12:33) [11]

>All
Понравился компонент ZLPortIO. Сейчас буду в нем разбираться. Если будут проблемы, то я напишу, а сейча всем огромное спасибо!



-<>-<>-<<<Фраза>>>-<>-<>-
Зверь, самый лютый, жалости не чужд.
Я чужд. Значит я не зверь.


 
Слесарь-технолог   (2002-07-22 13:50) [12]

VEG, если всё в одной твоей программе, то она будет работать ТОЛЬКО под Windows 9X.

Если нужно под W2K и иже с ним, без драйвера НЕ ОБОЙТИСЬ.
Впрочем, это не так сложно, как многие думают...


 
DC-AC   (2002-07-22 14:55) [13]

Готовый драйвер (dll,vxd,sys) можно автоматически засунуть в System/System32 любым интсаллятором, хотя бы тем же InnoSetup ( http://www.jrsoftware.org , http://www.jordanr.cjb.net).


 
December24   (2002-07-22 21:04) [14]

Под ДОСом всё ещё проще.
mov - пересылка данных из одного места в другое.
mov dx,378H пересылает код порта в место, где он должен лежать

in - ввод значения из порта
in al,dx принимает информацию о состоянии порта.

out - выводит значение в порт.
out dx,al выводит данные al в порт.

Кстати, логические и физические уровни там часто не совпадают.

Таким образом под ДОС можешь использовать проц-ру, о которой уже писали:
Function FromPort(adr:Word):Word;
var
Rez:Word;
begin
asm
mov dx,adr
in ax, dx
mov rez,ax
end;
fromport:=lo(Rez);
end;


 
Vorobyev S   (2002-07-23 07:42) [15]

Посмотри
http://www.kuban.ru/forum_new/forum2/files/7170.html


 
pasha676   (2002-07-23 13:41) [16]

December24 - да и под Виндами в Дельфи все также. Пишешь вставку на асме. Ассемблер он и в Африке ассемблер. Конечно могут возникнуть траблы под NT и Co, но могут и не возникнуть. Это надо пробывать.
Veg - тебе надо почитать две вещи. Первое - основы ассемблера для ПС и работа ЛПТ порта. Особенно с точки зрения программера. Какие регистры по какому адресу и т.д.


 
dr.keshman   (2002-07-24 18:08) [17]

Раньше люди читали руководства по работе с периферией,
с примерами на asm и С, там всё было написано и про порты,
и про регистры, и про девайс драйверы (это для ДОС)...
а теперь некоторым лень читать наверно.
Ну правильно! Для этого есть WinAPI и системные драйверы, только механизм работы подобных устройств все равно нужно знать. Он не в ОС определяется, а в стандарте PC.


 
Altano   (2002-07-24 22:14) [18]

Проще всего на Pascal под ДОС оспользовать встроенный массив PORT[$xxxx] для чтения/записи побайтно или PORTW[$xxxx] по словам (загляни в хелп)


 
Неотеничный педоморф   (2002-07-24 23:07) [19]

Ох!


 
VEG ©   (2002-07-27 11:35) [20]

Вы, наверное меня не так поняли! Я не знаю принципа работы LPT порта! Вот скачал компонент ZLPortIO ( http://www.specosoft.com ). Поработав с демкой я сообразил то, что вся информация в LPT храниться в виде одного, двух или трех байтов. Но если так, то как мне можно работать с этим портом?
Задача немного изменилась. Мне требуеться в нужный мне момент "включить" мое устройство, подав +5V постоянного тока на штырек №9 (Data 7 - Выход) LPT порта. Далее нужно, чтобы моя программа "подождала" ответ от моего устройства в виде сигнала тех самых +5V постоянного тока на штырек №12 (Paper Out - Вход). Далее пограмма выполняет различные операции, и по их завершению требуеться убрать эти 5V со штырька №9 (Data 7 - Выход), тем самым выключив устройство.
Подскажите, пожалуйста, как это реализовать при помощи компонента ZLPortIO ( http://www.specosoft.com ).

>December24
Спасибо за подробности, но я к сожалению не знаю принципа работы самого порта...

>dr.keshman >pasha676
В интернете я подобной информации не видел (хотя, скорее свего таковая где-то имееться).

>Altano
Как работает этот механизм? У меня TP 7 без HELP-а.

>Неотеничный педоморф
Ах!!!


-<>-<>-<<<Фраза>>>-<>-<>-
Зверь, самый лютый, жалости не чужд.
Я чужд. Значит я не зверь.


 
int64 ©   (2002-07-27 12:21) [21]

VEG © (27.07.02 11:35)

Посмотри TDLPortIO.
Туда входит компонент TDLPrinterPortIO.
У него есть свойство Pin. Вот подробнее:

// Index valid is in the range 1-25 only (other values return false)
// Reading the pin returns true when it is 5V, or false when it at 0V.
// Writing true sets the pin to 5V, or 0V when false.
property Pin[Index : TPinNumber] : Boolean read GetPin write SetPin;


Замечание1. Чтобы отозваться на приём данных (когда зажётся штырёк), твоя прога должна в отдельном потоке постоянно считывать этот штырёк, т.к. компонент не реализует прерывания. И не забывай в цикле считывания ставить Sleep(0).

Замечание2. Если посмотришь на устройство свойства Pin, то поймёшь, что реализовать всё можно было и с ZLPortIO. Просто надо было переваривать принятый байт. Типа девятый пин был бы:
(PortByte and $80)<>0; разумеется, логического типа.

Замечание3. Самое главное. Смотри, чтобы штырьки для режима твоего порта могли работать на приём (посылку). В зависимости от того, как ты их выберешь. Я просто не помню, где какие.


Дерзай.


 
VEG ©   (2002-07-27 12:36) [22]

>int64
ОГРОМНОЕ СПАСИБО!!!
Сейчас буду разбираться!


 
Anatoly Podgoretsky ©   (2002-07-27 12:56) [23]

>Anatoly Podgoretsky
Там разговор шел об функции:
function PortReadByte(Addr:Word) : Byte; assembler; register;
asm
MOV DX,AX
IN AL,DX
end;
Этот код мне мало чего говорит. Так же еще у меня есть функция:


Данный код читает байт из порта с номером Addr
Вторую функцию можно не рассматривать, она просто не оптимальная, к тому же возвращает не байт.

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

Работает, если выполняется в кольце 0, к тому же надо оговаривать в вопросе, а ты указал все ОС

В этих двух функциях я вижу те две ассемблерные функции, об которых ты мне говорил. Это mov и in. Я не знаю значения этих ассемблерных функций.

Тебе знать не обязательно, можешь использовать AS IS
Ты же используешь VCL не зная что там внутри.

Если можешь, то, пожалуйста, разъясни мне, что к чему, или дай ссылку по этой теме.

Тебе надо на Intel и брать руководства по процессору, там есть и структура и система команд, но зачем, просто используй как есть.

Основная твоя проблема будет не эта, а знание как работают LPT порты, как прорваться на уровень 0 (драйвер) при том в разных ОС.
Плюс работа в защищенном режиме процессора.

Плюнь на все и возьми готовый драйвер.



 
BiAlix   (2002-07-29 12:14) [24]

VEG!
Такого чайника я ыв жизни еще не встречал - я говорит порт не знаю и знать не хочу! Нормальный ход! Да чему вас всех программистов только учат, хоть бы раз прошлись по основам радиотехники! Не знаешь ничего про аппаратные средства РС, ну так и не лезь туда! "+5В постоянного тока" - цитата из твоего письма! Какой бред! +5В - это напряжение, ток измеряется в амперах! Купи себе книгу М.Гука "Аппартаные средства IBM PC" или на худой конец того же автора "Интерфейсы ПК" и проштудируй хорошенько!
Радиотехник (+программист) со стажем.


 
Anatoly Podgoretsky ©   (2002-07-29 12:19) [25]

BiAlix (29.07.02 12:14)
Зря налетаешь, это устояшиеся выражение, 220 вольт переменного тока.


 
VEG ©   (2002-07-29 12:51) [26]

Мля! Я уже радиотехникой 4 года не занимаюсь. Когда занимался, мне было всего 10 лет! Сейчас требуеться стряпать одно устройство! Устройство готово, а прога НЕТ! Можешь считать, что я имелл ввиду "+5V напряжения".
>"..Такого чайника я ыв жизни еще не встречал..." Если ты об программировании, то ты ошибаешься, а если об радиотехнике, то ты ГЛУБОКО ошибаешься! В радиотехнике чайники почти все программисты. А как тебе вопросы, типа "Как попасть в SystemTray?" или "Как убрать мою прогу из Ctrl+Alt+Del?"? Может для тебя эти вопросы очень трудные, тогда, извините, кто из нас чайник?
>"...хоть бы раз прошлись по основам радиотехники..." Нафиг она нормальному программисту? Уверен, что есть программисты-проффесионалы которым нафиг сдалась твоя радиотехника.
>"Не знаешь ничего про аппаратные средства РС, ну так и не лезь туда!" Когда-то я не знал ничего об Delphi. Теперь много чего знаю!
>"...Купи себе книгу М.Гука "Аппартаные средства IBM PC" или на худой конец того же автора "Интерфейсы ПК" и проштудируй хорошенько!..." Покупать и изучать целую книгу из-за одной простой задачи?
>"...(+программист) со стажем..." Ну ты вообще загнул! Почему же ты, такой крутой, не можешь помочь человеку? Складываеться впечатление того, что ты просто решил повыпендриваться!

Понимаешь, если я сделал ошибку в одном слове, это не значит, что я вообще полный DOWN в этой области! Все меня сдесь прекрасно поняли, а это мне и требовалось!

Из вышесказанного можно сделать вывод, что ты САМОЕ СЛАБОЕ ЗВЕНО!

Еж - птица гордая. Не пнешь - не полетит...


 
VEG ©   (2002-07-29 13:01) [27]

>Anatoly Podgoretsky
Хм... Вообще-то ты прав:-) Спасибо за поддержку!

>BiAlix
Раз ты ЭТОГО не знаешь, то ты точно САМОЕ СЛАБОЕ ЗВЕНО, и тебе суждено уйти ни с чем!
ЗЫ Почему ты не зарегистрирован? Может ты какой-нибудь там "vopros"? (vopros, извини, если обидел! Мне же нужно кого-нибудь привести в пример!)


 
VEG ©   (2002-07-29 13:01) [28]

>Anatoly Podgoretsky
Хм... Вообще-то ты прав:-) Спасибо за поддержку!

>BiAlix
Раз ты ЭТОГО не знаешь, то ты точно САМОЕ СЛАБОЕ ЗВЕНО, и тебе суждено уйти ни с чем!
ЗЫ Почему ты не зарегистрирован? Может ты какой-нибудь там "vopros"? (vopros, извини, если обидел! Мне же нужно кого-нибудь привести в пример!)


 
JumPer   (2002-07-30 15:57) [29]

Если хочешь универсальную программу забудь про асм. NT тебе ничего не даст копать самому. >saten< написал тебе все правильно. Возьми любой из них. Если хочешь ZLPortIO бери. Я ковырялся с каждым из них. Если не разберешься как, что и куда, то пиши.


 
JumPer   (2002-07-30 16:23) [30]

Хотя извини обшибся. Instrument Interface VCL Delphi Component - с этим не работал.



Страницы: 1 вся ветка

Текущий архив: 2002.10.10;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.021 c
1-31849
Ahmad
2002-09-26 18:26
2002.10.10
Таблица символов...


3-31604
Gaber
2002-09-18 14:44
2002.10.10
TQuery и параметры


14-32011
AL2002
2002-09-17 11:47
2002.10.10
Какого у меня радио играет?


4-32092
Fellomena
2002-08-27 15:31
2002.10.10
WM_CONTEXTMENU & Hooks (in Win2k)


1-31804
novill
2002-10-02 11:20
2002.10.10
Как ускорить загрузку (и работу) программы?