Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с Сом портом

18K
20 июня 2006 года
KA_ALex
3 / / 20.06.2006
Добрый день.
При написании проги, у меня возникла проблема, решение кот. пока далеко. Задача весьма простая:
После отправки байта (вместе со стартовым и стоповым битами соответственно) ,нужно отследить момент когда будет передан последний бит( или когда сдвиговый регистр опустеет или когда на линии Tx установился постоянный отрицательный потенциал напряжения, соответственно после завершения передачи.) , т.к. после вышеуказанного события надо сбрасывать сигнал RTS. (потому что есть ограничения на временя активности сигнала RTS)

Нашел только единственное событие EV_TXEMPTY, связанное с процессом передати данных, но оно указывает что "Буфер предачи пуст", а это значит, что событие EV_TXEMPTY наступает по факту на много раньше чем фактическое завершение передачи последнего бита на линии Tx.

Если кто знает, подскажите, куды соваться??????
11K
20 июня 2006 года
Ireul
90 / / 15.06.2006
Ты бы хоть код запостил, а то неизвестно как ты обращаешься к COM-порту.
Если ты делаешь это создавая функцией CreateFile хэндлу с именем "COM1" (или какой там порт тебе нужен...) то тогда по этому хэндлу можно ждать событий с помощью функции WaitCommEvent, вторым параметром которого является маска событий, в которой собственно и сидит флаг EV_TXEMPTY.

Короче:

HANDLE hCom = CreateFile("COMx",....
DWORD mask = EV_TXEMPTY;

И потом когда тебе нужно ждать это событие, вызываешь:

WaitCommEvent(hCom,&mask,NULL);

Это событие возникает в момент когда из буфера отправки(того буфера который на модеме) в линию уходит последний байт - думаю тебе хватит и байтовой точности, учитывая наши линии связи :)

Всё.
18K
21 июня 2006 года
KA_ALex
3 / / 20.06.2006
Вот листинг проги, вернее сказать "кусочка".
и буквально на рисунке показал возникающую проблему.
18K
21 июня 2006 года
KA_ALex
3 / / 20.06.2006
Да чуть не забыл, ести написать прогу, в кот. просто отправляешь один байт, а затем по событию EV_TXEMPTY сбрасывать RTS, И ОБЯЗАТЕЛЬНО ПОСМОТРЕТЬ НА ОСЦИЛЛОПЕ, то результат будет еще плачевней. байтик будет передаваться посля среза RTS
1.8K
21 июня 2006 года
_const_
229 / / 26.11.2003
При инициализации порта установи DCB::fRTSControl = RTS_CONTROL_TOGGLE.
Сработает для NT.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог