Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_2011.doc
Скачиваний:
65
Добавлен:
09.12.2018
Размер:
1.15 Mб
Скачать
            1. Формат приказов ocw

OCW1 – приказ управления регистром масок. Передается в порт 21h

«0» - разрешение прерывания, «1» - запрет прерывания от соответствующего устройства.

OCW2 – управление приоритетом. Посылается в порт 20h

Биты 0, 1, 2 – код nnn уровня запроса прерывания для действий, определенных разрядами 5, 6, 7.

Биты 3, 4 – 0 0 - признак слова OCW2

Биты 5, 6, 7 – выбор режима работы контроллера прерываний:

000 – обычный режим приоритетов с автоматическим сбросом бита в ISR,

001 – сброс бита с максимальным приоритетом в ISR,

011 – сброс бита в ISR для уровня nnn,

100 – установка режима циклической смены приоритета (при автоматическом EOI),

101 - установка режима циклической смены приоритета (при неавтоматическом EOI),

111 – режим циклической смены приоритета, но относительно уровня nnn

OCW3 – общее управление контроллером. Отправляется в порт 20h

Биты 0, 1 – «1 0» прочитать содержимое IRR следующей командой из порта 20h

«1 1» прочитать содержимое ISR следующей командой из порта 20h

Бит 2 – «0» устанавливает режим опроса контроллера о поступивших запросах на прерывание, «1» не устанавливать данный режим

Биты 3, 4 – «0 1» признак слова OCW3

Биты 5, 6 – «1 1» установить режим специального маскирования

Бит 7 – не используется

Пример программирования 2-х контроллеров прерываний

20h: ICW1 0 0 0 1 0 0 0 1 – каскадное включение

21h: ICW2 0 0 0 0 1 0 0 0 – начальный вектор прерываний 08h

21h: ICW3 0 0 0 0 0 1 0 0 – подключение выхода ведомого к входу irq2 ведущего

21h: ICW4 0 0 0 0 0 1 0 1 – контроллер ведущий, 16-разрядный

Порты для ведомого контроллера: A0h и A1h

С помощью команд в порты A0h и A1h производится инициализация 2-го ведомого микроконтроллера.

Зададим маски

21h: OCW1 1 0 1 1 1 0 0 0

A1h: OCW1 1 0 1 1 1 1 0 0

f = 18.2 имп/с

  1. И f спользование таймера в программах на Assembler

Системные часы

Таймер

КП

int8

f = 18.2 имп/с

Схема взаимодействия таймера и контроллера прерываний

Формирование задержки

В оперативной памяти имеется область счетчика времени, где записывается текущее время (0040:006Ch). К ней можно обратиться напрямую по данному адресу, либо через прерывание.

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

Программа постоянно следит за текущим временем и сравнивает его с полученной суммой. Когда значения совпадут, выполнение программы продолжится после тайм-аута.

Для чтения счетчика времени можно использовать функцию 00h прерывания 1Ah, которая возвращает содержимое счетчик времени в регистры dx (младшее слово) и cx (старшее слово).

Пример формирования задержки 5 секунд.

mov ah, 00h ; номер функции – 0

int 1Ah ; содержимое счетчика сохраняем в dx и cx

add dx, 91 ; добавляем время задержки (5*18.2=91)

mov bx,dx ;запоминаем сумму в регистре bx

REP:

int 1Ah ; читаем текущее содержимое счетчика в dx

cmp dx, bx ; сравниваем dx и bx

jne REP ; если не равно, то на REP

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]