|
|||||||||||||||||||||||||||||
Меню:
Главная
Форум
Литература: Программирование и ремонт Импульсные блоки питания Неисправности и замена Радиоэлектронная аппаратура Микросхема в ТА Рубрикатор ТА Кабельные линии Обмотки и изоляция Радиоаппаратура Гибкие диски часть 2 часть 3 часть 4 часть 5 Ремонт компьютера часть 2 Аналитика: Монтаж Справочник Электроника Мощные высокочастотные транзисторы 200 микросхем Полупроводники ч.1 Часть 2 Алгоритмические проблемы 500 микросхем 500 микросхем Сортировка и поиск Монады Передача сигнала Электроника Прием сигнала Телевидиние Проектирование Эвм Оптимизация Автомобильная электроника Поляковтрансиверы Форт Тензодатчик Силовые полевые транзисторы Распределение частот Резисторные и термопарные Оберон Открытые системы шифрования Удк |
[6] Если на COM2 установить перемычку между сигналами TxD и RxD, то переменная buf in, после выполнения ReadFile, будет содержать ту же информацию, что и bufout. Других пояснений пример не требует, все уже было подробно рассмотрено раньше. Функция TransmitCommChar Иногда требуется срочно передать символ, имеющий определенное специальное значение, а в очереди передатчика уже есть данные, которые нельзя терять. В этом случае можно воспользоваться функцией: BOOL TransmitCommChar( HANDLE hFile, char cChar Данная функция передает один (и только один) внеочередной байт в линию, не смотря на наличие данных в очереди передатчика, и перед этими данными. Однако управление потоком действует. Функцию можно вызвать только синхронно. Более того, если байт экстренных данных, от предыдущего вызова этой функции, еще не передан в линию (например, из-за функций управления потоком), то попытка экстренной передачи еще одного байта завершится ошибкой. Если Вы используете программное управление потоком, то символы приостановки и возобновления передачи (обычно CTRL-S и CTRL-Q), лучше всего передавать именно этой функцией. Функции SetCommBreak и ClearCommBreak Последовательный канал передачи данных можно перевести в специальное состояние, называемое разрывом связи. При этом передача данных прекращается, а выходная линия переводится в состояние "0". Приемник, обнаружив, что за время необходимое для передачи стартового бита, битов данных, бита четности и стоповых битов, приемная линия ни разу не перешла в состояние "1", так же фиксирует у себя состояние разрыва. BOOL SetCommBreak( HANDLE hFile BOOL ClearCommBreak( HANDLE hFile Функция EscapeCommFunction Следует заметить, что состояние разрыва линии устанавливается аппаратно. Поэтому нет другого способа возобновить прерванную, с помощью SetCommBreak, передачу данных, кроме вызова ClearCommBreak. Более тонкое управление потоком данным позволяет осуществить функция: BOOL EscapeCommFunction( HANDLE hFile, DWORD dwFunc Выполняемое действие определяется вторым параметром, который может принимать одно из следующих значе-
Функция ClearCommError Приостановить прием/передачу данных может и возникновение любой ошибки при установленном в TRUE поле fAbortOnError в структуре DCB использованной для настройки режимов работы коммуникационного порта. В этом случае, для восстановления нормальной работы порта, следует использовать функцию: BOOL ClearCommError( HANDLE hFile, LPDWORD lpErrors, LPCOMSTAT lpStat Эта функция не только сбрасывает признак ошибки для соответствующего порта, но и возвращает более подробную информацию об ошибке. Кроме того, возможно получение информации о текущем состоянии порта. Вот что означают параметры: Описатель открытого файла коммуникационного порта. IpErrors Адрес переменной, в которую заносится информация об ошибке. В этой переменной могут быть установлены один или несколько из следующих бит: Обнаружено состояние разрыва связи Только для Windows95. Параллельное устройство не выбрано. Ошибка обрамления. Ошибка ввода-вывода при работе с портом Запрошенный режим не поддерживается, или неверный описатель hFile. Если данный бит установлен, то значение остальных бит не имеет значение. Только для Windows95. Для параллельного порта установлен сигнал "нет бумаги". Ошибка перебега (переполнение аппаратного буфера), следующий символ потерян. Только для Windows95. Тайм-аут на параллельном порту. Переполнение приемного буфера или принят символ после символа конца файла (EOF) Ошибка четности Переполнение буфера передачи CEBREAK CEFRAME CEOVERRUN CEPTO CERXOVER CERXPARITY CETXFULL Адрес структуры COMMSTAT. Должен быть указан, или адрес выделенного блока памяти, или NULL, если не требуется получать информацию о состоянии. Структура COMMSTAT Если с информацией об ошибке все ясно, то со структурой COMMSTAT мы еще не встречались. Вот она: typedef struct COMSTAT fCtsHold:1; fDsrHold:1; fRlsdHold:1; DWORD DWORD DWORD DWORD DWORD DWORD DWORD DWORD DWORD DWORD fXoffHold fXoffSent: fEof:1; fTxim:1; fReserved cbInQue; cbOutQue; } COMSTAT, *LPCOMSTAT; Поля структуры имеют следующее значение: fCtsHoId Передача приостановлена из-за сброса сигнала CSR. fDsrHoId Передача приостановлена из-за сброса сигнала DSR. fRIsdHoId Передача приостановлена из-за ожидания сигнала RLSD (receive-line-signal-detect). Более известное название данного сигнала - DCD (обнаружение несущей). fXoffHoId Передача приостановлена из-за приема символа XOFF. fXoffSent Передача приостановлена из-за передачи символа XOFF. Следующий передаваемый символ обязательно должен быть XON, поэтому передача собственно данных тоже приостанавливается Принят символ конца файла (EOF). В очередь, с помощью TransmitCommChar, поставлен символ для экстренной передачи. fReserved Зарезервировано и не используется. cblnQue Число символов в приемном буфере. Эти символы приняты из линии но еще не считаны функцией ReadFile. cbOutQue Число символов в передающем буфере. Эти символы ожидают передачи в линию. Для синхронных операций всегда 0. Теперь Вы знаете почти все о работе с последовательными и параллельными портами в синхронном режиме. Особенности непосредственной работы с модемами я не буду рассматривать, так как существует большой набор высокоуровневых функций и протоколов, таких как TAPI, специально предназначенных для работы с модемами. Если Вас все же интересует эта тема, то почитайте описания функции GetCommModemStatus, и структур MODEMDEVCAPS и MODEMSETTINGS. В остальном работа с модемом ничем не отличается от работы с обычным портом. Синхронный режим обмена довольно редко оказывается подходящим для серьезной работы с внешними устройствами через последовательные порты. Вместо полезной работы Ваша программа будет ждать завершения ввода/вывода, ведь порты работают значительно медленнее процессора. Да и гораздо лучше отдать время процессора другой программе, чем крутиться в цикле, ожидая какого-либо события. Другими словами, пришло время знакомиться с асинхронной работой с портами. Функция SetCommMask Начнем с событий связанных с последовательными портами. Вы указываете системе осуществлять слежение за возникновением связанных с портом событий, устанавливая маску с помощью функции BOOL SetCommMask( HANDLE hFile, DWORD dwEvtMask Маска отслеживаемых событий задается вторым параметром. Можно указывать любую комбинацию следующих значений: EV BREAK EV CTS EV DSR EV ERR EV RLSD EV RXCHAR EV RXFLAG EV TXEMPTY Состояние разрыва приемной линии Изменение состояния линии CTS Изменение состояния линии DSR Ошибка обрамления, перебега или четности Входящий звонок на модем (сигнал на линии RI порта) Изменение состояния линии RLSD (DCD) Символ принят и помещен в приемный буфер Принят символ заданный полем EvtChar структуры DCB использованной для настройки режимов работы порта Из буфера передачи передан последний символ Если dwEvtMask равно нулю, то отслеживание событий запрещается. Функция GetCommMask Разумеется, всегда можно получить текущую маску отслеживаемых событий с помощью функции BOOL GetCommMask( HANDLE hFile, LPDWORD lpEvtMask |
Среды: Smalltalk80 MicroCap Local bus Bios Pci 12С ML Микроконтроллеры: Atmel Intel Holtek AVR MSP430 Microchip Книги: Емкостный датчик 500 схем для радиолюбителей часть 2 (4) Структура компьютерных программ Автоматическая коммутация Кондиционирование и вентиляция Ошибки при монтаже Схемы звуковоспроизведения Дроссели для питания Блоки питания Детекторы перемещения Теория электропривода Адаптивное управление Измерение параметров Печатная плата pcad pcb Физика цвета Управлении софтверными проектами Математический аппарат Битовые строки Микроконтроллер nios Команды управления выполнением программы Перехода от ahdl к vhdl Холодный спай Усилители hi-fi Электронные часы Сердечники из распылённого железа Анализ алгоритмов 8-разрядные КМОП Классификация МПК История Устройства автоматики Системы и сети Частотность Справочник микросхем Вторичного электропитания Типы видеомониторов Радиобиблиотека Электронные системы Бесконтекстный язык Управление техническими системами Монтаж печатных плат Работа с коммуникациями Создание библиотечного компонента Нейрокомпьютерная техника Parser Пи-регулятор ч.1 ПИ-регулятор ч.2 Обработка списков Интегральные схемы Шина ISAВ Шина PCI Прикладная криптография Нетематическое: Взрывной автогидролиз Нечеткая логика Бытовые установки (укр) Автоматизация проектирования Сбор и защита Дискретная математика Kb радиостанция Энергетика Ретро: Прием в автомобиле Управление шаговым двигателем Магнитная запись Ремонт микроволновки Дискретные системы часть 2 | |||||||||||||||||||||||||||