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

2341

.pdf
Скачиваний:
2
Добавлен:
15.11.2022
Размер:
1.43 Mб
Скачать

счетного регистра происходило одновременно, предусмотрен специальный 8-разрядный регистр TEMP (программно этот недоступен). Этот же регистр задействуется и при обращении к остальным 16-разрядным регистрам таймера/счетчика Т1: OCR1 (OCR1A и OCR1B) и ICR1. Прерывания на время обращения к любому из этих регистров должны быть программно запрещены.

Для выполнения полного цикла записи в 16-разрядный регистр первым должен быть загружен старший байт (регистр TCNT1Н). Для выполнения полной операции чтения 16разрядного регистра первым должен быть прочитан младший байт (регистр TCNT1L). Установка счетного регистра в ненулевое состояние перед каждым началом отсчета является одним из способов задания временного интервала счета (другой способ описан ниже).

Управление таймером/счетчиком Т1 осуществляется с помощью двух регистров управления TCCR1A и TCCR1B

(рис. 4).

TCCR1A

7

6

5

4

3

2

1

0

 

COM1A1

COM1A0

COM1B1

COM1B0

---

---

PWM11

PWM10

Чтение(R) /

 

 

 

 

 

 

 

 

R/W

R/W

R/W

R/W

R

R

R/W

R/W

Запись (W)

 

 

 

 

 

 

 

TCCR1B

7

6

5

4

3

2

1

0

 

ICNC1

ISES1

---

---

CTC1

CS12

CS11

CS10

Чтение(R) /

 

 

 

 

 

 

 

 

R/W

R/W

R

R

R/W

R/W

R/W

R/W

Запись (W)

Рис. 4. Формат регистров TCCR1A и TCCR1B

Неиспользуемые разряды регистров содержат «0» и доступны только для чтения. Начальное значение (после сброса микроконтроллера) всех разрядов регистра – «0». Значение разрядов этих регистров, необходимых для выполнения лабораторных работ, будет описано далее.

В частности, выбор источника тактового сигнала, а также запуск и остановка таймера/счетчика осуществляются с по-

31

мощью разрядов CS12...CS10 регистра управления таймером TCCR1B. Соответствие между состоянием этих разрядов и режимом работы таймера/счетчика приведено в табл. 4.

Таблица 4 Выбор источника тактового сигнала для таймера/счётчика Т1

CS12

CS11

CS10

Источник тактового сигнала

 

 

 

 

2

1

0

← Номера разрядов TCCR1B

 

 

 

 

0

0

0

Таймер/счетчик остановлен

 

 

 

 

0

0

1

СК (тактовый сигнал микроконтроллера)

 

 

 

 

0

1

0

CK/8

 

 

 

 

0

1

1

СК/64

 

 

 

 

1

0

0

СК/256

 

 

 

 

1

0

1

СК/1024

 

 

 

 

Программное управление этими разрядами с помощью маски будет описано ниже.

В таймере предусмотрен режим контроля совпадения те-

кущего значения отсчета с одним из двух заранее заданных значений. Если состояние таймера/счетчика становится равным числу, находящемуся в одном из регистров совпадения, то в следующем машинном цикле устанавливается соответствующий этому регистру флаг события в регистре TIFR (для регистра OCR1A – флаг ОСЕ1А, для регистра OCR1В – флаг OCF1B) и генерируется запрос на прерывание. Разрешение прерываний осуществляется установкой в «1» соответствующих флагов регистра TIMSK (OCIE1 в младших моделях AVR, либо OCIE1A и OCIE1B в старших моделях для регистров OCR1, OCR1A и OCR1B соответственно). Сигнал совпадения выводится в качестве альтернативной функции на один из выводов МК, обозначаемый ОС1А для регистра OCR1A и ОС1В для OCR1В. Управление характером переключения сигнала ведет-

32

ся разрядами TCCR1A и TCCR1В. Для регистра OCR1А при равенстве данных счетного регистра и регистра сравнения может выполняться сброс таймера/счетчика (Clear Timer on Compare). Задать эту функцию можно, установив в «1» при инициализации Т1 бита TCCR1B.3 – имя бита CTC1. Именно так и следует действовать, если необходимо задавать временной интервал цикла таймера (другой, менее удобный способ описан выше), иначе после сравнения таймер продолжит счет до переполнения и только после этого начнет отсчет снова.

Каждый регистр сравнения физически размещается в двух регистрах ввода-вывода PBВ: OCR1A – OCR1AH: OCR1AL; OCR1B – OCR1BH:OCR1BL.

Реализованный в таймере режим захвата позволяет зафиксировать значение кода в счетном регистре в момент появления внешнего сигнала захвата, сохранив этот код ви двухбайтовом регистре захвата ICR1H:ICR1L. В данной лабораторной работе он не исследуется.

Выполнение таймером своих функций отображается в регистре событий TIFR в значениях соответствующих битов (флагов) – табл. 5.

 

 

Таблица 5

 

 

 

 

Разряд

Название

Описание

 

 

 

Флаг устанавливается в «1» при загрузке

 

