Прерывания

Последовательный порт может быть сконфигурирован так, чтобы генерировать или одно прерывание последовательного порта (Serial Port Interrupt), или раздельные прерывания и по передаче (Transmit Interrupt), и по приему (Receive Interrupt).

Если прерывание последовательного порта замаскировано, а прерывания по приему и передаче разрешены, флаги RI и TI генерируют раздельные прерывания приема и передачи.

Если прерывание последовательного порта разрешено, а прерывания по приему и передаче запрещены, флаг RI и флаг TI генерируют одно и то же прерывание последовательного порта. Когда флаг TI генерирует прерывание, устанавливается бит 5 в регистре SP_STAT. Когда флаг RI генерирует прерывание, устанавливается бит 6 в регистре SP_STAT.

Чтобы разрешить индивидуальные прерывания по передаче и приему, установите нулевой TI_MASK и первый RI_MASK биты в регистре маскирования прерываний INT_MASK1 (см. Приложение). Чтобы разрешить прерывание последовательного порта, установите бит SER_MASK в регистре INT_MASK (INT_MASK.6) (см. Приложение).

Таблица 5.1

Мнемоника регистраНазваниеАдресОписание
INT_MASKМаска прерывания08HУстановка бита INT_MASK.6 разрешает прерывание последовательного порта INT06,800CH. Очистка бита INT_MASK.6 запрещает прерывание последовательного порта.
INT_MASK1Маска прерывания 113HУстановка бита INT_MASK1.0 разрешает прерывание передатчика (INT08,8030H). Очистка бита INT_MASK.0 запрещает прерывание передатчика.
Установка бита INT_MASK1.1 разрешает прерывание приемника (INT09,8032H). Очистка бита INT_MASK.1 запрещает прерывание приемника.
INT_PENDЗахват прерывания09HУстановка бита INT_PEND.6 индицирует захват прерывания последовательного порта (INT06). Бит сбрасывается при переходе к вектору по адресу 800CH.
INT_PEND1Захват прерывания 112HУстановка бита INT_PEND.0 индицирует захват прерывания передатчика (INT08). Бит сбрасывается при переходе к вектору по адресу 8030H.
Установка бита INT_PEND.1 индицирует захват прерывания приемника (INT09). Бит сбрасывается при переходе к вектору по адресу 8032H.

ФРАГМЕНТ ПРОГРАММЫ

Serial_Out:

jbc SP_STAT, 3, Serial_Out ; Тестирование третьего бита регистра состояния (Буфер пуст?)

stb data, SBUF ; ОК! Передаем байт

ret

<<< Содержание >>>