do {
while(not CTS) wait;
send(byte);
} while(bytes to send);
Пpи оpганизации пеpедачи данных с помощью модема некотоpые сигналы используются для опpеделения готовности данных или опpеделения следующего байта посылки. Однако, когда пеpедача данных осуществляется между двумя компьютеpами, то набоp сигналов, используемый для обмена данными, может быть огpаничен лишь сигналами GRD, TxD и RxD. Основными доводами за использование этих тpех аппаpатно-pеализованных микpопpогpамм, является значительное уменьшение стоимости пеpедачи данных по сpавнению с использованием пяти или, скажем, шести микpопpогpамм упpавления.
Если два компьютеpа одного типа соединены каналом пеpедачи данных и один из них готов пеpедать данные, то втоpой теоpетически всегда готов пpинять их. Однако в стандаpте RS-232 имеются ошибки, связанные с возможностью потеpи или обхода сигналов пpотокола RS-232.
Наиболее непpиятными ошибками являются ошибки, связанные с переполнением pегистpа (overrun error).
Если для соединения двух последовательных поpтов используются только тpи микpопpогpаммы (сигнала), то возникает необходимость использовать своеобразный "тpюк" с поpтом-источником в пpедположении, что поpт-пpиемник уже готов к пpиему данных. Этот "тpюк" обычно выполняется путем соединения вместе 6, 8 и 20 штыpей 25-штыpевого pазъема. В случае неудачи эта пpоцедуpа позволяет обнаpужить ошибку пеpеполнения pегистpа данных с большой веpоятностью. Допустим тепеpь, что компьютеp А более пpоизводительный, чем компьютеp В. Если аппаpатное подтвеpждение связи не используется, а компьютеp А пpедполагает пеpесылку втоpого байта сообщения в компьютеp В, в то вpемя, как компьютеp В выполняет чтение инфоpмации из pегистpа ввода данных, то будет заpегистpиpована ошибка "пеpеполнение pегистpа" (oberrun error). Ошибка этого типа будет также заpегистpиpована даже, если компьютеp В более производительный чем компьютеp А, но пpогpамное обеспечение компьютеpа В менее реактивно.
Эта пpоблема возникает потому, что штыpи 6, 8 и 20 соединены и поpт-источник считает, что поpт-пpиемник всегда готов к пpиему данных.
К последовательному поpту компьютеpов семейства PC, а также совместимых с ними моделей можно получить доступ непосpедственно из DOS чеpез ПЗУ-BIOS или в обход DOS и BIOS, используя непосpедственное упpавление аппаpатными сpедствами. Доступ к последовательному поpту чеpез DOS не очень хоpошая идея потому, что DOS не позволяет оpганизовать обpатной связи с последовательным поpтом для анализа его текущего состояния и оpганизует лишь слепое чтение и запись данных в поpт. К тому же нет возможности использовать систему пpеpываний DOS.
Метод прямого аппаратного управления системными ресурсами не является пpиемлемым для pаботы с последовательным поpтом в связи с тем, что наибольшая пpоизводительность обpаботки поpта пpи использовании этого метода может быть достигнута лишь за счет пpеpываний ПЗУ-BIOS.
Доступ и обpаботку последовательного поpта поддеpживают четыpе специальные утилиты ПЗУ-BIOS. Обpаботка последовательного порта осуществляется ими с помощью пpеpывания 14H. Разбеpем подpобнее этот метод.
Область данных BIOS содержит информацию о числе адаптеров последовательной связи и об их базовых адресах. Управление адаптером и услуги по переносу данных выполняют 6 функций прерывания 14h.
Для всех этих функций значение в регистре DX задаёт номер адаптера (COM=0, COM2=1, и т. д.)Все функции в AH возвращают копию внутреннего регистра состояния линии (см. прил.2,табл.2.5.), но дополнительно бит 7 является битом тайм-аута.
Операции BIOS с адаптером последовательной связи защищаются по тайм-ауту. Это означает, что по истечении определённого интервала времени и при отсутствии возможности выполнить функцию, функция BIOS возвращает управление в точку вызова, сообщая ошибку тайм-аута. В результате не происходит повисания компьютера из-за ожидания неисполнимого в данный момент условия.
Функция AH=00 - задание формата слова данных, используемых адаптером для переноса данных. Значение в регистре AL задаёт параметры инициализации.
При инициализации порта коммуникации устанавливаются все его параметры: длина слова, число стоп-битов, чётность, скорость обмена. Функция 0 прерывания BIOS инициализирует порт коммуникации.
В DX должен находиться номер коммуникационного канала (COM=0, COM2=1).
В AX должен содержаться байт инициализирующих данных, значение битов которого может быть следующим:
![]() |
БИТ ОПИСАНИЕ
7-5 Частота передачи:
=бит/c
=бит/c
=бит/c
=бит/c
=бит/c
=бит/c
=бит/c
=бит/c
4,3 Контроль по чётности:
=00 или 10 - отсутствие контроля
=01 - нечётный паритет;
=11 - чётный паритет;
2 Число стоп-битов:
=0 - один стоп-бит;
=1 - два стоп-бита;
1,0 Длина слова информации:
=00 -5 бит;
=01 -6 бит;
=10 -7 бит;
=11 -8 бит;
Пример: Инициализация порта со словом, равным 8 битам, одним стоп-битом и чётной чётностью. Скорость обмена -1200 бод.
mov wordlength,B ;длина слова 8 бит
mov stopbits,B ;1 стоп - бит
mov parity,B ;четность
mov baudrate,B ;скорость 11200бод ;***инициализирум COM1
mov AL,0 ;очистить AL
or AL, wordlengt ;установить нужные биты
or AL, stopbits
or AL, baudrate
mov AH,0 ;функция инициализации порта
mov 14h ;инициализация порта.
Имеются два способа, с помощью которых программа может определить, какой из коммуникационных портов должен использоваться. Один из них состоит в указании номера канала в операторе программы. Второй способ состоит в написании программы для обмена через порт COM1, но изменении коммуникационного адаптера, доступ к которому идёт через COM1. Базовый адрес для COM1 хранится в ячейке 0040:0000, а для COM2 - в ячейке 0040:0002. Для смены коммуникационных портов надо просто поменять эти два значения. Повторная смена значений приведёт к первоначальному назначению портов.
Если программа обращается к коммуникационному порту через прерывание 14h, то COM port определяется содержимым DX, которое равно 0 или 1 (для COM1 или COM2). Вместо того, чтобы присваивать DX непосредственное значение, заполняйте его из переменной, которой может быть присвоено значение 0 или 1. Программы, использующие коммуникационные функции 3 и 4 прерывания 21h, всегда адресуются к COM1.В этом случае надо поменять базовые адреса:
mov ax,40h ;ES указывает на область данных BIOS
mov es, ax
mov dx, es:[0]
mov ax, es:[2]
mov es:[0],ax
mov es:[2],dx
Регистр статуса линии микросхемы UART 8250 определяет протокол связи. Регистр имеет адрес порта на 5 больше, чем базовый адрес данного канала или 3FDH.
Функция 3 прерывания 14h BIOS возвращает в AH регистр статуса линии (AL получает регистр статуса модема). При входе DX должен содержать номер коммуникационного порта.
Пример проверки бита наличия перерывани:
mov ah,3 ;номер функции
mov dx,1 ;выбор com2
int 14h ;байт статуса
test ah,10000b ;обнаружен перерыв?
jnz break_detect ;если да, то переход к процедуре обработки
Функция 1 прерывания 14h BIOS посылает символ, находящийся в AL, в коммуникационный канал. При входе DX содержит номер порта (0 или 1). При возврате AH получает байт статуса, в котором бит 7=1, если операция неуспешна. В этом случае имеют значение следующие биты:
бит 4 обнаружен перерыв (сигнал "стоп" от принимающей
станции)
5 регистр сдвига передатчика пуст
6 регистр хранения передатчика пуст
MS-DOS имеет функцию для передачи по коммуникационному каналу символа, помещаемого в DL. Это функция номер 4 прерывания 21h, но у неё нет никаких преимуществ перед функцией BIOS; она не возвращает статусной информации и не позволяет назначать, какой из коммуникационных портов надо использовать (это всегда COM1).
Чтобы вывести строку данных, можно воспользоваться функцией 40h прерывания 21h. Это обычная функция вывода для всех файлов и устройств методом доступа дескриптора файла. СOM1 имеет переопределённый номер -#3.
Поместите номер файла в Bx, а число передаваемых байтов в Cx. Пусть DS:DX указывают на буфер выводимых данных, затем вызывайте функцию.
mov ah,40h ;номер функции
mov bx,3 ;предопределённый номер файла для COM1
mov cx,50 ;выводим 50 байт
lea dx, bufer ;ds:dx указывают на буфер данных
int 21h ;послать данные
jc com_error ;уход на обработку ошибки
При использовании предопределённых номеров файлов их не надо открывать. Если произошла ошибка, устанавливается флаг переноса, а в AX возвращается 5, если коммуникационный порт не готов, и 6 при указании неверного номера файла.
На низком уровне процедура передачи может быть описана так: когда байт данных помещается в регистр хранения передатчика, то он автоматически выводится в последовательный канал через регистр сдвига передатчика. Бит 5 регистра статуса линии показывает, свободен ли регистр хранения передатчика для приёма данных. Регистр постоянно проверяется до тех пор, пока бит 5 не станет равным 1. После этого в регистр хранения передатчика посылается очередной байт. В процессе передачи бит 5 равен 0, и только когда он станет равным 1, в регистр хранения передатчика может быть послан следующий символ. Этот процесс повторяется до тех пор пока в этом есть необходимость.
Следующий пример даёт основные понятия об этой процедуре. В примере предполагается, что коммуникационный порт уже инициализирован, как показано в предыдущих примерах.
;---ожидание готовности посылки символа
ketry: mov dx, basadr ;базовый адрес
add dx,5 ;указание на регистр статуса линии
in al, dx ;получение байта статуса
test al,b;проверяем на ошибку
jnz errrout ;если есть, то на процедуру обработки ошибки
test al,b;получены ли данные?
jnz receive ;если да, то на процедуру приёма
test al, ;проверка готовности к передаче
jz ketry ;если нет, то возврат назад
;---передача символа, принимаемого с клавиатуры
mov ah,1 ;функция проверки нажатия клавиши
int 16h ;прерывание клавиатуры BIOS
jz ketry ;возврат, если не было нажатия
mov ah,0 ;функция получения кода с клавиатуры
int 16h ;теперь нужный символ в al
sub dx,5 ;адрес регистра хранения передатчика
out dx, al ;посылаем символ
jmp short ketry ;возвращаемся к началу цикла
Как только инициализирован коммуникационный порт и установлена связь с удалённой станцией - коммуникационная программа готова принимать данные. Приём данных никогда полностью не отделён от их передачи, поскольку программе может понадобиться послать сигнал XOFF (ASCII 19), чтобы остановить поток данных, если они поступят слишком быстро и она не успевает их обрабатывать. Код XON (ASCII 17) сообщает удалённой станции, что можно продолжить передачу.
Функция 2 прерывания 14h BIOS ожидает символ из последнего порта, помещает его в AL при получении и затем возвращается в программу. При входе надо поместить номер порта (0-1) в DX. При возврате AX равен нулю, если не было ошибки. Если AH не равен 0, то может быть возвращен байт статуса, в котором имеют значение только 5 бит. Это следующие биты:
бит 1 ошибка переполнения;
2 ошибка четности;
3 ошибка оформления (стартовый или стоп-биты неверны);
4 обнаружен перерыв (обнаружена длинная строка битов 0);
5 ошибка тайм аута (не получен сигнал DSR).
При получении данных без использования коммуникационного прерывания программа должна постоянно проверять регистр статуса линии. Бит 0 этого регистра будет равен нулю, пока не будет получен символ в регистр данных приёмника. Когда бит 0 становится равным 1, надо немедленно считать его из регистра, с тем, чтобы на него не наложился следующий принимаемый символ. После того как символ считан, бит 0 опять становится равным 0 до тех пор пока не прибудет новый символ.
Коммуникационные процедуры обычно создают циклический буфер для сбора поступающих символов. Если поступающие данные подавать на экран со скоростью 1200 бод, то процедура сдвига экрана BIOS не будет успевать и произойдёт переполнение. Решением этих проблем является использование коммуникационного прерывания.
В следующем примере частично повторяется содержимое предыдущего пункта, относящегося к передаче символов. Как и раньше код начинается с бесконечного цикла. Для получения законченной процедуры ввода/вывода через коммуникационный канал следует объединить процедуры приёма, передачи с процедурами инициализации.
ketry: mov dx, basadr
add dx,5
in al, dx ;получение байта статуса
test al,b;проверяем на ошибку
jnz errrout ;если есть, то на процедуру обработки ошибки
test al,b;получены ли данные?
jnz receive ;если да, то на процедуру приёма
test al, ;проверка готовности к передаче
jz ketry ;если нет, то возврат к началу цикла
...
(здесь расположить процедуру передачи)
...
;---получение данных и вывод их на экран
receive: mov dx, base_address
in al, dx ;чтение полученного символа
cmp al,19 ;проверка на XOFF
je XOFF_ROUTINE
;(и т. д.)
mov dl, al ;подготовка символа для вывода на экран
mov ah,2 ;функция вывода символа
int 21h ;вывод символа
jmp short ketry ;возврат к началу цикла
В тщательно продуманной коммуникационной программе кроме функций ввода/вывода должны выполнятся функции сбора и анализа данных, большие блоки данных могут записываться на диск или считываться с него. Коммуникационное прерывание позволяет программе не тратить на ввод/вывод больше времени, чем он того требует. Например, после установки прерывания управление передаётся процедуре передачи данных только в том случае, если регистр хранения передатчика пуст, и возвращается программе, как только послан байт данных, позволяя ей продолжать свою работу до тех пор, пока регистр хранения передатчика не будет снова готов.
PC отводит два аппаратных прерывания для коммуникационных каналов,
номера 3 (COM1) и 4 (COM2).
UART 8250 допускает 4 класса прерываний для каждого канала. Их коды содержатся в битах 2-1 регистра идентификации прерывания.
Чтобы выбрать одно или более прерываний, надо запрограммировать регистр разрешения прерывания.
Общая форма программы, обрабатывающей коммуникационные прерывания:
;---установка вектора коммуникационного прерывания
push ds
mov dx, offst ioin ;ds:dx указывают на процедуру
mov ax, seg ioin
mov ds, ax
mov a,0bh ;номер вектора для com1
mov ah,25h ;функция изменения вектора
int 21h ;замена вектора прерывания
;---инициализация регистра разрешения прерывания (com1)
mov ax,40h ;ds указывает на данные BIOS
mov ds, ax
mov dx, ds:[0] ;базовый адрес com1
inc dx ;указание на регистр разрешения
mov al,3 ;прерываний и разрешение прерывания
out dx, al ;приёма и передачи
pop ds ;восстановление регистра
;---процедура обработки прервания - сначала определяется его тип
IOIN procfar
NEXIN: mov dx, basadr
inc dx ;указание на регистр идентификации
inc dx ;прерывания
in al, dx
test al,10b ;это прерывание передатчика?
jnz transmit ;если да, то на передачу
RECEIVE: ;иначе - на приём
...
jmp short anot ;проверка, нет ли другого прерывания
TRANSMIT: ;начать процедуру передачи сигнала
...
;---перед выходом проверить, нет ли другого прерывания
ANOT: mov dx, basadr
inc dx
inc dx
in al, dx
test al,1 ;проверка бита 1 регистра идентификации
jnz next_int ;если он установлен, то на начало
mov al,20h ;иначе код завершения аппаратного прерывания
out 20h, al
iret
io_int endp
КОММУНИКАЦИОННОЕ ПРЕРЫВАНИЕ
Ввод, анализ, запоминание IRET


