Программирование COM портов

Старший байт делителя записывается в порт 3F9h. Зависимост скорости передачи данных от значе- ния делителя частоты приведины в таблице 1:

Таблица 1.

Делитель Скорость передчи в бодах. Делитель Скорость передчи в бодах.
1040 110 24 4800
768 150 12 9600
384 300 6 19200
192 600 3 38400
96 1200 2 57600
48 2400 1 115200

Порт 3F9h.

Порт используется как регистр управления прерываниями от асинхронного адаптера или (после вывода в порт 3F9h байта с установленым в 1 стар- шим битом) для вывода значения старшего байта делителя частоты такто- вого генератора. В режиме регистра управления прерываниями порт имеет следующий формат.

Таблица 2.

Бит Значение
0 1 - разрешемие прерывания при готовности принимаемых данных.
1 1 - разрешение прерывания после передачи байта (когда выхо - дной выходной буфер передачи пуст.)
2 1 - разрешение прерывания по обнаружении состояния "BREAK" или ошибки.
3 1 - разрешение прерывания по изменению на разъёме RS-232-C.
4-7 Не используются, должны быть равны 0.

Порт 3FAh.

Регистр идентификации прерывания. По его содержимому программа может определить причину прерывания. Формат регистра приведён в таблице 3.

Таблица 3.

Бит Значение
0 1 - нет прерываний, ожидающих обслуживания.
1-2 00 - прерывание по линии состояния приёмника, возникает при переполнении приёмника, ошибка чётности или формата данных, или при состоянии "BREAK". Сбрасывается после чтения состо - яния линии и порта 3FDh.
  • 01 - данные приняты и доступны для чтения. Сбрасывается после после чтения данных из порта 3F8h.
  • 11 - Состояние модема. Устонавливается при изменении состояния входных линий CTS, RI, DCD, DSR.
3-7 Должны быть равны 0.

Порт 3FBh.

Управляющий регистр, доступен по записи и чтению. Его формат показан в таблице 4.

Таблица 4.

Бит Значение
0-1 Длинна слова в байтах. 00 - 5 бит.
  • 01 - 6 бит.
  • 10 - 7 бит.
  • 11 - 8 бит.
2 Количество стоповых битов: 0 - 1 бит, 1 - 2 бита.
3-4 Чётность:
  • 10 - контроль на чётность неиспользуется;
  • 01 - контроль на нечётность.
  • 11 - контроль на чётность.
5 Фиксация чётности. При установки этого бита бит чётности всегда принимает зна - чение 0 (если биты 3-4 равны 11) или 1 (если биты 3-4 равны 01)
6 Установка перерыва. Вызывает вывыод строки нулей в качестве сигнала "BREAK" для подключения устройства.
7 1 - порты 3F8h и 3F9h используется для загрузки делителя частоты тактового генератора; 0 - порты используются как обычно.

Порт 3FCh.

Регитр управления модемом. Упровляет состоянием выходных линий DTR, RTS, линий, специфических для модемов OUT1 и OUT2, для запуска диагно- стики при входе асинхронного адаптера, замкнутым на его выход. Формат порта приведён в таблице 5.

Таблица 5.

Бит Значение
0 Линия DTR
1 Линия RTS.
2 Линия OUT1 (запасная)
3 Линия OUT2 (запасная)
4 Запуск диагностики при входе асинхронного|
адаптера, замкнутом на его выход.
5-7 Должно быть равно 0


Порт 3FDh.
Регистр состоянии линии. Значение зарядов регистра приведены в
таблице 6.

Таблица 6.

Бит Значение
0 Данные получены и готовы для чтения, сбрасываетсь при чтении данных.
1 Ошибка переполнения. Был принят новый байт данных, а предыдущий ещё не был считан программой. Предыдущий байт потерен.
2 Ошибка чётности, сбрасывается после чтения состояния линии.
3 Ошибка синхронизации.
4 Обнаружен запрос на прерывание передачи "BREAK" - длинная строка нулей.
5 Регистр хранения передатчика пуст, в него можно записать новый байт для передачи.
6 Регистр сдвига передатчика пуст. Этот регистр получает данные из регистра хранения и преобразует их в последовательный вид для передачи.
7 Тайм-аут (устройство не связано с компьютером)

Порт 3FEh.

Регистр состояния модема. Значения битов указвны в таблице 7.

Таблица 7.

Бит Значение
0 Линия CTS изменила состояние.
1 Линия DSR изменила состояние.
2 Линия IR изменила состояние.
3 Линия DCD изменила состояние.
4 Состояние линии CTS
5 Состояние линии DSR
6 Состояние линии IR.
7 Состояние линии DCD.

Приём и передача данных.

Перед записью байта данных в регистр передатчика нужно убедиться, что регистр хранения передатчика свободен, то есть убедиться в том, что передача предыдущего символа завершена. Признаком свободы регистра передатчика является установленный в 1 бит 5 регистра состояния линии с адресом 3FDh.

Аналогично передачи данных перед вводом символа из порта приёмника 3F8h следует убедиться, что бит 0 порта 3FDh установлен в 1, то есть что символ принят из линии и находиться в вуферном регистре приёмника.