Работа с Com портом

Тема в разделе "Другие", создана пользователем ilsinho, 13 сен 2011.

Статус темы:
Закрыта.
  1. ilsinho

    ilsinho Гость

    Помогите, пожалуйста, составить программу. Задание такое: "Написать 16–ти разрядную ассемблерную программу, которая выводит на экран консоли сообщение о том, установлен или нет порт СОМ2 и в случае установки выводит также его базовый адрес в 16-тиричном виде."
    Вот, что нашел

    Определение статуса коммуникационного порта.​

    Регистр статуса линии микросхемы UART 8250 определяет протокол связи. Этот регистр имеет адрес порта на 5 больше, чем базовый адрес данного канала. Обычно он постоянно просматривается в процессе коммуникационного обмена. При передаче данных регистр сообщает, что предыдущий символ уже послан, позволяя программе записать новый символ поверх его. При приеме данных регистр информирует программу о поступлении следующего символа, с тем чтобы программа могла прочитать его прежде чем он будет уничтожен следующим прибывшим. Значение битов этого регистра следующее:

    бит 0 1 = байт данных получен
    1 1 = полученные данные были перезаписаны (предыдущий
    символ не был вовремя считан)
    2 1 = ошибка четности (вероятно, из-за шума в линии)
    3 1 = ошибка окружения (передача не синхронизована)
    4 1 = обнаружен перерыв (получена длинная строка единиц,
    индицирующая, что другая станция запрашивает
    конец передачи)
    5 1 = регистр хранения передатчика пуст (в этот регистр
    должны помещаться передаваемые данные)
    6 1 = регистр сдвига передатчика пуст (этот регистр по-
    лучает данные из регистра хранения и преобразует
    их в последовательный вид)
    7 1 = таймаут (устройство не связано с машиной)

    Средний уровень.​

    Функция 3 прерывания 14H BIOS возвращает в AH регистр статуса линии. При входе DX должен содержать номер коммуникационного порта, к которому осуществляется доступ, где COM1 = 0, а COM2 = 1. Kак и предыдущий пример, этот проверяет наличие перерыва:

    Код (Text):
     MOV AH,3        ;номер функции
    MOV DX,1         ;выбираем COM2
    INT 14H      ;получаем байт статуса
    TEST AH,10000B  ;обнаружен перерыв?
    JNZ BREAK_DETECT ;если да, то на процедуру обработки
    Hизкий уровень.

    Из области данных BIOS считывается базовый адрес коммуникационного канала, к нему добавляется 5, а затем из полученного адреса порта считывается байт статуса.

    Код (Text):
    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  ;если да, то на обработку перерыва
    Вот пример обмена базовых адресов
    Код (Text):
    ---обмен базовых адресов для COM1 и COM2
    MOV AX,40H    ;ES указывает на область данных BIOS
    MOV ES,AX       ;
    MOV DX,ES:[0]   ;помещаем 1-й базовый адрес в DX
    MOV AX,ES:[2]   ;помещаем 2-й базовый адрес в AX
    MOV ES:[0],AX   ;обмениваем адреса
    MOV ES:[2],DX   ;
    Как осуществить проверку, а потом еще в 16-ти ричном виде вывести? Помогите, плз.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей