Консалтинговая компания Консалтер.Ру
Главная Новости Библиотека Исследования Законодательство Консалтинг Бизнес-форумы Контакты

Реклама

Рекомендуем



Консалтер.Ру > Библиотека > Информационные технологии

В.А. Авдеев, В.Ф. Гузик
Компьютеры: шины, контроллеры, периферийные устройства

Учебное пособие. Таганрог: ТРТУ, 2001. - 536 с.

Предыдущая

Приложение В. Проверочные задания, основные сведения и примеры программ

Параллельный порт. Принтер

2.1. Формулировка задания

Изучить принцип работы печатающего устройства (ПУ). Написать программу на ассемблере, осуществляющую вывод данных на печать с помощью портов адаптера (регистра данных, регистра управления и состояния). Программа выполняет опрос флага готовности ПУ (6 или 7 разряда порта состояния, адрес которого 379h) перед выводом очередного символа на печать, предварительно размещенного в регистре данных (378h) адаптера. Если ПУ готово принять символ (6 разряд (АСК) порта состояния равен 0 или 7 разряд (BUSY) порта состояния равен 1), то программа устанавливает разряд 0 (STR) регистра управления (37Ah), сигнал с выхода которого осуществляет запись символа в ПУ. После чего единичное значение разряда 0 регистра управления сбрасывается в исходное состояние. Данные, выводимые на печать, могут быть заданы в программе, вводятся в буфер с помощью клавиатуры с использованием соответствующего прерывания DOS или BIOS или размещены в виде текстового файла на диске.

2.2. Основные сведения

В общем случае в ПК предусматривается наличие трех параллельных портов (LPT1 - LPT3). Базовый (начальный) адрес LPT1 хранится в области данных BIOS в ячейке 0040-0008: а для LPT2 - в ячейке 0040-000A и т.д. Наиболее употребительным является базовый адрес принтера, равный 378h, который соответствует регистру данных адаптера принтера. Базовый адрес - это младший адрес из группы адресов (378h - 37Ah). Регистру состояния адаптера принтера присвоен адрес 379h, а регистру управления - адрес 37Ah. Форматы регистров состояния и управления имеют следующий вид.

Формат регистра состояния принтера:

Формат регистра управления принтером:

Рассмотрим протокол обмена данными между адаптером и принтером. Байт данных помещается в регистр данных (порт 378h) адаптера, с выходов которого он поступает в принтер. Затем устанавливается бит 0 (STR) регистра управления (порт 37Ah) и тут же сбрасывается. Сигналом STR выполняется запись байта данных во входной регистр принтера и формирование сигнала прерывания, указывающего микропроцессору принтера, что его входной регистр полон.

После этого программа сканирует бит 7 или бит 6 регистра состояния (порта 379h) с целью определить момент готовности принтера к приему следующего байта данных. Принтер может не печатать сразу байт данных, а хранит его в своем буфере до тех пор, пока не будет образована строка данных для печати. Кроме того, вывод данных на печать можно организовать и с помощью тайм-аута (определенного интервала времени), учитывающего задержку в готовности принтера. Более эффективно процессорное время используется в режиме прерывания, которое выполняется в том случае, если принтер готов принять очередной символ. Тогда адаптер при наличии сигнала разрешения прерывания (бита D4=1 порта 37Ah) формирует сигнал прерывания IRQ7, поступающий в контроллер прерывания.

Несмотря на простоту управления, принтер представляет собой достаточно сложное устройство, имеющее свой микропроцессор, ПЗУ и ОЗУ.

Микропроцессор используется для обработки управляющих последовательностей и управления печатью. ПЗУ содержит описание рисунков символов в зависимости от их кода и выбранной таблицы и программы на языке используемого микропроцессора. ОЗУ применяется для временного хранения введенных данных и спроектированных пользователем символов. Ряд принтеров, помимо интерфейса Centronics, могут подключаться и к последовательному интерфейсу.

 Принтер обрабатывает ряд спецсимволов (таких, как звонок, забой, горизонтальная и вертикальная табуляция), а также имеет достаточно сложную систему команд для изменения режимов работы и управления печатью.

