- •Системное программирование
- •Контрольные вопросы
- •2. Программная модель микропроцессора 8086
- •2.1. Представление информации
- •2.2. Регистры микропроцессора
- •2.3. Формат машинной команды
- •2.4. Способы задания операндов команды
- •Контрольные вопросы
- •3. Основные понятия языка ассемблера
- •3.1. Предложения
- •3.2. Директивы определения данных
- •3.3. Выражения
- •Контрольные вопросы
- •4. Сегментированная модель памяти
- •4.1. Сегментирование адресов
- •4.2. Директивы сегментации
- •4.3. Общая структура программы
- •4.4. Модели памяти
- •Контрольные вопросы
- •5. Основные группы команд
- •5.1. Соглашению по описанию команд
- •5.2. Команды пересылки данных
- •5.3. Арифметические команды
- •5.4. Логические команды
- •5.5. Команды переходов
- •5.6. Команды организации циклов
- •5.7. Команды обработки строк
- •5.8. Стековые команды
- •5.9. Команды ввода-вывода
- •5.10. Команды прерываний
- •5.11. Команды управления микропроцессором
- •Контрольные вопросы
- •6. Подпрограммы
- •Контрольные вопросы
- •7. Разработка одномодульной программы
- •7.1. Трансляция и компоновка программы
- •7.2. Отладка программы
- •Контрольные вопросы
- •8. Разработка многомодульных программ
- •8.1. Принципы разработки модулей
- •8.2. Расширенное применение директивы сегментации
- •9. Упражнения
- •Контрольные вопросы
- •Программирование микропроцессорных устройств
- •10. Программирование системного таймера
- •10.1. Описание таймера-счетчика 8254
- •10.2. Режимы работы таймера
- •10.3. Структура регистров таймера
- •10.4. Упражнения
- •Контрольные вопросы
- •11. Программирование контроллера прерываний
- •11.1. Механизм обработки прерываний
- •11.2. Типы прерываний
- •11.3. Приоритеты прерываний
- •11.4. Контроллер прерываний 8259
- •11.5. Идентификация прерываний
- •11.6. Прерывания bios и ms-dos
- •11.7. Упражнения
- •Контрольные вопросы
- •12. Программирование параллельного порта
- •12.1. Интерфейс Centronics
- •12.2. Работа с параллельным портом на низком уровне
- •12.3. Стандартные средства работы с параллельным портом
- •12.4. Упражнения
- •Контрольные вопросы
- •13. Программирование последовательного порта
- •13.1. Основы последовательной передачи данных
- •13.2. Последовательный интерфейс rs-232c
- •13.3. Универсальный асинхронный приемо-передатчик 8250
- •13.4. Порты асинхронного адаптера
- •13.5. Стандартные средства программирования последовательного порта
- •13.6. Упражнения
- •Контрольные вопросы
- •Литература
- •141 Кафедра Вычислительной Техники и Программирования Московского Государственного Открытого Университета
Контрольные вопросы
В чем назначение и каковы функции контроллера прерываний?
Какие существуют типы прерываний?
Как обрабатываются программные и аппаратные прерывания?
Приведите примеры прерываний BIOSиMS-DOS.
12. Программирование параллельного порта
12.1. Интерфейс Centronics
Исторически параллельный интерфейс был введен в персональный компьютер для подключения принтера (аббревиатура LPT расшифровывается как Line Printer, т.е. построчный принтер). Однако впоследствии он стал использоваться для подключения других периферийных устройств (ПУ) – сканеров, дисководов типа Zip и ряда других.
Стандарт на параллельный интерфейс IEEE 1284, принятый в 1994 году, регламентирует различные режимы обмена данными, физический и электрический интерфейсы. Следующие режимы обмена данными получили наибольшее распространение:
Compatibility Mode – однонаправленный вывод по протоколу Centronics, который полностью соответствует стандартному порту SPP (Standard Parallel Port).
ЕРР (Enhanced Parallel Port) Mode – двунаправленный обмен данными, при котором управляющие сигналы интерфейса генерируются аппаратно во время цикла обращения к порту (чтения или записи в порт). Режим эффективен при работе с устройствами внешней памяти, адаптерами локальных сетей.
ЕСР (Extended Capability Port) Mode – двунаправленный обмен с возможностью аппаратного сжатия данных по методу RLE (Run Length Encoding), использования FIFO-буферов и режима прямого доступа в память DMA. Управляющие сигналы интерфейса генерируются аппаратно.
Базовая разновидность порта SPP позволяет передавать данные только в одном направлении – от ПК, однако позднее был разработан ряд стандартов двунаправленной передачи данных EPP и ECP. К главным недостаткам LPT порта следует отнести невысокую скорость (100÷150 Кб/сек) и необходимость привлечения ресурсов микропроцессора при передаче данных.
Стандартный LPT порт имеет 8-битную шину данных, 5-битную шину сигналов состояния и 4-х битную шину управляющих сигналов. Порт асимметричен – 12 линий работают на вывод и только 5 на ввод. Понятие интерфейса Centronics относится к набору сигналов, протоколу обмена и разъему, устанавливаемому в принтерах. Назначение сигналов и контакты разъема ПУ, на который они выведены, приведены в табл. 96.
Табл. 96. Сигналы интерфейса Centronics.
Сигнал |
Т |
Конт. |
Напр. |
Назначение |
Strobe |
0 |
1 |
IN |
Строб данных. Передаваемые данные фиксируются по низкому уровню сигнала. |
D0 ... D7 |
1 |
2-9 |
IN |
Линии данных (D0 - младший бит). |
Ack |
0 |
10 |
OUT |
Acknowledge – сигнал подтверждения приема байта (запрос на прием следующего). Может использоваться для формирования прерывания. |
Busy |
1 |
11 |
OUT |
ПУ занято. Прием данных возможен только при низком уровне сигнала. |
PE |
1 |
12 |
OUT |
"1" сигнализирует о конце бумаги. |
Select |
1 |
13 |
OUT |
"1" сигнализирует о включении принтера. |
Auto LF |
0 |
14 |
IN |
Автоматический перевод строки Auto Feed Line. Если "0", то ПУ при получении символа CR (перевод каретки) выполняет функцию LF – перевод строки. |
Error |
0 |
32 |
OUT |
Ошибка ПУ (нет бумаги, нет тонера, внутренняя ошибка). |
Init |
0 |
31 |
IN |
Инициализация (переход к началу строки, сброс всех параметров на значения по умолчанию). |
Slct In |
0 |
0 |
IN |
Выбор принтера. При "1" ПУ не воспринимает сигналы интерфейса. |
GND |
|
|
– |
Общий провод. |
Столбец «T» определяет активный уровень сигнала: «1» – высокий активный уровень, «0» – низкий, столбец «Напр.» – направление передачи по отношению к принтеру: IN – вход, OUT – выход. Сигнал Auto LF практически не применяется, но его неправильное значение может приводить к ошибкам печати.
Обмен данными по интерфейсу Centronics можно описать с помощью временной диаграммы (рис. 46). Для передачи байта данных в ПУ вначале необходимо убедится, что уровень сигнала на линии BUSY равен 0, а уровень сигнала на линии ACK – единице. После этого следует установить код выводимого символа на линиях DATA.
Рис. 46. Временные диаграммы интерфейса Centronics.
Затем не ранее, чем через 0,5 мкс линию STROBE необходимо перевести в состояние логического нуля. При этом выводимый символ запишется во внутренний буфер ПУ. Сигнал STROBE необходимо удерживать в течение как минимум 0,5 мкс. После истечения интервала времени линию STROBE нужно вновь перевести в состояние логической единицы. После этого выходная линия принтера BUSY устанавливается в единицу, сигнализируя о том, что принтер занят обработкой полученного символа и временно не может принимать другие символы.
Когда ПУ полностью обработает выведенный байт данных, линия ACK перейдет в состояние 0. Приблизительно через 5 мкс. после этого линия BUSY также перейдет в состояние 0. Еще через 5 мкс линия ACK примет состояние 1. Теперь ПУ готово принять следующий байт данных.
Если в течение длительного времени (несколько секунд) источник не получает подтверждения ACK, то он принимает решение об ошибке «тайм-аут» устройства. Если после приема байта приемник не готов принимать данные, то он не снимает сигнал Busy. При программной реализации обмена желательно ограничить время ожидания снятия Busy (обычно 30÷45 сек), иначе возможно «зависание» программы.