Справочник программиста на персональном компьютере фирмы IBM. Ввод/вывод - Инициализация и управление модемом. Часть 2
ОГЛАВЛЕНИЕ
Высокий уровень.
Поскольку телефонная связь очень медленная, то связь с модемом
это одна из областей, где программирование связи на Бейсике ничем
не хуже, чем на языке ассемблера. Вот грубая схема:
100 OUT BASEADDRESS+4,1 'устанавливаем бит DTR
110 '''теперь посылаем управляющую строку для вызова и установле-
120 '''ния связи - этот код меняется от модема к модему
.
.
200 X = INP(BASEADDRESS+2) 'получаем регистр статуса модема
210 IF X AND 2 <> 2 THEN 200 'ждем пока будет установлен бит 1
220 OUT BASEADDRESS+4,3 'устанавливаем бит RTS
230 X = INP(BASEADDRESS+2) 'получаем регистр статуса модема
240 IF X AND 1 <> 1 THEN 230 'ждем пока будет установлен бит 0
250 '''теперь посылаем данные
Низкий уровень.
Вот та же самая схема на языке ассемблера:
;---устанавливаем сигнал DTR
MOV DX,BASE_ADDRESS ;начинаем с базового адреса
ADD DX,4 ;указываем на регистр контроля модема
MOV AL,1 ;устанавливаем бит 1
OUT DX,AL ;посылаем в порт
;---посылаем управляющую строку модему для вызова
.
(этот код разный для разных модемов)
.
;---ожидаем пока будет установлен сигнал DSR
INC DX ;указываем на регистр статуса модема
INC DX ;
TRY_AGAIN: IN AL,DX ;получаем содержимое
TEST AL,10B ;проверяем второй бит
JZ TRY_AGAIN ;ждем пока он не будет равен 1
;---устанавливаем бит RTS
DEC DX ;возвращаемся к регистру управления
DEC DX ;
MOV AL,3 ;устанавливаем сигнал RTS
OUT DX,AL ;посылаем в порт
;---ожидаем сигнала CTS
INC DX ;возвращаемся к регистру статуса
INC DX ;
ONCE_MORE: IN AL,DX ;получаем байт статуса
TEST AL,1 ;проверяем бит CTS
JZ ONCE_MORE ;не продолжаем пока он не установлен
;---теперь можно посылать данные