Регистр разрешения прерываний
Jmp short ketry
In al, dx
Jmp short ketry
Mov ah, 0
Mov es, ax
Mov ax, 40h
Текст программы
ketry: mov dx, es:[0] ;базовый адрес порта COM в dx
add dx, 5; адрес регистра статуса в dx
in al,dx ;читаем в регистр al
test al, 00011110b ;проверка на ошибку порта
jnz error ;если есть ошибки, то на метку error
test al, 00000001b ;данные получены?
jnz prb ;если байт принят, то на метку prb
test al, 00100000b ; регистр хранения передатчика пуст?
jz ketry ;в начало
mov ah, 1 ;иначе
int 16h ;проверка клавиатуры
jz ketry ;если в буфере клавиатуры нет кода, то в начало
int 15h ;загрузка символа с клавиатуры в al
sub dx, 5 ;вычисляем адрес регистра хранения
out dx, al ;загрузка символа в регистр хранения порта
prb: mov dx, es:[0]
…
…
Работа COM – порта в режиме прерываний
Сигнал прерываний от COM – порта поступает на вход контроллера прерываний. Если прерывания разрешены, то программа обработки прерываний в зависимости от состояния регистра статуса может принимать или передавать байт.
Для инициализации работы порта в данном режиме регистр разрешения прерываний должен быть загружен определенным образом.
В указанные ниже разряды регистра необходимо записать единицы, которые разрешают прерывания по перечисленным причинам:
Бит 0 – прерывание при получении данных
Бит 1 – прерывание, когда регистр хранения передатчика пуст
Бит 2 – прерывания при ошибке приема данных
Бит 3 – прерывания при изменении регистра статуса модема