|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
15.01.2009, 00:27 | #1 |
Регистрация: 15.01.2009
Сообщений: 5
|
escapecommfunction и работа com портом
Привет СПЕЦАМ. Нужна ваша подсказка.
На com порт на вывод DTR нужно отправить последовательность 0 и 1 или точнее определенный массив данных состоящих из 1 и 0, и чтоб они передавались на com порт с определенной частотой. Для этого я делаю следующее: 1. Формирую нужный массив данных (размер массива >10000 символов) 2. Открываю com порт и Устанавливаю его параметры 3. С помощью функции escapecommfunction отправляю setDTR если 1 и clrDTR если 0 4. закрываю com порт код примерно такой Код:
1. Что в итоге должно получится на com порте?- передача 1 и 0 со скоростью 9,6 кб/с или нет? Если нет то как реально организовать нужную последовательность с нужной скоростью? 2. Можно ли при передачи через DTR обходится без служебных символов типа стоп бита, бита четности, т.е. можно ли напрямую передать массив двоичной информации в чистом виде с опрделенной скоростью. PS. в реалии смотрел что происходит на осцилографе- при таком коде передавалась последовательность 1 и 0 с частотой около 50 кГЦ при этом она не менялась даже при изменении сорости передачи порта!! Где ошибка? СПАСИБО ВСЕМ! Последний раз редактировалось rpy3uH; 15.01.2009 в 10:05. |
20.01.2009, 15:45 | #2 | ||||
Новичок
Джуниор
Регистрация: 20.01.2009
Сообщений: 2
|
Цитата:
Цитата:
http://frolov-lib.ru/books/bsp/v04/ch1_2.htm http://cxem.net/comp/comp38.php http://www.gaw.ru/html.cgi/txt/inter...s232/start.htm http://www.delphikingdom.com/asp/ans...IDAnswer=41472 http://www.denvo.ru/hardware/rs-232.html Для стандартной скорости (9600, 19200,..., 115200 и т.д) данные можно загнать в массив и передавать НЕ через DTR, а функцией WriteFile. Физически данные будут передаваться через TX. Цитата:
Но точно установить скорость 9600 у тебя вряд ли получится. Ошибка в том, что DTR служит совсем для других целей. Он играет роль своеобразного флажка, который говорит внешним устройствам о том, что порт готов или не готов к приёму данных. И поэтому изначально не предназначен для этого. Цитата:
Все обычнае приложения, а у тебя именно такое, в средах с кооперативной (в разных источниках этот термин путают с термином "вытесняющая") многозадачностью работают по одному из следующих принципов: синхронный и асинхронный. Далее упрощенно, чтобы было понятней. В первом случае (синхронный) ты используешь функцию для отправки данных в СОМ-порт и программа ждёт, когда же эта функция выполнит желаемую операцию, а затем вернет управление программе и так с каждой операцией. Таким образом, интервал времени когда функция вернет управление, может быть разным и зависящим от множества факторов. Во втором случае используются специальные функции, позволяющие твоей программе продолжать работать параллельно с отправкой данных из СОМ-порта. Однако в обоих случаях ОС с кооперативной многозадачностью постоянно передает управление другим приложениям в ОС через определенные кванты времени в зависимости от приоритета приложения и уровня кольца. Про многопроцессорность и многопоточность я не говорю, чтобы не усложнять понимание. Скорость 9600, о которой ты упоминаешь задается не твоим циклом for (), а микросхемой, с которой общается ОС. Твоё приложение непосредственно с этой микросхемой НЕ общается. Именно поэтому тебя не интересует, какая там микросхема и как с ней взаимоодействовать. Насколько я тебя понимаю, ты хочешь сделать из СОМ-порта генератор. Вынужден тебя разочаровать. Это будет плохой генератор. По меньшей мере, нестабильный. А именно это и ценится в нём помимо формы и мощности сигнала. Т.е. при разной загруженности процессора частота сигнала будет различной на твоём DTR. На разных процессорах, т.е. на разных компах она тоже будет отличаться и тебе нужно будет постоянно носиться с частотомером или осциллографом. О том, что спаять генератор можно самому, думаю, ты и так знаешь. В инете и книжках полно готовых схем с подробным описанием. Но если ты не хочешь паять, тебе нужна ОС, работающая в реальном времени (с вытесняющей многозадачностью). Такая как Windows 95 или 98, некоторые *nix-системы и т.д. Ну или что-то ещё |
||||
20.01.2009, 18:49 | #3 |
Форумчанин
Регистрация: 05.12.2007
Сообщений: 236
|
|
22.01.2009, 10:35 | #4 |
Новичок
Джуниор
Регистрация: 20.01.2009
Сообщений: 2
|
Моя ошибка
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с COM портом | hoba | Общие вопросы Delphi | 3 | 20.11.2008 03:39 |
Нестандартная работа с COM портом | Alex_C | Win Api | 2 | 22.07.2008 02:34 |
Работа с usb портом | Spice | Общие вопросы .NET | 6 | 16.07.2008 08:32 |
работа с COM портом | ShAzat | Общие вопросы Delphi | 8 | 28.05.2008 20:08 |