Программирование 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, то есть что символ принят из линии и находиться в вуферном регистре приёмника.