Обычно команды начинаются с символа ESC (шестнадцатеричный код 1Bh) и имеют длину от двух байт и более (существуют командные последовательности, включающие по несколько килобайт информации, например команды загрузки спроектированных пользователем шрифтов). Спецсимволы и байты команд передаются принтеру так же, как и обычные символы, предназначенные для печати, описанным выше способом.

Подобный способ управления удобен для программного изменения режимов работы устройства. Учитывая, что выпуском принтеров для ПК занимается достаточно большое число компаний, и возможности принтеров постоянно совершенствуются, нет смысла приводить полностью какую-либо систему команд, так как, во-первых, она в разных марках и моделях принтеров различна, и, во-вторых, достаточно полно описывается в документации на каждый конкретный принтер.

Существует два основных стандарта на систему команд и таблицу используемых символов (стандарты IBM и EPSON), которых в основном придерживаются фирмы-изготовители, оставляя за собой право вносить в них изменения и дополнения. Единого стандарта как на систему команд, так и на расположение и рисунки символов второй половины таблицы ASCII (коды 129-255) нет. Наиболее часто используемые команды: 

- установка вида шрифта и режима печати;

- черновой текстовый (draft), нормальной ширины (pica), узкий (condensed) или средней ширины (elita),

- качественный шрифт (NLQ, Proportional, Orator, Script и т. д.);

- выбор таблицы символов из ПЗУ (обычно имеется несколько таблиц, отличающихся расположением управляющих кодов, наличием и расположением псевдографических символов или курсива);

- загрузка в ОЗУ принтера спроектированных пользователем шрифтов и работа с ОЗУ принтера (именно в этой группе команд имеются наибольшие различия между разными моделями);

-  управление принтером в режиме точечной графики;

- установка служебных параметров (размеры отступов, страницы, шаг табуляции, расстояние между строками) и изменение характеристик (сброс, включение/отключение датчика конца бумаги, печать в одну или в две стороны и т.п.).

Ряд характеристик и режимов работы может выбираться как программно, так и аппаратно с использованием кнопок и клавиш на лицевой панели и DIP-переключателей. Существуют характеристики, изменить которые можно только аппаратно (например, возможность загрузки шрифтов или размер используемого ОЗУ).

В последних моделях ПК используется улучшенный параллельный двунаправленный 8-разрядный порт (ЕРР), который реализует рутинные операции, а процессор выполняет только передачу данных в буферную память ЕРР. Поэтому порт ЕРР выполняет передачу быстрее (режим Fast Centronics), чем LPT-порт. Порт ЕРР совместим с портом LPT и требует предварительной программной инициализации.

Другим стандартом параллельного порта является порт с расширенными возможностями (ЕСР), в котором сохранен режим Fast Centronics и реализованы новые функции, в частности сжатие данных.

2.3. Пример выполнения варианта задания

Вариант задания: выводимый на печать текст хранится в программе, для опроса готовности принтера используется бит 7 порта состояния и команда проверки TEST.

В приведенной ниже программе сегмент стека с именем и типом STACK используется для временного хранения содержимого регистров и для обеспечения нормального возврата в систему по завершению программы. Под сегмент стека резервируется 48 слов (96 байт). Адрес первой выполняемой команды задается в операторе END в конце программы. Операторы вталкивания в стек значения регистра DS и нулевого содержимого регистра АХ совместно с оператором RET (в конце основной программы) предназначены для возврата в систему.

В начале текста программы порту данных (РД), состояния и управления (РУ) адаптера ПУ присвоены символические имена Data_Port, State_Port и Control_Port соответственно.

Выводимая строка символов имеет начальный адрес OUTS. В конце текстовой строки, заключенной в апострофы, следуют символы перевода строки, возврата каретки и код 0, указывающий на окончание печати.

Основная программа имеет имя TEST. Первый выполняемый оператор памяти обозначен меткой START. Индексный регистр SI устанавливается на начало печатаемой строки. В регистр AL загружается байт из сегмента, адресуемого регистром CS (сегмент PROGS) по адресу OUTS + SI (начальный адрес строки + смещение). Затем производится сравнение этого байта с нулем (знаком завершения строки печатаемого текста). В случае неравенства вызывается подпрограмма печати символа, наращивается на единицу содержимое SI и выполняется переход на метку COIL (вызов очередного байта). Если очередной байт равен нулю, то осуществляется выход в систему командой RET (метка FINITA).

