Глава 7. Ввод/вывод.
Раздел 1. Доступ к последовательному порту.
7.1.4 Определение статуса коммуникационного порта.
Регистр статуса линии микросхемы UART 8250 определяет протокол связи. Этот регистр имеет адрес порта на 5 больше, чем базовый адрес данного канала. Обычно он постоянно просматривается в процессе коммуникационного обмена. При передаче данных регистр сообщает, что предыдущий символ уже послан, позволяя программе записать новый символ поверх его. При приеме данных регистр информирует программу о поступлении следующего символа, с тем чтобы программа могла прочитать его прежде чем он будет уничтожен следующим прибывшим. Значение битов этого регистра следующее:
бит 0 1 = байт данных получен 1 1 = полученные данные были перезаписаны (предыдущий символ не был вовремя считан) 2 1 = ошибка четности (вероятно, из-за шума в линии) 3 1 = ошибка окружения (передача не синхронизована) 4 1 = обнаружен перерыв (получена длинная строка единиц, индицирующая, что другая станция запрашивает конец передачи) 5 1 = регистр хранения передатчика пуст (в этот регистр должны помещаться передаваемые данные) 6 1 = регистр сдвига передатчика пуст (этот регистр по лучает данные из регистра хранения и преобразует их в последовательный вид) 7 1 = таймаут (устройство не связано с машиной)
Hизкий уровень.
Этот пример совершенно аналогичен приведенному на Бейсике. Из области данных BIOS считывается базовый адрес коммуникационного канала, к нему добавляется 5, а затем из полученного адреса порта считывается байт статуса.
MOV AX,40H | ;ES указывает на область данных BIOS |
MOV ES,AX | ; |
MOV DX,ES:[2] | ;получаем базовый адрес COM2 |
ADD DX,5 | ;добавляем 5 для регистра статуса |
IN AL,DX | ;получаем байт статуса |
TEST AL,10000B | ;бит 5 установлен? |
JNZ BREAK_DETECT | ;если да, то на обработку перерыва |
<~-7.1.3 Установка текущего коммуникационного порта.
Содержание
7.1.5 Инициализация и управление модемом.-~>