и вывод данных
![]()
![]()

Буфер Буфер
Подпрограмма вывода ввода
![]()
![]()
![]()
прерывания
![]() |

INT OBH Анализ
типа
прерыва-
ния
![]() |

Передатчик готов
- посылаем байт
Данные приняты
![]()
![]()

- запоминаем байт


Измененение статуса модема
![]()
![]()
- проверка и восстановление


Условие прерывания
-прекращение связи
Было
![]()
![]()
ещё
Обнаружена ошибки прерыва нет
-восстановление ние?

да
3.3. Лабораторная работа №3
УПРАВЛЕНИЕ АДАПТЕРОМ АСИНХРОННОЙ ПОСЛЕДОВАТЕЛЬНОЙ СВЯЗИ
Цель работы:
-Изучение методов организации передачи данных по интерфейсу RS-232:
Порядок выполнения работы:
ВНИМАНИЕ! Любые операции, связанные с подключением или отключением соединительных кабелей от/к ПК осуществляйте на обесточенном оборудовании.
После выполнения подключения/отключения приборов и оборудования последующее включение ПК возможно только после контроля преподавателя.
Подготовка к работе:
- изучить порядок проведения работы и методические материалы, приведенные в приложении 3;
- получить у преподавателя индивидуальное задание и ознакомиться с ним.
Ход работы:
Программирование последовательного интерфейса:
- при выключенном ПК установите петлевую заглушку на выбранный порт;
- составьте программу тестирования последовательного порта средствами непосредственного доступа к внутренним регистрам реализовав следующий алгоритм:
1) инициализация последовательного порта;
2) проверка готовности регистра передатчика принять данные;
3) если регистр не готов, то перейти на 2 шаг;
4) выдача псевдослучайного числа в регистр передатчика;
5) проверка окончания приема данных;
6) если данные не приняты, то перейти на 5 шаг;
7) прочитать данные из регистра приемника;
8) сравнить переданное и полученное псевдослучайное число;
9) если числа не равны, выдать сообщение на дисплей;
10) проверить нажатие на клавиатуре любой клавиши;
11) если клавиша не нажата, перейти на шаг 2;
- отладьте полученную программу и результат предъявите преподавателю для контроля.
Индивидуальные задания к работе № 3
Выполнение индивидуального задания заключается в исследовании различных случаев обмена данными через асинхронный последовательный интерфейс RS-232. При выполнении заданий необходимо самостоятельно выбрать и обосновать параметры инициализации интерфейса RS-232.
Задание 1. Реализовать передачу данных, вводимых с клавиатуры на дисплей
ПК через последовательный канал с внешней петлей данных, используя прямое
обращение к регистрам RS-232. Скорость манипуляции установить 38200 бод.
Задание 2. Реализовать передачу данных, вводимых с клавиатуры на дисплей ПК через последовательный канал с внешней петлей данных, используя стандартные функции базовой системы ввода-вывода. Скорость манипуляции установить 9600 бод.
Задание 3. Исследование зависимости качества связи при различных скоростях передачи через последовательный канал с внешней петлей данных и с отображением количества ошибочно принятых посылок в единицу времени, используя прямое обращение к регистрам RS-232.
Задание 4. Исследование зависимости качества связи при различных скоростях передачи через последовательный канал с внешней петлей данных и с отображением количества ошибочно принятых посылок в единицу времени, используя стандартные функции базовой системы ввода-вывода.
Задание 6. Реализовать передачу данных, вводимых с клавиатуры на одном ПК и выводимых на дисплей на другом ПК и обратно через последовательный канал, связывающий эти два ПК, используя прямое обращение к регистрам RS-232.
Задание 7. Реализовать передачу данных, вводимых с клавиатуры на одном ПК и выводимых на дисплей на другом ПК и обратно через последовательный канал, связывающий эти два ПК, используя стандартные функции базовой системы ввода-вывода.
Задание 8. Реализовать ретрансляцию данных через последовательный канал, обеспечивающую дуплексный режим связи с двумя ПК, подключенными соответственно к СОМ1 и СОМ2, используя прямое обращение к регистрам RS-232.
Задание 9. Реализовать передачу данных между двумя ПК, используя сигналы состояния линии и состояния модема интерфейса RS-232 (TD, RD, RTS, CTS, DTR, DSR) и протокол обмена со стандартным связным и терминальным оборудованием при использовании одной из схем нуль-модема (см. работу № 1) через вызов стандартных функций базовой системы ввода-вывода.
Задание 10. Реализовать передачу данных между двумя ПК, используя сигналы состояния линии и состояния модема интерфейса RS-232 (TD, RD, RTS, CTS, DTR, DSR) и протокол обмена со стандартным связным и терминальным оборудованием при использовании одной из схем нуль-модема (см. работу № 1) при прямом обращении к регистрам RS-232.
Задание 11. Реализовать тестирование интерфейса RS-232 через внутреннюю петлю данных при различных скоростях манипуляции и с отображением переданных и принятых символов на экране дисплея.
Вопросы для подготовки к работе:
1. Инициализация поpта.
2. Регистры интерфейса RS-232.
3. Определение статуса коммуникационного порта.
4. Передача данных.
5. Прием данных.
6. Прием/передача данных с помощью коммуникационного прерывания.
7. Прерывание INT 14H: работа с последовательным портом.
4. Схема сеанса связи модема.
Обмен сигналами между адаптером компьютера и модемом строится по стандартизированному сценарию, в котором каждый сигнал генерируется сторонами лишь после наступления определённых условий или, говоря образно "одна сторона ожидает реплики партнёра и только потом произносит следуещее слово". Такая процедура обмена информацией называется запрос-ответным режимом, или handshaking.
Обмен сигналами между сторонами интерфейса RS232 выглядит так:
1) компьютер после включения питания выставляет сигнал DTR, который постоянно удерживается активным. Если модем включен и исправен, он отвечает компьютеру сигналом DSR. Этот сигнал служит подтверждением того, что DTR принят, и информирует компьютер о готовности модеме к приёму информации;
2) если компьютер получил сигнал DSR и хочет передать данные, он выставляет сигнал RTS;
3) если модем готов принимать данные, он отвечает сигналом CTS. Он служит для компьютера подтверждением того, что RTS получен модемом и модем готов принять данные о компьютера. С этого момента адаптер компьютера может бит за битом передавать информацию по линии TXD;
4) получив байт данных, модем может сбросить свой сигнал CTS, информируя компьютер о необходимости "притормозить" передачу следующего байта, например из-за переполнения внутреннего буфера;
5) программа компьютера, обнаружив сброс CTS, прекращает передачу данных, ожидая повторного появления CTS.
Когда модему необходимо передать данные в компьютер, он выставляет сигнал DCD. Программа компьютера, принимающая данные, обнаружив этот сигнал, читает приёмный регистр, в котором сдвиговый регистр "собрал" биты, принятые по линии приёма данных RXD.
Две стандартные линии, по которым компьютер управляет модемом, доступны через регистр контроля модема микросхемы UART 8250 (адрес 3FCH).
Значения его битов приведены в таблице приложения 3 к лаб. раб. N3.
Четыре линии, по которым модем посылает информацию компьютеру, управляются регистром статуса модема (адрес 3FEH).
Значения его битов приведены в таблице 2.4 приложения 2 к лаб. раб. N3.
Программа непрерывно проверяет эти биты в ходе коммуникационных операций. Следует отметить, что 4 младших бита параллельны старшим четырём битам. Эти биты устанавливаются в 1 только тогда, когда происходит изменение в статусе соответствующего старшего бита с момента, когда регистр читался последний раз. Все 4 младших автоматически сбрасываются при чтении регистра. Программы любого уровня могут непосредственно читать этот регистр. Другой возможностью является использование функции 3 прерывания 14h BIOS, которая возвращает регистр статуса модема в AL (при этом в AH будет содержаться регистр статуса линии). При входе регистр должен содержать номер коммуникационного канала.
Схема связи через модем на языке ассемблера выглядит так:
;----установить сигнал DTR
mov dx, basadr ;начать с базового адреса
add dx,4 ;указание на регистр контроля модема
mov al,1 ;установить бит 1
out dx, al ;послать в порт
;---послать управляющую строку модему для вызова
...
(этот код различен для разных типов модемов)
...
;----ожидание пока будет установлен сигнал DSR
inc dx ;указание на регистр статуса модема
inc dx
TRYAG: in al, d ;получить содержимое
test al,10b ;проверить второй бит
jz tryag ;ожидание пока он не будет равен 1
;---установить бит RTS
dec dx ;возврат к регистру управления
dec dx
mov al,3 ;установить RTS
out dx, al ;послать в порт
;---ожидание сигнала CTS
inc dx ;возврат к регистру статуса
inc dx
ON_MO: in al, dx ;получить байт статуса
test al,1 ;проверить бит CTS
jz on_mo ;не продолжать пока он не установлен
;---послать данные
4.1. Описание команд HAYES-модема
Все команды надо начинать префиксом AT (или At, aT, at) и заканчивать <CR>. Существует несколько исключений, которые будут описаны ниже. Все вводимые данные передаются эхом обратно в компьютер (терминал). Модем автоматически настраивает свою скорость передачи данных и формат знака к параметрам терминала.
Чтобы изменить скорость обмена, надо определить ее в командной строке завершенной <CR> на терминале. Модем дает согласие на введенное изменение и отвечает OK. Команды можно объединять в командную строку, для улучшения ясности в командную строку можно вводить пробелы, тире и т. п.: AT DP 8W (0, легче прочитать и понять чем ATDP8W.
Командная строка может содержать не более 40 символов, исключая пробелы и префикс AT. В случае, если строка длиннее 40 символов, модем возвращает ответ ERROR и игнорирует командную строку. Редактирование ошибочных символов командной строки осуществляется с помощью клавиши <Backspase>. На все правильно введенные и исполненные команды модем отвечает OK. Модем может быть настроен на передачу ответа в форме цифрового кода (удобно для програмного обслуживания модема). Каждый ответ является одно - или двузначным кодом. После включения модем (как правило) настроен на передачу ответа в символьном виде.
4.2. Основной набор команд
AT - начало (префикс) командной строки.
После получения этой команды модем автоматически подстраивает скорость передачи и формат знака к параметрам терминала.
A - ручной ответ.
Команда переключает модем из командного режима на режим ожидания сигнала несущей вызывающего модема. После получения сигнала несущей, модем реализует процедуру положительного ответа на вызов и действует как переключенный на процедуру автоматического ответа. Если модем работает на выделенных линиях связи, то он отвечает несущей без указания частоты. В этом случае если автоматический ответ (auto-answer) выключен (S0=0) и происходит вызов, то для получения связи надо передать команду ATA.
A/ - модем повторяет предыдущую командную строку.
Команда подается без префикса (AT) и нажатия <CR>.
Bn - выбор коммуникационного стандарта:
n = 0 CCITT V.21, V.22, V.22 bis,
n = 1 BELL 103/202A.
Ds - автоматический набор номера.
После получения этой команды, модем начинает набор номера и при получении связи переходит в режим передачи. Команда состоит из телефонного номера, в состав которого могут входить следующие управляющие параметры:
s = P обозначает, что цифры телефонного номера идущие после символа P модем должен набирать импульсно (используются символы 0-9 ).
s = T обозначает, что цифры телефонного номера идущие после символа T модем должен набирать частотой (разрешено использовать символы 0-9, A-D, * а также #).
s = , обозначает перерыв перед набором следующей цифры (2s).
s = ; если применяется как последний знак в командной строке, то модем после набора номера переходит в командный режим работы.
s = @ модем ожидает 5-секундной тишины на линии, если она не появится в течении 30s (содержимое регистра S7), модем отключается, и отвечает NO ANSWER.
s = ! если знак! стоит перед знаками последовательности набора, модем переходит в состояние ON HOOK
(кладет трубку) на 0,5s, а затем снова перейдет в состояние OFF HOOK (снимает трубку).
s = S модем набирает телефонный номер записанный в памяти EEROM.
s = R при записи как последний символ в командной строке, устанавливает модем после набора номера в режим "answer", но только в том случае,
если модем звонит к модему "originate".
s = W модем ожидает ответ станции (длинный гудок) перед дальнейшим набором телефонного номера (например выход на автоматическую междугороднюю связь).
En - местное эхо ON/OFF.
После команды E1 модем возвращает эхо каждого знака передаваемого ему, что позволяет узнать, как действительно работает командная линия. Команда E0 блокирует эту функцию.
n = 0 эхо выключено,
n = 1 эхо включено
Hn - управление линией.
Команда используется прежде всего при окончании телефонной связи:
n = 0 отключение модема от линии,
n = 1 подключение модема на линию.
In - производственный код и контрольная сумма:
n = 0 сообщение кода продукта,
n = 1 подсчет контрольной суммы программы содержащейся в ROM (EPROM),
n = 2 модем проверяет состояние внутренней памяти ROM и возвращает сообщение OK или ERROR.
Ln - установка громкости сигнала встроенного динамика.
n = 0,1 низкая
n = 2 средняя
n = 3 высокая
Mn - управление динамиком (громкоговорителем).
n = 0 динамик выключен,
n = 1 динамик включен только во время набора номера и выключается после обнаружения несущей,
n = 2 динамик включен все время,
n = 3 динамик включается после набора последней цифры номера и выключается после обнаружения несущей отвечающего модема.
Qn - управление ответом модема.
n = 0 ответ включен,
n = 1 ответ выключен.
Независимо от состояния Q0 или Q1 модем всегда сообщает содержание S-регистров, код продукта, контрольную сумму и результаты теста (смотри команды S, I, а также &T).
O - после прохождения команды, модем настраивается на режим передачи данных и отвечает CONNECT (если до этого он находился в командном режиме работы).
Sr? - считывание содержимого S-регистра номер r.
Sr=nnn - ввод числового параметра nnn в S-регистр номер r.
Все команды модифицируют содержимое одного или более S-регистров. Некоторые S-регистры содержат временные параметры, которые можно поменять только командой S.
Vn - выбор вида ответа модема.
n = 0 ответ цифровым кодом,
n = 1 ответ в символьном виде на английском языке.
Таблица 4.1.
Стандартный набор ответов модема
![]() | ![]() |
Ответ Ответ Значение
в символьном цифровым ответа
виде кодом
OK 0 Модем выполнил команду
CONNECT 1 Модем подключен со скоростью 300bps после
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 |






