|
Адаптер асинхронных коммуникаций дает
возможность связываться с
IBM PC по последовательному интерфейсу.
Этот адаптер дает
возможность связываться с другими ЭВМ,
службами баз данных, а также
с другими источниками информации. Мы не
будем обсуждать принципы
работы этого канала, а поговорим о методах
программирования этого
конкретного адаптера IBM PC.
Интегральная микросхема коммуникаций
проделывает всю работу по
приему и передаче символов по асинхронной
линии. Элемент
асинхронной связи ACE (Asynchronous
Communication Element) 8250
можно запрограммировать для управления
самыми различными аспектами
связи. При инициализации элемента ACE под
пограммным контролем
оказываются размер символа, частота
передачи, символы останова и
биты четности. Адаптер также позволяет
проверять и задавать
стандартные сигналы управления модемом
(модулятора -
демодулятора).
С помощью элемента ACE символ передается
просто посредством его
записи в регистр передачи. Микросхема
далее выполняет все, что
соответствует кодам, которые вы передали
ей при инициализации.
Чтобы принять символ, вы просто читаете
его из буфера приема.
Существует регистр состояния, называемый
регистром состояния линии,
который показывает, когда буфер передачи
пуст и может принять
другой символ. Другой бит регистра
состояния сообщает, когда
элемент ACE уже принял символ из другой
системы.
В техническом описании приводятся и другие
регистры, входящие в
элемент ACE 8250. Эти регистры дают
возможность управления модемом
и определения его состояния. Вы также
можете разрешить выработку
прерывания при возникновении в элементе
ACE различных условий. Это
позволяет вашей программе быстро
реагировать на любую смену внешних
условий.
east-font-family:"MS Mincho"'>
Программа
на Фиг. 8.16 демонстрирует основные механизмы,
необходимые для инициирования элемента
ACE, посылки и приема
символа. Базовый адрес ввода-вывода платы
адаптера равен 3F8H, так
что регистры элемента ACE расположены по
адресам от 3F8H до 3FEH.
Можно также модифицировать адаптер
асинхронной связи фирмы IBM так,
чтобы его регистры соответствовали адресам
ввода-вывода от 2F8H до
2FEH. С помощью такой модификации можно
установить в персональную
ЭВМ второй адаптер и связаться с двумя
различными внешними
устройствами. Фактически, можно подключить
печатающее устройство к
системе с помощью последовательного, а не
параллельного сопряжения.
В этом случае нужны два адаптера: один из
них работает с печатающим
устройством, а другой обслуживает внешние
связи.
Один из портов ввода-вывода элемента ACE
выполняет несколько
функций. Оба буфера, передачи и приема,
находятся по адресу 3F8H,
так что когда что-либо записывается по
этому адресу, информация
попадает в буфер передачи, но при чтении
по этому адресу, вы
получаете последний символ, принятый
микросхемой ACE. Этот же порт
ввода-вывода выполняет и третью функцию.
Значение делителя,
определяющее скорость работы адаптера,
записывается в этот порт
ввода-вывода. Микросхема ACE делит входную
частоту на число,
помещенное в регистр делителя, позволяя
тем самым выбрать скорость
от 50 до 9600 бод. Режим использования
порта 3F8H задает один из
битов управляющего регистра.
Microsoft (R) Macro Assembler Version 5.001/1/80
04:05:45
Фиг. 8.16 Управление последовательным каналомPage1-1
PAGE
,132
TITLE
Фиг. 8.16 Управление последовательным каналом
0000 STACK SEGMENT STACK
00000040[ DW 64 DUP (?)
????
]
0080 STACK ENDS
= 03F8 SERIALEQU
03F8H
0000 CODE SEGMENT
ASSUMECS:CODE
0000 ASYNC PROC
FAR
00001E PUSH DS ; Адрес возврата в ДОС
00012B C0 SUB AX,AX
000350 PUSH AX
0004BA 03FB MOV DX,SERIAL+3; Управляющий регистр
0007B0 80 MOV AL,80H
0009EE OUT
DX,AL; Настройка на установку
скорости
000AB8 0180 MOV AX,384 ; Делитель частоты для скорости 300 бод
000DBA 03F8 MOV DX,SERIAL
0010EE OUT
DX,AL; Младшая часть делителя
00118A C4 MOV AL,AH
Фиг. 8.16 Управление
последовательным каналом (начало)
001342 INC DX
0014EE OUT
DX,AL; Старшая часть делителя
0015BA 03FB MOV DX,SERIAL+3; Управляющий регистр
0018B0 03 MOV AL,00000011b; Режим без
проверки на четность,8 бит
001AEE OUT
DX,AL
;-----Вывод символа в канал
001BBA 03FD MOV DX,SERIAL+5; Регистр состояния канала
001E SEND:
001EEC IN
AL,DX
001FA8 20 TEST AL,20H
002174
FB JZ SEND
0023B0 41 MOV AL,'A'
0025BA 03F8 MOV DX,SERIAL
0028EE OUT
DX,AL
;-----Прием символа
0029BA 03FD MOV DX,SERIAL+5; Регистр состояния канала
002C RECV:
002CEC IN
AL,DX
002DA8 02 TEST AL,2
002F74 FB JZ RECV
0031BA 03F8 MOV DX,SERIAL
0034EC IN
AL,DX
0035CB RET
0036 ASYNC ENDP
0036 CODE ENDS
END
ASYNC
Фиг.8.16 Установка, пересылка и получение
данных по
асинхронному каналу (продолжение)
Первая часть программы примера
инициализирует микросхему ACE
8250. Первым делом программа настраивает
скорость работы адаптера.
Значение делителя, равное 384,
устанавливает скорость 300 бод.
Обратите внимание, что перед записью
значения делителя программа
заносит 1 в бит 7 управляющего регистра по
адресу 3FBH.
Окончательный вывод в порт 3FBH задает
характеристики линии. В этом
Microsoft (R) Macro Assembler Version 5.001/1/80
04:05:50
Фиг. 8.17 Обработка прерываний от последовательного каналаPage1-1
PAGE
,132
TITLE
Фиг. 8.17 Обработка прерываний от последовательного канала
0000 ABS0 SEGMENT AT 0
002C
ORG 0BH*4
002C
ASYNC_INTERRUPT LABEL WORD
002C ABS0 ENDS
0000 STACK SEGMENT STACK
Фиг. 8.17 Обработка прерываний от последовательного канала
(начало)
00000040[ DW 64 DUP (?)
????
]
0080 STACK ENDS
0000 CODE SEGMENT
ASSUMECS:CODE
00000049 R BUFFER_POINTERDW
BUFFER
0002
SET_INTERRUPT PROC FAR
00022B C0 SUB AX,AX
00048E D8 MOV DS,AX
ASSUMEDS:ABS0 ; Адресация по
сегментному регистру DS
;в
область векторов прерываний
;-----Установка прерывания
0006C7 06 002C R 0024 R MOV
ASYNC_INTERRUPT,offset INT_HANDLER
000C8C 0E 002C R MOV ASYNC_INTERRUPT,CS;
Занесение вектора прерывания
0010BA 03F9 MOV DX,03F9H; Регистр разрешения прерываний
0013B0 04 MOV AL,04H ; Прерывание по
приему из канала
0015EE OUT
DX,AL
0016E4 21 IN AL,21H ; Регистр маски
прерываний 8259
001824 F7 AND AL,0F7H; Занесение 0 в
разряд 3
001AE6 21 OUT 21H,AL ; Прерывание не
маскируется
001CBA 03FC MOV DX,3FCH; Регистр управления модемом
001FB0 08 MOV AL,08H ; разряд OUT2
0021EE OUT
DX,AL
0022EB FE HERE: JMP HERE ; Конец задания режима работы
последователь-
0024
SET_INTERRUPT ENDP ;ного канала,ожидание прерывания
;-----Программа обработки прерываний от последовательного канала по приему
0024
INT_HANDLER PROC FAR
002450 PUSH AX ; Сохрание используемых регистров
002553 PUSH BX
002652 PUSH DX
0027BA 03FD MOV DX,3FDH; Регистр состояния канала
002AEC IN
AL,DX
002BA8 01 TEST AL,01H ; Был ли получен
символ?
002D74 12 JZ INT_RETURN ; Нет,возврат из
прерывания
002FBA 03F8 MOV DX,3F8H; Регистр приема данных
0032EC IN
AL,DX; Выбор символа из канала
00332E: 8B 1E 0000 R MOV
BX,BUFFER_POINTER
00382E: 88 07 MOV CS:[BX],AL; Сохранение в
буфере
003B43 INC BX
003C2E: 89 1E 0000 R MOV
BUFFER_POINTER,BX
0041
INT_RETURN:
00415A POP DX ; Восстановление регистров
00425B POP BX
0043B0 20 MOV AL,20H ; Сброс
контроллера прерываний
Фиг. 8.17 Обработка прерываний от последовательного канала(продолжение)
0045E6 20 OUT 20H,AL
004758 POP AX
0048CF IRET
; Возврат из прерывания
0049
INT_HANDLER ENDP
00490080[ BUFFERDB 128 DUP (?)
??
]
00C9 CODE ENDS
END
SET_INTERRUPT
Фиг. 8.17 Асинхронные прерывания
(окончание)
Оставшиеся две части примера посылают и
принимают символ. В
регистре состояния линии по адресу
ввода-вывода 3FDH есть биты
состояния буферов передачи и приема.
Посылать символ до тех пор,
пока буфер передачи не опустеет, нельзя; и
естественно, нельзя
читать символ до того, как он принят.
Адаптер асинхронной связи также работает с
прерываниями. Сигнал
OUT2 в регистре управления модемом
передает сигнал прерывания от
микросхемы ACE системе. Регистр разрешения
прерываний в микросхеме
ACE выбирает те возможные изменения
состояний, которые приведут к
возбуждению внешнего прерывания. Адаптер
асинхронной связи
возбуждает прерывание уровня 3 контроллера
прерываний 8259.
Давайте посмотрим, как можно использовать
прерывание от
асинхронной платы для того, чтобы
принимать символы. На Фиг. 8.17
показана последовательность событий,
необходимых для включения
системы прерываний. В случае аппаратного
прерывания, программа
устанавливает вектор прерывания,
соответствующий уровню 3
контроллера 8259 (прерывание 0BH по адресу
58H), на адрес процедуры
обслуживания прерывания. Затем она
сбрасывает бит регистра маски,
соответствующий прерыванию от платы связи.
В микросхеме ACE 8250
программа загружает регистр разрешения
прерывания так, чтобы
разрешить прерывания по состоянию приемной
линии. И наконец,
программа включает линию OUT2, чтобы в
систему поступали
прерывания. Когда все это работает, не
возникает никаких проблем о
бработке символов по мере их получения
системой. Программа на Фиг.
8.17 помещает эти символы в буфер, где их
может не торопясь
просматривать другая программа.
|