ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 06.02.2025

Просмотров: 9081

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Системное программирование

Контрольные вопросы

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 Кафедра Вычислительной Техники и Программирования Московского Государственного Открытого Университета

Табл. 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 сек), иначе возможно «зависание» программы.


12.2. Работа с параллельным портом на низком уровне

Работа с параллельным портом на низком уровне выполняется путем прямого обращения к адаптеру порта и применяется при решении широкого круга задач по обмену информацией с нестандартными устройствами, при разработке драйверов устройств и др. Это позволяет реализовать любой протокол обмена с устройством и использовать линии порта по своему усмотрению.

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

Адреса регистров отсчитываются от базового адреса, стандартные значения которого могут быть равны 3BCh, 378h, 278h. Принтерные порты могут вырабатывать запросы на прерывание LPT1 – IRQ7, INT 0Fh; LPT2 – IRQ5, INT 0Dh.

При начальной загрузке BIOS пытается обнаружить параллельный порт, однако делает не совсем корректным образом. По возможным базовым адресам портов передается тестовый байт. Затем производится чтение по тому же адресу, и если прочитанный байт совпал с записанным, то считается, что по данному адресу найден LPT порт. Информацию о портах LPT1÷LPT3 можно получить, прочитав переменные BIOS (табл. 97).

Табл. 97. Переменные BIOS для LPT портов.

Имя порта

Адрес в BIOS

Тип переменной

Описание

LPT1

0040:0008h

Слово

Базовый адрес порта LPT1.

Если 0, порт LPT1 не найден.

0040:0078h

Байт

Константа, задающая тайм-аут. 

LPT2

0040:000Ah

Слово

-//-

0040:0079h

Байт

-//-

LPT3

0040:000Ch

Слово

-//-

0040:007Ah

Байт

-//-

LPT4

0040:000Eh

Слово

-//-

0040:007Bh

Байт

-//-


Стандартный порт LPT имеет три байтовых регистра, расположенных по соседним адресам, начиная с базового адреса (табл. 98). Тип операции закодирован следующим образом: W – запись, R – чтение, W/R – чтение/запись.

Табл. 98. Регистры стандартного LPT порта.

Адрес

Название

W-R

Base+0

Data Register – регистр данных (DR).

W-R

Base+1

Status register – регистр состояния (SR).

R

Base+2

Control Register – регистр управления (CR).

W-R

Регистр данных. Записанные в регистр данные выводятся на выходные линии интерфейса D0-D7. Результат чтения регистра зависит от схемотехники адаптера, и соответствуют либо записанным ранее данным, либо сигналам на линиях D0-D7. При стандартном включении справедлив первый вариант – читаемые данные равны ранее записанным.

Регистр состояния. Регистр представляет порт ввода, на который заведены сигналы от внешнего устройства. Допускается только чтение. Назначение битов регистра состояния приведены в табл. 99.

Табл. 99. Биты регистра состояния.

Бит

Название

Назначение

7

BUSY

Инверсное отображение состояния линии Busy.

При низком уровне на линии – бит равен «1» (ПУ готово к приему очередного байта).

6

ACK

Отображение состояния линии ACK: «0» – подтверждение приема, "1" – обычное состояние.

5

PE

Отображение состояния линии Paper End:

«0» – норма, «1» – в ПУ нет бумаги.

4

SLCT OUT

Отображение состояния линии Select: «0» – ПУ не выбрано, «1» – ПУ выбрано.

3

Error инв.

Отображение состояния линии Error:

«0» – ошибка ПУ, «1» – обычное состояние.

2

PIRQ

Флаг прерывания по ACK (только PS/2). Обнуляется, если ACK вызвал аппаратное прерывание. «1» – после сброса или после чтения регистра состояния.

1-0

Резерв, установлены в 0.


Регистр управления. Регистр управления представляет порт вывода, допускающий операции чтения и записи. Биты 0,1,3 инвертируются, т.е. «1» в битах регистра управления соответствует «0» на соответствующих линиях порта. Назначение каждого бита регистра управления приведены в табл. 100.

Табл. 100. Биты регистра управления.

Бит

Название

Назначение

7-6

Резерв, установлены в 0.

5

Direction

Бит управления направлением порта PS/2. 

"1" – режим ввода, "0" – режим вывода.

4

AckIntEn

Бит управления генерацией прерывания по ACK.

"1" – разрешить прерывание по спаду ACK.

3

SLCT IN

Управление линией SLCT IN.

"1" – работа принтера разрешена.

2

INIT

Управление линией INIT.

"1" – обычное состояние, "0" – аппаратный сброс ПУ

1

Auto LF

Управление линией Auto LF.

"1" – включить режим "Auto LF", "0" – обычное сост.

0

Strobe

Управление линией Strobe.

"1" – стробирование данных, "0" – обычное сост.

Обычно редко приходится работать с принтером на уровне портов ввода-вывода, т.к. для этого существуют функции BIOS и MS-DOS. Однако приведенная информация может пригодиться для разработки драйвера для подключения к принтерному порту какого-либо нестандартного устройства.