Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
228.doc
Скачиваний:
5
Добавлен:
30.04.2022
Размер:
1.41 Mб
Скачать

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

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

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

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

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

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

Для удобства программирования Algorithm Builder поддерживает специальный вид меток – метки обслуживания прерываний. Для обслуживания прерывания вам необходимо дать метке (вершине) стандартное имя прерывания, выбрав пункт меню “Элементы\Прерывания\…”.

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

Пример:

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

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

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

2. Определить указатель стека настройщиком “SP” (обычно это максимальный адрес SRAM).

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

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

5. Разрешить глобальное прерывание оператором “1 -> I”.

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

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

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