Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2008, 15:42   #1
daunito
Пользователь
 
Регистрация: 01.03.2008
Сообщений: 25
По умолчанию COM-порт

Всем привет. У меня такой вопрос, как можно подать напряжение на 7-ю ножку СОМ-порта. Где-то прочитал, что нужно по определенному адресу записать байт, в котором каждый бит и есть напряжение на ножках. Но дело в том, что если просто записать по этому адресу значение винда ругается. Как это можно сделать? Или подскажите способ попроще. Заранее спасибо
daunito вне форума Ответить с цитированием
Старый 01.03.2008, 16:16   #2
Vald
 
Регистрация: 15.02.2008
Сообщений: 3
По умолчанию

EscapeCommFunction(дескриптор порта,SET_RTS);положительное
EscapeCommFunction(дескриптор порта,CLR_RTS);ОТРИЦАТЕЛЬНОЕ
Vald вне форума Ответить с цитированием
Старый 01.03.2008, 17:17   #3
Vedrus
ИСККОНный хакер
Форумчанин
 
Аватар для Vedrus
 
Регистрация: 08.11.2007
Сообщений: 195
По умолчанию

GetCommState / SetCommState / CreateFile / ReadFile / WriteFile
подробности в MSDN
#define QUESTION bb || !bb
Vedrus вне форума Ответить с цитированием
Старый 01.03.2008, 17:53   #4
daunito
Пользователь
 
Регистрация: 01.03.2008
Сообщений: 25
По умолчанию

А как определить дескриптор порта? И напряжение будет на каких ножках при использовании EscapeCommFunction? Мне нужно только на 7-й, отрицательное напряжение. А насчет записи байта в область памяти ком-порта, просто интересно, можно вообще так сделать или нет? Винда не дает туда писать, но вообще можно записать байт по любому адресу в памяти или только в своем сегменте? Может какую литературу посоветуете по драйверам и COM в частности? Прошу прощение за кучу может быть тупых вопросов, просто я в ассемблере не силен, спросить совсем некого, а в книжках такой темы нигде не нашел
daunito вне форума Ответить с цитированием
Старый 01.03.2008, 18:34   #5
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от daunito Посмотреть сообщение
А как определить дескриптор порта? И напряжение будет на каких ножках при использовании EscapeCommFunction? Мне нужно только на 7-й, отрицательное напряжение. А насчет записи байта в область памяти ком-порта, просто интересно, можно вообще так сделать или нет? Винда не дает туда писать, но вообще можно записать байт по любому адресу в памяти или только в своем сегменте? Может какую литературу посоветуете по драйверам и COM в частности? Прошу прощение за кучу может быть тупых вопросов, просто я в ассемблере не силен, спросить совсем некого, а в книжках такой темы нигде не нашел
Как открыть порт см. вот здесь:
http://programmersforum.ru/showthread.php?t=14442 . EscapeCommFunction с параметрами SETRTS и CLRRTS ставит / сбрасывает сигнал RTS, который и есть седьмая нога (если, конечно, разъем девятиногий). Писать / читать порты Windows NT из пользовательского режима не даст - это песочница, в лучшем случае сделает вид, в худшем выбросит по ошибке доступа. Для прямого доступа к железу нужно либо работать через функцию DeviceIoControl , либо, в Вашем случае, работать через коммуникационные функции, в том числе EscapeCommFunction, либо строить свой драйвер. По-поводу строительства драйверов - Документация по DDK и WDK, Walter Oney - Programming the Microsoft Windows Driver Model, Art Baker, Jerry Lozano - The Windows 2000 Device Driver Book,
весьма полезно Sven Schreiber - Undocumented Windows 2000 Secrets, ну и еще масса литературы, в том числе переводной. Все это, в принципе, есть в интернете.
B_N вне форума Ответить с цитированием
Старый 02.03.2008, 12:22   #6
Vald
 
Регистрация: 15.02.2008
Сообщений: 3
По умолчанию

Вот эта статья все в сжатом виде имеет

http://cydem.org.ua/pars.php?lnk=comwin32&conf=2

в свою очередь, она является почти точным переводом статьи с сайта мелкософта. Но там уже все зарыто глубоко, хотя можно и поискать.

А так, вам собственно кусочек вот этот нужен :
#include <windows.h>

. . .

HANDLE port;

. . .

port=CreateFile("COM2",GENERIC_READ |GENERIC_WRITE,0,NULL,OPEN_EXISTING ,0,NULL);
if(port==INVALID_HANDLE_VALUE) {{
MsgBox(NULL,"Не возможно открыть последовательный порт","Error",MB_OK);
ExitProcess(1);
}

. . .

CloseHandle(port);//Это уже в конце программы

а внутри:
EscapeCommFunction(port,SET_RTS);

Ну и посмотреть все функции на msdn.
Есле читать ножки порта то тоже уже подсказали :

GetCommState
Vald вне форума Ответить с цитированием
Старый 15.01.2009, 17:53   #7
evgengold
 
Регистрация: 15.01.2009
Сообщений: 5
По умолчанию EscapeCommFunction

Кто подскажет как управлять скоростью передачи или длительностью 0 или 1 на DTR. Смортел на осцилографе параметры скорости com порта ничего не изменяют?
Заранее спасибо!!
evgengold вне форума Ответить с цитированием
Старый 15.01.2009, 18:50   #8
Д'якон
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 236
По умолчанию

скорость зависит от BoudRate, а DTR сигнал изменяется EscapeCommFunction, как уже говорили - почитай мсдн, или статьи по ком портам, их валом
Д'якон вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Виртуальный порт Dj_smart Win Api 0 13.07.2008 19:19
445 порт EdNovice Работа с сетью в Delphi 5 20.05.2008 09:12
порт ps/2 _Dmitry Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 01.10.2007 21:28
COM порт, или LPT... _riddik Общие вопросы Delphi 1 08.06.2007 22:33
СОМ порт SERG1980 Общие вопросы Delphi 3 17.05.2007 08:06