КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Упражнения. Стандартные средства работы с параллельным портом
Стандартные средства работы с параллельным портом Для работы с устройством по параллельному интерфейсу в BIOS предусмотрено прерывание INT 17h, которое предоставляет возможность инициализировать ПУ, передавать данные побайтно и получать информацию о его состоянии. Определить адрес порта LPT4 BIOS не может. Параметры для вызова функций 17h приведены в табл. 101. Слово состояния содержит биты 1..7 регистра состояния указанного порта, а бит 0 является флагом тайм-аута. Если он установлен, то ПУ не снимет сигнал BUSY в течение времени, заданного в соответствующей переменной BIOS.
Табл. 101. Функции INT 17h.
Функция 01h выполняет аппаратный сброс принтера. Обычно принтер приходиться сбрасывать перед настройкой на заданный режим работы (например, при загрузке шрифта). Функцию 02h используют перед началом печати для определения готовности принтера к работе и после вывода байта данных для проверки. После ее выполнения регистр AH будет содержать слово состояния (табл. 102).
Табл. 102. Слово состояния.
Операционная система MS-DOS предоставляет в распоряжение функцию 05h прерывания INT 21h для печати символа на стандартном печатающем устройстве LPT1 (PRN). В регистр AH заносится значение 05h, в регистр DL – ASCII-код символа для печати, на выходе регистр AH будет содержать слово состояния принтера. Пример 1. Определить базовый адрес порта LPT1.
Решение. Для получения базового адреса порта LPT1 необходимо прочитать содержимое ячейки памяти BIOS, расположенной по адресу 0040:0008h. Полученное значение сохраним в переменной LPT1, определенной в сегменте данных, и имеющей размер слова.
PUSH DX; сохранить в стеке содержимое регистра DX
Пример 2. Используя ассемблер TASM, разработать программу передачи символьной строки в параллельный порт на низком уровне.
Решение. Возможный вариант алгоритма вывода строки в параллельный порт приведен на рис. 47. Для определенности выбран порт LPT1. Вывод в порт будет происходить посимвольно, поэтому строка должна заканчиваться специальным символом, отмечающим ее конец. Таким символом может быть символ с кодом ноль, т.е. строка будет нультерминированной. Для вывода одного символа в порт необходимо вначале получить состояние статусного регистра SR и проверить самый старший бит (BUSY). Если он равен 0 (принтер занят), следует организовать цикл опроса регистра SR до достижения готовности принтера. При готовности принтера код выводимого символа передается в регистр данных DR. Затем необходимо последовательность стробирующих импульсов передать в самый младший разряд (STROBE) регистра управления CR.
Рис. 47. Алгоритм вывода строки в параллельный порт.
Пример программы вывода строки в параллельный порт приведен ниже.
DATA SEGMENT ; переменная для хранения базового адреса LPT1 LPT1 DW 0 DATA ENDS
STACK SEGMENT STACK DB 128 DUP(?) STACK ENDS
CODE SEGMENT MOV AX, DATA MOV BX, OFFSET str; помещаем в регистр BX смещение выводимой строки
OUTBYTE PROC; процедура вывода символа из AL на принтер PUSH DX ENDP
CODE ENDS
END
В начале программы описан сегмент данных, содержащий выводимую ASCIIZ-строку и переменную LPT1 размером слово для хранения базового адреса порта LPT1. В сегменте кода вначале определяется базовый адрес порта LPT1, а затем выполняется цикл LOOP1 побайтного вывода строки, условие завершения для которого – текущий символ равен 0. Вывод символа производится процедурой OUTBYTE. На момент вызова процедуры код выводимого символа должен находиться в регистре AL. В самой процедуре считывается регистр SR и проверяется его разряд BUSY. Если принтер занят, организуется цикл LOOP2, в котором повторяется опрос регистра SR до достижения готовности принтера. Затем в регистр DR записывается код символа, а последовательность стробирующих импульсов – в разряд STROBE регистра CR.
Пример 3. В решении задачи 2 цикл ожидания готовности принтера может продолжаться бесконечно долго, если по какой-либо причине он держит на линии сигнал BUSY. Для устранения «зависания» в цикле LOOP2 выполните привязку к таймеру для проверки времени ожидания и, в случае ожидания более чем на 15÷20 сек, выведите сообщение о неготовности принтера к работе. Кроме того, после определения базового адреса выполните проверку, не равен ли он 0 (признак отсутствия LPT порта). Контрольные вопросы 1. Какие существуют разновидности интерфейса Centronics? 2. Опишите передачу данных по интерфейсу Centronics с помощью временной диаграммы. 3. Опишите работу с параллельным портом на низком уровне. 4. Какие средства работы с параллельным портом предоставляет BIOS и MS-DOS?
Дата добавления: 2014-11-16; Просмотров: 531; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |