Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программирование LPT-порта 
:(
    Опции темы
MegaCasper
Дата 26.12.2006, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 5.5.2006

Репутация: нет
Всего: нет



Народ, кто занимался программированием LPT, подскажите.
Я делаю код на Builder C++ 6, но думаю это не принципиально.

-----------------------------------------------------------------------------------------------------------------------------
Вот код из ашки:

HINSTANCE hLib;                                                    // указатель на dll
typedef void (_import * Output(short, short) );     // определяем тип для задания типа указателя :) 
Output *my_out;                                                   // Собственно, указатель нужного типа
typedef short (_import * Input(short) );
Input *my_in;

--------------------------------------------------------------------------------------------------------------------------
Вот код  по нажатию на кнопку:

hLib=LoadLibrary ("inpout32.dll");  // Грузим длл-ку

my_out=(Output*) GetProcAddress (hLib, "Out32"); // типа указатель на функцию ввода в порт
my_in=(Input*) GetProcAddress (hLib, "Inp32");      // типа указатель на функцию, которая 
                                                                                  // берёт данные из порта

my_out(888, 0);                                                        // По идее, записываем логический ноль

short *a;
a=my_in (888);                                                         // А вот ТУТ какого хера НЕ НОЛЬ!!!

MessageBox (NULL, ("Со входа 888 (должны получить нуль) "+IntToStr(a) ).c_str(), "Сообщение", MB_OK);
-----------------------------------------------------------------------------------------------------------------------------

Вопрос: по идее указанный выход должен быть установлен в ноль (если я правильно понял). 
Но почему-то там не ноль.
Что не так?
PM MAIL   Вверх
takedo
Дата 27.12.2006, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: 1
Всего: 3



Вооббще то программирование LPT порта ничем не должно отличаться от программирования com порта, за исключением названий. Здесь LPT1,2,3,4,5.., там COM1,2,3,4,5... Делелелька у тебя конечно прикольная, ничего не скажешь, но здесь все кто работает с портами пользуются несколько другими функциями - в основном, работают напрямую с Win API, такими как CreateFile,WriteFile,ReadFile. Если тебе принципиально работать с твоей хитрой длл-кой, можешь ещё с недельку ждать ответа smile  Если нет - поищи темы про работу с COM портами, замени COM на LPT и наслаждайся smile 


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
MegaCasper
Дата 27.12.2006, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 5.5.2006

Репутация: нет
Всего: нет



 Кстати, народ, немного разобрался.
Вообщем ошибки-то нет, просто я под юзером сидел, а надо было всего лишь под админом зайти, и всё заработало. А так, блин, и ошибки не выдаёт и работать не хочет. Такая фигня.
PM MAIL   Вверх
Romikgy
Дата 27.12.2006, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



Код

hLib=LoadLibrary ("inpout32.dll");  // Грузим длл-ку

my_out=(Output*) GetProcAddress (hLib, "Out32"); // типа указатель на функцию ввода в порт
my_in=(Input*) GetProcAddress (hLib, "Inp32");      // типа указатель на функцию, которая 
                                                                                  // берёт данные из порта

my_out(888, 0);                                                        // По идее, записываем логический ноль

short a;
a=my_in (888);                                                         // А вот ТУТ какого хера НЕ НОЛЬ!!!

MessageBox (NULL, ("Со входа 888 (должны получить нуль) "+IntToStr(a) ).c_str(), "Сообщение", MB_OK);

а так?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
MegaCasper
Дата 9.1.2007, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 5.5.2006

Репутация: нет
Всего: нет



   Народ, а я вот когда попытался через CreateFile/WriteFile вроде глюков нет. А другая прога, которая показывает, что там на выводах LPT происходит, не показыает ни каких изменений. В чём может быть дело?
  А как бы мне через CreateFile/WriteFile подать сигнал на порт и подержать его там секунду, чтоб у меня светодиод загорелся?
PM MAIL   Вверх
str_vadim
Дата 14.1.2007, 02:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 9.1.2007
Где: Украина, Днепропе тровск

Репутация: нет
Всего: 1



При чтении данных с порта надо учитывать что выводы порта (его физические контакты находятся в "подвешенном состоянии") и при чтении никак ноля давать не будут. Для того чтобы прочитать "0" подай логический "0" на входные контакты и читай!!!

Добавлено @ 02:38 
К стати так
Цитата

Цитата

Код

hLib=LoadLibrary ("inpout32.dll");  // Грузим длл-ку

my_out=(Output*) GetProcAddress (hLib, "Out32"); // типа указатель на функцию ввода в порт
my_in=(Input*) GetProcAddress (hLib, "Inp32");      // типа указатель на функцию, которая 
                                                                                  // берёт данные из порта

my_out(888, 0);                                                        // По идее, записываем логический ноль

short a;
a=my_in (888);                                                         // А вот ТУТ какого хера НЕ НОЛЬ!!!

MessageBox (NULL, ("Со входа 888 (должны получить нуль) "+IntToStr(a) ).c_str(), "Сообщение", MB_OK);




действительно лучше получится и на мой взгляд!!!
PM MAIL ICQ   Вверх
REn005
Дата 18.10.2009, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 23.8.2007
Где: MARS

Репутация: нет
Всего: нет



почему именно 888?
как я понял 888 это адрес конкретного выхода,а где мне найти все адреса?????
Где что прочитать?? помогите плз
PM MAIL ICQ Skype   Вверх
smoke_man
Дата 18.10.2009, 22:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 1
Всего: 17



Посмотри здесь


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
REn005
Дата 19.10.2009, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 23.8.2007
Где: MARS

Репутация: нет
Всего: нет



Цитата(smoke_man @ 18.10.2009,  22:59)
Посмотри здесь

Спасибо, а как это абракадабра становитца 888???  smile 

PM MAIL ICQ Skype   Вверх
xvr
Дата 20.10.2009, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(REn005 @ 19.10.2009,  20:27)
Цитата(smoke_man @ 18.10.2009,  22:59)
Посмотри здесь

Спасибо, а как это абракадабра становитца 888???  smile

Цитата

Примечание: BIOS ищет порты по адресам 3BCh, 378h, 278h. 
888 == 0x378

PM MAIL   Вверх
REn005
Дата 20.10.2009, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 23.8.2007
Где: MARS

Репутация: нет
Всего: нет



2 xvr извини за мае не знания , но если я не знаю как 0x378 становица в 888.Объясните новичку.
Eсли я правильно понел не  вазможно контролировать из какой ножки сигнал будет идти.
HELP PLZ

Это сообщение отредактировал(а) REn005 - 20.10.2009, 20:33
PM MAIL ICQ Skype   Вверх
xvr
Дата 20.10.2009, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(REn005 @ 20.10.2009,  20:26)
2 xvr извини за мае не знания , но если я не знаю как 0x378 становица в 888.Объясните новичку.

0x378 и есть 888 (первое число в записано шестнадцатиричной системе, второе - в десятичной. Оба числа одинаковые)
Цитата

Eсли я правильно понел не  вазможно контролировать из какой ножки сигнал будет идти.
В какой порт выдать оттуда и будет идти. При записи в регистр данных порта (0x378 или 888, что одно и тоже) записанный байт появится на ножках D0-D7 порта

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0944 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.