7.1.3 Установка текущего коммуникационного порта.

   Имеются  два  способа,  которыми  программа  может определить,
какой из коммуникационных портов должен использоваться.  Один  из
способов состоит в указании  номера канала в операторе программы.
Второй способ состоит в написании программы для обмена через порт
COM1, но изменении  коммуникационного адаптера, доступ к которому
идет через COM1.
   Область  данных  BIOS  содержит место для  четырех  2-хбайтных
переменных, которые  содержат   базовые  адреса  коммуникационных
каналов (MS DOS поддерживает только первые два из них).   Базовый
адрес порта это младший из  группы  адресов портов, через которые
можно получить доступ к данному коммуникационному каналу. Базовый
адрес для COM1 хранится в ячейке 0040:0000, а для COM2 - в ячейке
0040:0002. Для смены коммуникационных портов надо просто поменять
эти два значения.  Повторная  смена  значений приведет к первона-
чальному назначению портов.

   Высокий уровень.

   В Бейсике оператор OPEN "COM" может использоваться в виде OPEN
C$+"1200,N,8" AS  #2,  где  C$  может  быть  либо  "COM1:",  либо
"COM2:".  В качестве альтернативы можно использовать PEEK и  POKE
для обмена базовых адресов:

100 DEF SEG = &H40          'указываем на область данных BIOS
110 X = PEEK(0): Y = PEEK(1)  'запоминаем первые 2 байта
120 POKE 0,PEEK(2): POKE 1,PEEK(3)  'переносим 2-е два байта
130 POKE 2,X: POKE 3,Y      'засылаем запомненные значения

   Средний уровень.

   Если программа  обращается  к  коммуникационному  порту  через
прерывание  14H  BIOS,  то COM порт определяется  содержимым  DX,
которое равно 0 или 1  (для  COM1  или  COM2). Вместо того, чтобы
присваивать DX непосредственное значение, заполняйте его из пере-
менной, которой может быть присвоено значение 0 или 1. Программы,
использующие коммуникационные функции 3 и 4 прерывания 21H всегда
адресуются к COM1. В этом случае надо поменять базовые адреса:

;---обмен базовых адресов для COM1 и COM2
   MOV  AX,40H        ;ES указывает на область данных BIOS
   MOV  ES,AX         ;
   MOV  DX,ES:[0]     ;помещаем 1-й базовый адрес в DX


   MOV  AX,ES:[2]     ;помещаем 2-й базовый адрес в AX
   MOV  ES:[0],AX     ;обмениваем адреса
   MOV  ES:[2],DX     ;

 

Вы находитесь в разделе: 
Также вам будет интересно:

Добавить коментарий