5

ICF1

содержимого таймера/счетчика в регистр

 

 

 

ICR1 (событие «захват»)

 

 

 

Флаг устанавливается в «1» при совпадении

 

4

ОСF1A

значения таймера/счетчика Т1 с содержи-

 

мым регистра OCR1A (событие «совпаде-

 

 

 

 

 

 

ние A»)

 

 

 

Флаг устанавливается в «1» при совпадении

 

3

ОСF1B

значения таймера/счетчика Т1 с содержи-

 

мым регистра OCR1B (событие «совпаде-

 

 

 

 

 

 

ние B»)

 

2

TOV1

Флаг устанавливается в «1» при перепол-

 

нении таймера/счетчика Т1

 

 

 

 

 

 

33

 

Следует обратить внимание на способ сброса любого из этих флагов – аппаратно при запуске подпрограммы обработки соответствующего прерывания или программно – записью в него лог. «1» при программном слежении за процессом счета.

Для разрешения какого-либо прерывания от таймера необходимо заранее установить в «1» соответствующий разряд регистра маски TIMSK (табл. 6) и, разумеется, флаг I регистра

SREG (см. табл. 2).

 

 

Таблица 6

 

 

 

 

Раз-

Название

Описание

 

ряд

 

 

 

Флаг разрешения прерывания по событию

 

5

TICIE1

«Input Capture» («захват») таймера/счетчика

 

 

 

Т1

 

4

ОСIЕ1A

Флаг разрешения прерывания по событию

 

«Compare Match A» («совпадение A») Т1

 

3

ОСIЕ1B

Флаг разрешения прерывания по событию

 

«Compare Match B» («совпадение B») Т1

 

2

ТОIЕ1

Флаг разрешения прерывания по переполне-

 

нию таймера-счетчика Т1

 

 

 

 

Для выполнения перечисленных функций каждый таймер использует один или более выводов МК. Как правило, эти выводы – линии портов ввода/вывода общего назначения (указанные в распиновке данной модели МК), а функции, реализуемые этими выводами при работе совместно с таймерами/счетчиками, являются их альтернативными функциями. В этих случаях необхо-

димо предварительно самостоятельно сконфигурировать эти выводы в соответствии с их функциональным назначением (выход или вход с/без подтягивающего резистора).

Указания по составлению алгоритмов

Управление временем задержки

В данной работе таймер/счетчик Т1 будет использоваться только для введения временного интервала перед или после

34

выполнения пересылки данных в порт, т.е. для формирования меток реального времени. Эти метки можно получить двумя способами: путем ожидания очередного переполнения таймера или события совпадения, как описано выше.

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

Способ управления временем задержки зависит от способа получения меток. В случае использования для уменьшения периода отсчета события переполнения счетного регистра следует в начале каждого цикла выставлять TCNT1 в соответствующее начальное значение, например, загружая константу или выражение вида $FFFF-$xxxx, где xxxx – количество тактов до переполнения. При использовании события совпадения нужно однократно, на стадии инициализации таймера, занести нужное значение в регистр OCR1A (OCR1 для простейших МК).

Дополнительно масштаб задержки можно изменять с помощью предделителя тактовой частоты таймера – см. табл. 4.

Режим обслуживания прерываний

Для удобства программирования Algorithm Builder поддерживает специальный вид меток – метки обслуживания прерываний. Для обслуживания прерывания вам необходимо дать метке (вершине) стандартное имя прерывания, не вводя это имя вруч-

ную, а выбрав пункт меню “Элементы\Прерывания\…”.

В случае, кода программа имеет входы в подпрограммы прерывания, исходный вертекс основного алгоритма обязательно должен быть маркирован меткой “Reset”. Это обеспечит загрузку в нулевой адрес безусловного перехода на начало алгоритма. Метку “Reset” следует также устанавливать только через меню “Элементы\Прерывания\…”

35

Пример:

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

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

1.Создать вертекс, т.е. вершину “Reset”, с которой будет начинаться исполнение программы.

2.Определить указатель стека – либо в явной форме, загружая значения в SPH и SPL (первым должен быть загружен именно старший байт), либо настройщиком “SP” (по умолча-

нию это максимальный адрес SRAM выбранной модели, указываемый настройщику в библиотеке).

3.Настроить таймер соответствующим сеттером, задав частоту предделителя, необходимые режимы (сравнение и сброс).

4.Разрешить соответствующим сеттером данное прерывание (для таймеров – это соответствующие биты регистра

TIMSK).

5.Разрешить глобальное прерывание через регистр состояния процессора, задав в алгоритме строку “1 -> I”.

36

6. Ввести подпрограмму обработки прерывания, которая должна начинаться от вершины с именем прерывания (см. выше), а заканчиваться обязательно оператором “RetI”.

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

Порядок выполнения работы

Предварительное задание

1. Изучите сведения о таймерах МК и их регистрах. В случае надобности используйте файлы учебных материалов и лекции, подготовьте ответы на следующие контрольные вопросы:

Объясните механизм создания временной задержки без помощи таймера, известный вам из предыдущей лабораторной работы.

