![]() |
|
Модераторы: PILOT, ManiaK, Mazzi |
![]()
|
|
| December |
|
|||
![]() Antitheorist ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4423 Регистрация: 14.8.2002 Где: Харьков Репутация: нет Всего: 57 |
Greetings. Господа, подскажите, где есть инфа по поводу работы с COM портом, если на нём висит НЕ МОДЕМ. Задолбало, что авторы статей считают COM порт и MODEM порт чуть ли не синонимами. То есть можно ли работать с ним, как с набором пинов? Для доса и виндов (9х и НТ). |
|||
|
||||
| Crait |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 20.2.2003 Репутация: нет Всего: 1 |
Если интересует установка DTR/RTS, то это EscapeCommFunction() - Win
А для DOS outportb(port_address+4, ... ) |
|||
|
||||
| December |
|
|||
![]() Antitheorist ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4423 Регистрация: 14.8.2002 Где: Харьков Репутация: нет Всего: 57 |
Что, всё? Больше никто с КОМ-портом не работал? Странно, мне казалось, сейчас многие этим балуются.
Модератор, перекинь этот топик в АСМ, а? Может, там кто опытный сыщется? |
|||
|
||||
| Dapo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 18.4.2002 Репутация: нет Всего: 1 |
December, а ты в фак заглядывал? :-) Там все предельно ясно (по крайней мере по Дельфи). Для работы с ком-портом (RS-232). Тебе нужны 4-е функции (минимум).
1. CreateFile(PCHAR(FPort),GENERIC_READ or GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); 2. WriteFile(hCom,FReqData,FReqLen,BytesWritten,0); 3. ReadFile(hCom,ReadBuff,FAnswLen,BytesRead,0) 4. PurgeComm(hCom,PURGE_TXCLEAR or PURGE_RXCLEAR); Описания этих функций и их параметров найдешь в справочной системе. WriteFile - пишет в порт, ReadFile - читает из порта. Многие в качестве примера приводят модем. Это проще. Ведь у модема "текстовые команды" (ATI0,ATI1,ATD и т.д.) Для новичка остается непонятна суть. А суть такая - в порт мы передаем БАЙТЫ и читаем из него БАЙТЫ, т.е. дав команду модему ATI4? в порт улетает следующая последовательность БАЙТ - 65, 84, 73, 52, 13 (или ее LowCase) (последний байт "13" - завершающий символ команды. Чтоб модем знал, что команда закончилась и ее надо выполнять, такой уж у него протокол обмена (или формат кадра)). Короче, вместо WriteFile(hCom, PChar('ATI4'),....), можешь послать WriteFile(hCom, Buff,....), где Buff - array of Byte и Buff[0]:=65, Buff[1]:=84,Buff[2]:=73,Buff[3]:=13 Команды могут быть разной длины, поэтому количество записываемых байт в порт регулируется одним из параметров функции WriteFile. (В справке очень хорошо это все описано). Тоже самое касается и ReadFile. Считывай в буфер типа байт а потом расшифровывай. И все. Есть, конечно, еще и разные нюансы, типа использования OVERLAPPED и WaitCommEvent, ну в этом ты продвинешься как только по-бодаешь вышеприведенные функции. Если будут вопросы, пиши на [email protected]. PS. И для экспериментов используй модем. В случае неправильного набора байтов он хотябы ругнется а не просто промолчит (как тот же Ломиконт) |
|||
|
||||
| December |
|
|||
![]() Antitheorist ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4423 Регистрация: 14.8.2002 Где: Харьков Репутация: нет Всего: 57 |
Dapo, фак я облазил. :/
В том-то и дело, что объясняется на пальцах для модема, который мне на ХХХ не нужен, и разбираться с ним не хочется (но, похоже, придётся). Не думал, что не смогу найти в инете инфу о более низкоуровненом общении с RS232. Ладно, спасибо за ответ. |
|||
|
||||
| Dapo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 18.4.2002 Репутация: нет Всего: 1 |
Винда не дает доступа к регистрам порта. Да и для общения по RS это и не нужно.
|
|||
|
||||
| Dapo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 18.4.2002 Репутация: нет Всего: 1 |
Да и чего так модем смущает?:-) Для любого устройства имеющего интерфейс RS232 разница в обмене только в формате кадра(протокола) Хочешь я для Ломиконта тебе объясню. Только не в форуме :-)
|
|||
|
||||
| Mazzi |
|
|||
|
Правильный ![]() ![]() Профиль Группа: Комодератор Сообщений: 825 Регистрация: 3.4.2003 Репутация: 9 Всего: 21 |
Есть дока на английском в PDF. С примерами под DOS на С. Весит 143кб.
если хочешь намылю. -------------------- Мне нужны помощники. |
|||
|
||||
| December |
|
|||
![]() Antitheorist ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4423 Регистрация: 14.8.2002 Где: Харьков Репутация: нет Всего: 57 |
Mazzi, мыль, буду рад узреть.
Dapo, не хочется усложнять себе задачу разборкой с модемом. Насчёт Ломиконта, в двух словах, если не сложно. И что из себя представляет Ломиконт (я с PICами не очень). december at fromru.com |
|||
|
||||
| Crait |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 20.2.2003 Репутация: нет Всего: 1 |
December, мой тебе совет, используй компонент TCommPort,
если под Delphy/CBuilder. Его можно скачать на http://www2.arnes.si/~sopecrni/ Впрочем, если и на VC, все равно полезно взглянуть на этот сорс. И вообще, объясни, что тебе надо - передача/прием через COM-порт, или, как я понял сначала из названия темы, установка уровней на DTR и RTS ? Кстати, упомянутый мною компонент позволяет делать и то и другое. Ну а если в DOS - это уже другая песТня. Посмотри в этом случае, скажем, на KA9Q - был такой пакет. Или на ранние версии AsynchProfessional. Это сообщение отредактировал(а) Crait - 4.4.2003, 13:08 |
|||
|
||||
| December |
|
|||
![]() Antitheorist ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4423 Регистрация: 14.8.2002 Где: Харьков Репутация: нет Всего: 57 |
Вообще пишу я на Дельфи, но меня данный вопрос интересует больше с асмовой точки зрения. На TCommPort посмотрю.
Что мне надо: подсоединить девайсик на ком-порт. Есть восемь пинов + земля, и я хочу использовать их все (т.е. одновременная работа с максимальным количеством пинов). Протокол обмена данными - не байтовый, поэтому не хотелось бы связываться с модемом. DTR & DTS установить - не проблема, а остальные? |
|||
|
||||
| Crait |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 20.2.2003 Репутация: нет Всего: 1 |
А что остальные ?
Из выходов остается только TxD - последовательные, сиречь, данные. А вообще-то, кажется, и этим выходом тоже можно управлять вручную. В каком-то из comm'овских компонентов, припоминаю, видел я что-то типа SetBreak(). |
|||
|
||||
| Dapo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 18.4.2002 Репутация: нет Всего: 1 |
TCommPort тебе однозначно не поможет. Что значит использовать все пины? Ты свой интерфейс что-ли лабаешь? :-D И что значит "протокол обмена не байтовый", он другим не может быть. У тебя девайс работает по RS232 или по другому стандарту? Может RS485? Вот тот же Ломиконт не понимает RS232. У него обмен идет по ИРПС, для того чтобы его подключить к компу на ком-порт по интерфейсу RS232, нужна токовая петля (преобразователь, шлюз, называй как хочешь). После этого можно общаться с ним используя стандартные функции ввода/вывода. DTR и RTS, а на них чего зациклились? DTR - готовность терминала, RTS - запрос передачи. Это тоже стандрт RS232. Если обмен по этому стандарту, то ЭТИ сигналы ничем не помогут. Проведите эксперимент: подключите модем (самый доступный контроллер) к ком-у уже работающей машины (есессно без всяких там драйверов, система не знает, что к ком-у что-то подключено). И кинте ему набор байтов соответствующий какой-нибудь команде. И он ее "схавает". И если потом читать из порта, то получите ответ. Вопрос именно в стандарте. Проще говоря, напиши, что у тебя за устройство и по какому стандарту оно может общаться с другими. Я думаю без этого мы еще долго воду в ступе толочь будем.
|
|||
|
||||
| Crait |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 20.2.2003 Репутация: нет Всего: 1 |
2 Dapo
А че это "TCommPort ... однозначно не поможет" ? |
|||
|
||||
| Dapo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 18.4.2002 Репутация: нет Всего: 1 |
Я к тому, что нужно с начала разобраться с тем как Винда с портами работает.
|
|||
|
||||
![]()
|
| Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |