Assembler - язык неограниченных возможностей


Последовательный порт - часть 3


бит 3: линия OUT2 — должна быть 1, чтобы работали прерывания

бит 2: линия OUT1 — должна быть 0

бит 1: линия RTS

бит 0: линия DTR

03FCH для чтения — регистр состояния линии (LSR)

    бит 6: регистр сдвига передатчика пуст

    бит 5: регистр хранения передатчика пуст — можно писать в 03F8h

    бит 4: обнаружено состояние BREAK (строка нулей длиннее, чем старт-бит + слово + четность + стоп-бит)

    бит 3: ошибка синхронизации (получен нулевой стоп-бит)

    бит 2: ошибка четности

    бит 1: ошибка переполнения (пришел новый байт, хотя старый не был прочитан из 03F8h, при этом старый байт теряется)

    бит 0: данные получены и готовы для чтения из 03F8h

03FDh для чтения — регистр состояния модема (MSR)

    бит 7: линия DCD (несущая)

    бит 6: линия RI (звонок)

    бит 5: линия DSR (данные готовы)

    бит 4: линия CTS (разрешение на посылку)

    бит 3: изменилось состояние DCD

    бит 2: изменилось состояние RI

    бит 1: изменилось состояние DSR

    бит 0: изменилось состояние CTS

02FFh для чтения и записи — запасной регистр. Не используется контроллером последовательного порта, любая программа может им пользоваться.

Итак, первое, что должна сделать программа, работающая с последовательным портом, — проинициализировать его, выполнив запись в регистр управления линией (03FBh) числа 80h, запись в порты 03F8h и 03F9h делителя частоты, снова запись в порт 03FBh с нужными битами, а также запись в регистр разрешения прерываний (03F9h) для выбора прерываний. Если программа вообще не пользуется прерываниями — надо записать в этот порт 0.

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

; term2.asm ; Минимальная терминальная программа, использующая прерывания ; Выход - Alt-X




Начало  Назад  Вперед