Организация таймеров МК AVR. Их функции и возможности использования.

Конфигурирование таймеров и управление ими.

Регистр состояния (флагов) таймера Т1, значение его битов.

Какие способы можно использовать для получения меток времени от таймера?

Как управлять временем задержки?

Какие способы можно использовать для организации выполнения заданной операции по сигналу таймера?

2.Изучите рабочее задание и подготовьтесь к его выполнению.

37

Рабочее задание

1.Откройте АВ, загрузите ваш проект LR1_2 и сохраните его как LR2_1.

2.Переработайте свой алгоритм, применив таймер Т1 вместо цикла «Пауза», в порядке, излагаемом ниже. При этом для формирования задержки используйте контроль за появлением события «Переполнение счетного регистра» по состоянию флага в регистре событий. Введите в алгоритм сеттер таймера Т1, откройте его окно, настройте на максимальную доступную частоту счета. Добавьте в этап инициализации обнуление регистра событий. В циклическую часть алгоритма добавьте внутренний цикл ожидания появления соответствующего флага события (см. табл. 5), а затем установку этого флага в исходное положение (обратите внимание на необходимое для этого значение флага!). Поставьте на последней строке точку останова.

3.Запустите эмуляцию программы, откройте окна процессора, порта, таймера (прерываний), времени процесса (#0). Проверьте работу алгоритма. Если нет ошибок, запишите в отчет время одного цикла. Перезапишите алгоритм под тем же именем LR2_1.

4.Доработайте алгоритм, пользуясь «Указаниями…», с тем, чтобы задавать численное значение времени задержки от таймера путем начальной загрузки счетного регистра. Величину xxxx выберите так, чтобы длительность задержки существенно отличалась от результата в п.2. Проверьте работу алгоритма, запишите в отчет значение xxxx и время одного цикла. Если нет ошибок, запишите алгоритм под именем LR2_2.

5.Переработайте алгоритм LR2_1, используя не переполнение, а регистр совпадения выхода A. Пользуясь «Указаниями…», перенастройте сеттер Т1. Добавьте в этап инициализации установку регистра совпадений на число xxxx. Не забудьте также заменить в условном переходе имя бита со-

38

бытия. Вывод сигнала совпадения на внешний вывод не программируйте.

6.Проверьте работу алгоритма, запишите в отчет значение xxxx и время одного цикла. Если нет ошибок, запишите алгоритм под именем LR2_3. Определите основной недостаток алгоритмов LR2_1… LR2_3 с точки зрения загрузки процессора.

7.Переработайте алгоритм LR2_3 в порядке, излагаемом ниже, используя механизм прерываний, описанный выше, включая настройку маски, причем с использованием режима совпадений. Поскольку в алгоритме нет других задач, кроме пересылки и задержки, в условном переходе используйте циклическую проверку какого-либо бита, не связанного с таймером (например, бита Т регистра состояния процессора), на одно из его значений. Перед циклом задайте установку этого бита в противоположное значение, а в подпрограмме обслуживания прерывания – установку в состояние, выводящее программу из ожидания. Контрольную точку установите на выходе из прерывания.

8.Проведите контрольный логический анализ алгоритма, опробуйте его работу, устраните ошибки, запишите в отчет значение xxxx и время одного цикла. Оцените принципиальные преимущества механизма прерываний и его недостатки. Если нет ошибок, запишите алгоритм под именем LR2_4.

9.Для того, чтобы в основной программе на время ожидания прерывания могли выполняться другие действия, следует

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

39

10.Замените тип МК, установив ATtiny25. Выполните симуляцию и проверьте, насколько изменилось время задержки. Проанализируйте устройство Т1 данного кристалла, используя окно таймера. Предложите способ получения времени задержки, близкого к полученному ранее. Измените нужные настройки, выполните симуляцию и запишите в отчет время одного цикла. Сохраните алгоритм как LR2_6.

11.Составьте отчет по перечисленным выше пунктам, включая скриншоты алгоритмов и экранов эмуляции. Выделите в пунктах отчета полученные навыки составления алгоритмов и навыки пользования программой, запишите отчет в файл под именем LR2 в той же папке, что и алгоритмы.

12.Покажите результаты преподавателю, ответьте на его вопросы.

Итоговые вопросы

1.Объясните механизм создания временной задержки без помощи таймера, известный вам из предыдущей лабораторной работы, укажите его основной недостаток.

2.Организация таймеров МК AVR. Их функции и возможности использования.

3.Конфигурирование таймеров и управление ими.

4.Регистр состояния (флагов) таймера Т1, значение его

битов.

5.Какие способы можно использовать для получения меток времени от таймера? Дайте сравнительную оценку.

6.Как управлять временем задержки? Сравните оба

способа.

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

8.Изложите кратко содержание каждого проработанного вами алгоритма.

9.Обоснуйте настройку сеттеров таймера и его маски на этапе инициализации при разных способах применения Т1.

10.Перечислите полученные навыки составления алго-

ритмов и навыки пользования средой Algorithm Builder.

40

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