Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

Модемы и факс-модемы. Программирование для MS-DOS и Windows.

© Александр Фролов, Григорий Фролов
Том 16, М.: Диалог-МИФИ, 1993.

[Назад] [Содеожание] [Дальше]

6.1. Принципы программирования модемов

Доступ к модему происходит через последовательный асинхронный порт. При этом для передачи модему команд их необходимо просто записать в регистр данных COM-порта, на котором находится модем. Ответ от модема также поступает через последовательный порт. Передавая модему команды, его можно проинициализировать, перевести в режим автоответа или заставить набрать номер.

Когда модем наберет номер удаленного абонента или когда модему в режиме автоответа придет вызов, он попытается установить связь с удаленным модемом. После установления связи модем передает компьютеру через COM-порт специальное сообщение (см. главу "Система команд hayes-модемов") и переключится из командного режима в режим передачи данных. После этого данные, передаваемые модему, перестают восприниматься им как команды и сразу передаются по телефонной линии на удаленный модем.

Итак, после установления связи с удаленным модемом, коммуникационная программа может начинать обмен данными. Обмен данными так же, как и передача команд, осуществляется через COM-порт. Затем при помощи специальной Escape-последовательности можно переключить модем из режима передачи данных обратно в командный режим и положить трубку (AT-команда ATH0), разорвав связь с удаленным модемом.

Принципы обмена данными с внешними устройствами через COM-порт представлены в главе "Асинхронный адаптер".

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

6.1.1. Инициализация COM-порта

Проводим инициализацию COM-порта, к которому подключен модем. Для этого программируем регистры микросхемы UART, задавая формат данных (число стоповых битов, длину слова) и скорость обмена. Чем скорость выше, тем, естественно, быстрее будет происходить обмен с удаленным модемом.

6.1.2. Инициализация модема

Передавая модему AT-команды через COM-порт, выполняем его инициализацию. При помощи AT-команд можно установить различные режимы работы модема - выбрать протокол обмена (CCITT или Bell), установить набор диагностических сообщений модема и т.д.

6.1.3. Соединение с удаленным модемом

Передаем модему команду набора номера (ATD). В этом случае модем набирает номер и пытается установить связь с удаленным модемом. Или передаем модему команду ATS0 = 1 для перевода его в режим автоответа. После этой команды модем ожидает звонка от удаленного модема, а когда он приходит, пытается установить с ним связь (см. главу "Система команд hayes-модемов").

6.1.4. Ожидание ответа от модема

В зависимости от режима, в котором находится модем, он может передавать компьютеру различные сообщения. Например, если модем производит вызов удаленного модема (AT-команда ATD), то он может выдать следующие сообщения:

СообщениеСмысл
CONNECTУспешное соединение
BUSYНомер занят
NO DIALTONEНа линии отсутствует сигнал коммутатора
NO ANSWERАбонент не отвечает
NO CARRIERНеудачная попытка установить связь

Когда приходит звонок, модем передает компьютеру сообщение RING, если регистр модема S0 равен нулю. В этом случае для ответа на звонок надо послать модему команду ATA. Если модем находится в режиме автоответа и регистр модема S0 не равен нулю, то модем автоматически пытается ответить на звонок и может выдать следующие сообщения:

СообщениеСмысл
CONNECTУспешное соединение
NO DIALTONEНа линии отсутствует несущая частота от удаленного модема
NO CARRIERНеудачная попытка установить связь.

Если модем передал компьютеру сообщение CONNECT, значит, он успешно выполнил соединение и теперь работает в режиме передачи данных. Теперь все данные, которые вы передадите модему через COM-порт, будут преобразованы модемом в форму, пригодную для передачи по телефонным линиям, и переданы удаленному модему. И наоборот, данные, принятые модемом по телефонной линии, переводятся в цифровую форму и могут быть прочитаны через COM-порт, к которому подключен модем.

Если модем передал компьютеру сообщения BUSY, NO DIALTONE, NO ANSWER, NO CARRIER, значит, не удалось образовать соединение с удаленным модемом и надо попытаться повторить соединение.

Для разных модемов и разных режимов его работы набор сообщений может быть шире, чем мы указали в таблицах. Получить больше информации о сообщениях модема можно в разделе "Система команд hayes-модемов" и документации модема. Особое внимание следует обратить на команды Q, V, X.

6.1.5. Переключение модема в командный режим

После окончания работы коммуникационная программа должна перевести модем в командный режим и передать ему команду положить трубку (ATH0). Для перевода модема в командный режим можно воспользоваться Escape-последовательностью +++. После того как модем перешел в командный режим, можно опять передавать ему AT-команды.

6.1.6. Сброс сигналов на линиях DTR и RTS

Низкий уровень сигналов DTR и RTS сообщает модему, что компьютер не готов к приему данных через COM-порт.

[Назад] [Содеожание] [Дальше]