Печать одного символа реализована в виде отдельной процедуры с именем PRINT, которая выполняет печать символа, содержащегося в регистре AL, для ввода-вывода содержимого портов используется регистр DX. Прежде всего, в порт данных (РД) выводится код печатаемого символа. Затем вводится содержимое порта состояния и анализируется флаг готовности (АСК).

Если флаг готовности сброшен, то осуществляется циклический переход на метку WAIT1 до тех пор, пока флаг готовности не станет равным 1. После этого в порт управления (РУ) последовательно выводятся два управляющих байта, в которых младший (нулевой) разряд вначале равен 1 (первый байт), а затем равен 0 (второй байт), т.е. осуществляется запись содержимого РД адаптера в регистр контроллера ПУ. Возврат в основную программу производится после того, как символ напечатан.

            При использовании текстового редактора исходная программа заносится в файл под именем L_PRN.ASM. Трансляция и компоновка осуществляется инструкциями:

masm L_PRN L_PRN

link L_PRN L_PRN

Текст программы

.model tiny

Data_Port    equ 378h   ; адрес порта данных

State_Port   equ 379h   ; адрес порта состояний

Control_Port equ 37Ah   ; адрес порта управления

progr segment

      assume cs:progr,ds:progr

      org 100h

Start:  Call testp

        int 20h

        outs1 db ' _____ This is a printer Test ____', 10,13,0

testp   proc near

        push ds

        xor ax, ax

        push ax

        mov si, 0

coil:   mov al, cs:outs1[si] ; чтение в AL выводимого байта

        cmp al, 0            ; конец сообщения?

        jz finita            ; переход на конец программы

        call print           ; подпрограмма печати байта

        inc si               ; следующий символ

        jmp coil

finita: pop ax

        pop dx

        ret

testp   endp

print   proc near

        mov dx, Data_Port  ; засылаем в DX адрес порта данных

        out dx, al         ; выводим в порт печатаемый символ

        mov dx, State_Port ; DX - адрес порта состояний

wait1:  in al, dx

        test al,80h

        jz wait1

        mov dx, Control_Port

        mov al, 0Dh

        out dx, al         ; установить strobe =1

        mov al, 0Ch

        out dx, al         ; strobe = 0

        ret

print   endp

progr   ends

end start

2.4. Требования к оформлению задания

Отчет по контрольному заданию должен содержать:

- вариант задания;

- блок-схему программы;

- программу на ассемблере с комментариями;

- дискету с программой для демонстрации ее работы.

2.5. Варианты заданий

Варианты заданий получаются из морфологического графа (рис. 1), содержащего три уровня: алгоритма, программы и данных, каждый из которых имеет несколько вершин (1-4).

Рис. 1. Морфологический граф вариантов заданий

Маршрут в графе, включающий по одной вершине из каждого уровня, образует вариант задания, например 1а-2п-3д. Вершина 4 в каждом уровне введена для проявления творческой самостоятельности студентов.

Уровень алгоритма определяет опрос одного или нескольких битов порта состояния, например, 1а - опрос бита 7 или бита 6, 2а - опрос бита 7 или 5 (в случае отсутствия бумаги вывести сообщение на экран), За - опрос бита 7 или 3 и т.д.

            Уровень программы показывает командную реализацию опроса битов состояния, например, 1П - опрос с использованием команды проверки (TEST), 2П - команды AND, ЗП — команды сравнения (СМР) и т.д.

Уровень данных указывает на источник печатаемых символов, например:

1 д. -  сообщение хранится в программе,

2 д. - вводится с клавиатуры (с отображением на экране или без эхопечати),

3 д. - сообщение в виде текстового файла хранится на жестком диске.

Приведенный текст программы 1 соответствует варианту 1а-1п-1д. Без учета вершины 4 морфологический граф дает 27 вариантов заданий.

Предыдущая

Похожие материалы:
Параллельный интерфейс
Парадокс бережливости (Фролова Т.А.)
Парадокс Леонтьева
Параметрические и непараметрические гипотезы
Парафинировщик изделий (Выпуск №7 ЕТКС)
Парафинировщик керамических и фарфоровых изделий



О сайте   Авторам   Реклама и услуги   Контакты
Copyright © 2007-2021, Консалтер.Ру