Программирование 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.  			
  |  		
| 3-7 | Должны быть равны 0. | 
Порт 3FBh.
Управляющий регистр, доступен по записи и чтению. Его формат показан в таблице 4.
Таблица 4.
| Бит | Значение | 
| 0-1 | Длинна слова в байтах. 00 - 5 бит.  			
  |  		
| 2 | Количество стоповых битов: 0 - 1 бит, 1 - 2 бита. | 
| 3-4 | Чётность:  			
  |  		
| 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, то есть что символ принят из линии и находиться в вуферном регистре приёмника.
