Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
11
Добавлен:
01.05.2014
Размер:
81.41 Кб
Скачать

1.4. Некоторые особенности обслуживания прерываний

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

В микроконтроллерах семейства 8051 для программ обслуживания зафиксированы постоянные начальные адреса (см. далее таблицу). Если в системе возможно обслуживание нескольких прерываний, то программы обслуживания должны "обходить" участки программной памяти, зафиксированные как начальные участки программ обслуживания других прерываний (используется команда JMP). Всякая программа обслуживания прерываний должна оканчиваться командой RETI (возврат из прерываний) Это команда не только восстанавливает из стека состояние счетчика команд, соответствующее моменту начала обслуживания прерываний (как и команда возврата из подпрограмм RET), но и разрешает прерывания равного и низших приоритетов.

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

Допускаются вложенные прерывания - то есть программа обслуживания запроса может быть прервана для обслуживания другого запроса, имеющего более высокий приоритет.

Микроконтроллеры семейства 8051 имеют весьма гибкую систему управления дисциплиной обслуживания запросов. Дисциплина определяется состоянием двух регистров управления запросами - регистр масок прерываний IE и регистр приоритетов прерываний IP.

Старший разряд регистра масок ( логическое имя EA либо IE.7) блокирует любые прерывания. Прочие биты осуществляют индивидуальную блокировку и разрешения прерываний от различных источников ( 1 соответствует разрешению 0 - запрету прерываний).

Если регистр приоритетов IP обнулен, до для запросов установлен следующий порядок приоритетов :

Iro (высший) - to - ir1 - t1- s int ( низший).

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

Логические имена битов управления и их локализация в соответствующих регистрах, а также векторы прерываний для источников запросов сведены в таблицу:

Источник запроса

бит блокировки

бит приоритета

начальный адрес

программы обслуживания

последовательный порт

Таймер1

Вход INT1

Таймер 0

Вход INT0

ES ( IE.4)

EТ1 ( IE.3)

EX1 ( IE.2)

EТ0 ( IE.1)

EX0 (IE.0)

PS (IP.4)

PТ1 (IP.3)

PX1 (IP.2)

РТ0 (IP.1)

PX0 (IP.0)

23h

1Вh

13h

0Bh

03h

2. Индивидуальные задания

Следует подготовит программу, которая содержит главную программ и 2-3 подпрограмм по обслуживанию запросов в соответствии с одним из вариантов, приведенных в таблице 2 по заданию преподавателя.

В таблице приведены требования к содержанию и способу вызова подпрограмм.

Используется ТС, номер которого указан в колонке “активный счетчик” который настраивается так, чтобы программа, с ним связанная запускалась периодически каждые 20-30 циклов - используется режим прерываний с наивысшим приоритетом . Кроме того в колонке "Таймер" задан режим работы ТС (в подколонке "режим") и алгоритм программ вызываемой по запросами таймера, причем

"-" - соответствующий запрос не используется;

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

Реализовать это можно следующим образом. В блоке начальной подготовки программы к запуску кроме установки режима таймера и записи на счетчик длительности импульса следует установить P3.0 в единицу. Программа, связанная с прерыванием от таймера инвертирует Р3.0 и в зависимости от значения Р3.0 передает на счетчик код длительности импульса или паузы

z2- сформировать на порте Р3 пилообразно с постоянной частотой изменяющийся код. То есть в начале главной программы на Р3 должен быть должен быть записан нулевой код, а в одном из регистров хранится максимальный. При каждом вызове код на Р3 увеличивается на единицу, а если достигает заданного максимального значения, устанавливается равным нулю. Следует обеспечить постоянство частоты вызова подпрограммы облуживания.

z3- то же что в варианте z2, c тем, что все данные сохраняются в памяти.

В колонках "Готовность приемника" и "готовность передатчика", ПГ - определяет способ проверки готовности и задает порядок вызова программы обслуживания соответствующего блока последовательного порта, а "ОП" - операции, которые надо выполнить по готовности данных. При этом обозначено:

ПГ=1 - вызов программы обработки по прерываниям.

ПГ=2 - использование программной петли ожидания готовности;

ПГ=3 - периодическая проверка состояния готовности

"-" - соответствующий запрос не используется;

Если ПГ=1, головная программа после необходимых операций по настройке таймера, порта и регистров управления прерываний входит в бесконечно повторяющийся цикл, моделирующий некоторую фоновую задачу (исполняемую при отсутствии каких либо запросов). Это может быть просто последовательность из 5-7 пустых команд (NOP), завершающаяся командой безусловного перехода на начало этой последовательности.

Если ПГ=2 , головная программа после необходимых операций по настройке таймера, порта и регистров управления прерываний входит в бесконечно повторяющийся цикл, в начале которого следует разместить программную петлю ожидания готовности данных на последовательном порте. Фактически такая петля реализуется одной командой - условный переход по состоянию соответствующего бита регистра состояния последовательного порта. Кроме этой команды циклический фрагмент программы содержит блок обслуживания обмена и обработки данных в соответствии со значением 0П.

Если ПГ=3, то внутри цикла главной программы, подобной вышеописанным следует разместить фрагмент, обеспечивающий проверку состояния порта и вызов подпрограммы обслуживания в случае готовности данных.

В колонках ОП обозначено:

i1- прочитать байт с последовательного порта, подсчитать, сколько в нем единиц и результат выдать на P3.

i2- прочитать байт с последовательного порта, определить позицию младшей единицы а результат выдать на P3.

i3- прочитать байт с последовательного порта, инвертировать все нечетные ,биты а результат выдать на P3.

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

o2-Прочесть байт с параллельного порта ( например, Р3) , логически домножить его на маску - константу, результат выдать на последовательный порт

o3- Передавать на последовательный порт содержимое младшего байта используемого таймера-счетчика.

i4,o4 - Байт, прочитанный с последовательного порта должен быть логически умножен на маску ( константу). Результат должен выдаваться на выход через последовательный порт. И для ввода и для вывода необходимо проверять готовность порта используя способ проверки готовности, определенный в колонке ПГ

Taблица заданий

No

Таймер

приемник

передатчик

Активный

счетчик

Режим

Алгоритм, исполняемый при готов-

ности(ОП)

Способ проверки

Готовно-

Сти (ПГ)

Алгоритм, исполняемый при готов-

ности( (ОП)

Способ проверки

Готовно-

Сти (ПГ)

Алгоритм, исполняемый при готов-

ности( (ОП)

0

0

Z1

-

-

2

O1

0

1

Z2

-

-

3

O2

0

2

Z3

-

-

1

O3

1

1

Z1

1

I1

-

-

1

2

Z2

2

I2

-

-

1

0

Z3

3

I3

-

-

-

-

-

1

I4

3

O4

-

-

-

2

I4

2

O4

-

-

-

3

I4

1

O4

Соседние файлы в папке Method