Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2002.10.10;
Скачать: [xml.tar.bz2];

Вниз

Работа с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.008 c
1-31900
BIG BROTHER
2002-09-23 20:34
2002.10.10
OPEN FOLDER


1-31898
snv-soft
2002-09-30 12:59
2002.10.10
Записать файл в формате UTF-8


1-31677
Anar
2002-09-30 14:36
2002.10.10
Чтение из текстового файла


3-31592
Vint
2002-09-18 16:51
2002.10.10
RecordCount


1-31683
Новичек.
2002-09-30 15:33
2002.10.10
Классы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский