Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metod_MCS11_12.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
805.38 Кб
Скачать

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

  1. Чем отличается таймер от счётчика?

  2. Назовите отличия в режимах работы таймеров-счетчиков.

  3. Как запрограммировать работу таймера-счетчика в качестве таймера или счетчика?

  4. Каким образом в микроконтроллере фиксируется признак переполнения таймера или счетчика?

  5. Чем определяется максимальная частота счета таймера-счетчика?

  6. Назовите возможные способы формирования временных задержек в микроконтроллере.

  7. В каком случае целесообразно использовать таймер в программе временной задержки?

  8. Какой из регистров TMOD или TCON допускает наряду с байтовой битовую адресацию?

Лабораторная работа № 4 Реализация функций времени. Часть 2 Введение

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

Прерывание это специальная функция микроконтроллера, которая позволяет останавливать выполнение текущей задачи и переходить на тот участок программы, для которого поступило прерывание. Система прерываний микроконтроллера предусматривает пять источников прерываний: внешние от входов /INT0(Р3.2) и /INT1(Р3.3), внутренние от флагов переполнения таймеров-счетчиков Т/С0, Т/С1 и от флага TI или RI последовательного порта. Внешние запросы прерываний /INT0, /INT1 могут быть независимо друг от друга запрограммированы на срабатывание либо по переходу из 1 в 0, либо по низкому уровню входного сигнала запроса прерывания с помощью регистра ТСON, приведенного в табл. 1. Например, если бит IT0 = 0, то прерывание по входу /INT0 (P3.2) происходит по низкому уровню. Если IT0 = 1, то прерывание происходит по фронту (переход из 1 в 0). Аналогично вид срабатывания устанавливается по входу /INT1 (P3.3) с помощью бита IT1.

Биты IE0 и IE1 – флаги запроса внешних прерываний по входам /INT0 и /INT1 соответственно. Они устанавливаются аппаратно при поступлении сигнала внешнего прерывания и аппаратно сбрасываются при переходе на соответствующую подпрограмму обработки прерывания.

Биты TF0 и TF1 флаги переполнения таймеров-счетчиков Т/С0 и Т/С1 соответственно.

Таблица 1

Регистр TCON

Бит

7

6

5

4

3

2

1

0

Наименование

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

Объект

управления

Управление Т/С

Управление внешними прерываниями

Биты TR0 и TR1 – биты включения таймеров-счетчиков Т/С0 и Т/С1 соответственно. Когда бит в 1, то соответствующий таймер-счетчик включен, когда в 0 – выключен.

Регистр разрешения прерываний IE (interrupt enable) предназначен для разрешения или запрещения прерываний от соответствующих источников. Назначение разрядов регистра IE показано в приведенной ниже табл. 2.

Таблица 2

Регистр IE

Бит

IE.7

IE.6

IE.5

IE.4

IE.3

IE.2

IE.1

IE.0

Наименование

EA

-

-

ES

ET1

EX1

ET0

EX0

ЕА – бит блокировки всех прерываний. Если EA = 0, то все прерывания запрещены. Если ЕА = 1, то прерывания могут быть разрешены индивидуальными битами разрешения ES, ET1, EX1, ЕТ0, ЕХ0. Бит устанавливается и сбрасывается программой.

ЕS – бит разрешения прерывания от последовательного порта (по признаку TI окончания работы передатчика или по признаку RI окончания работы приемника). Устанавливается или сбрасывается программой.

ET1 – бит разрешения прерывания от таймера-счетчика Т/С1. Устанавливается или сбрасывается программой.

ЕХ1 – бит разрешения внешнего прерывания от входа /INT1 (Р3.3). Устанавливается или сбрасывается программой.

ЕТ0 – бит разрешения прерывания от таймера-счетчика Т/С0. Устанавливается или сбрасывается программой.

ЕХ0 – бит разрешения внешнего прерывания от входа /INT0(Р3.2). Устанавливается или сбрасывается программой.

Все флаги, которые фиксируют запросы на прерывания, могут быть установлены программным способом, что дает возможность осуществить вызов соответствующей подпрограммы обслуживания непосредственно из программы. Этому также способствует дублирование входов /INT0 и /INT1 прерываний управляющими флагами IE0 и IE1.

С каждым источником прерывания связан определенный стартовый адрес (вектор прерывания) подпрограммы обработки прерывания, указанный в табл. 3.

Таблица 3

Векторы прерываний

Источник прерывания

Вектор прерывания

/INT0 (IE0)

0003h

Т/С 0 (TF0)

000Bh

/INT1 (IE1)

0013h

Т/С1 (TF1)

001Bh

Последовательный порт TI или RI

0023h

Например, при поступлении сигнала прерывания от Т/С1, завершается выполнение текущей команды, и выполнение программы переходит к команде с адресом 001Bh, если данное прерывание разрешено в регистре IE.

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

Поскольку стартовые адреса подпрограмм обработки прерываний находятся в области начальных адресов памяти программ, а выполнение программы начинается с нулевого адреса, то, для того чтобы не зайти в подпрограмму обработки прерывания без появления сигнала прерывания, необходимо обойти подпрограмму. Это удобно сделать с помощью команды безусловного перехода на метку, расположенную за подпрограммой обработки прерывания. Например, ajmp metka (абсолютный переход по адресу внутри страницы объемом 2 Кбайт памяти, определяемой 5-ю старшими битами счетчика команд) или sjmp metka (переход на адрес в диапазоне 128 байт).

Для того чтобы подпрограмма обработки прерывания располагалась по строго определенному адресу (см. табл. 3), перед началом подпрограммы необходимо разместить директиву ORG. Эта директива позволяет задать адрес ячейки памяти программ, в которую будет загружаться первый байт команды, следующий за директивой ORG. Например, директива ORG 000bh означает, что в ячейку 000bh запишется следующая за директивой команда.

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

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

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

Таблица 4

Регистр IP

Бит

IP.7

IP.6

IP.5

IP.4

IP.3

IP.2

IP.1

IP.0

Обозначение

X

X

X

PS

PT1

PX1

PT0

PX0

PX0 – установка уровня приоритета прерывания от внешнего источника /INT0.

PT0 – установка уровня приоритета прерывания от Т/С0.

PX1 – установка уровня приоритета прерывания от внешнего источника /INT1.

PT1 – установка уровня приоритета прерывания от Т/С1.

PS – установка уровня приоритета прерывания от последовательного порта.

X – резервный разряд.

Наличие "1" в разряде, устанавливающем приоритет, обеспечивает для соответствующего источника высокий уровень приоритета, "0" – низкий.

Программа обработки прерывания с низким уровнем приоритета может быть прервана запросом прерывания с высоким уровнем приоритета. Если одновременно будут приняты запросы прерывания с одинаковым уровнем приоритета, то их обработка будет производиться в следующем порядке IE0, TF0, IE1, TF1, RI+TI.

Пример записи подпрограммы обработки прерывания:

;Подпрограмма TIME показывает запись подпрограммы прерывания

ajmp m1 ; обход подпрограммы обработки прерывания для ;исключения захода в подпрограмму обработки пре;рывания без её вызова

org 0Bh ; директива задания адреса подпрограммы

; обработки прерывания от T/C0.

....... ; тело подпрограммы

....... ; обработки прерывания.

reti ; команда возврата из подпрограммы обработки

; прерывания.

m1: ; начало основной программы

....... ; тело основной программы

m2: jmp m2 ; конец основной программы

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