Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное_пособие.doc
Скачиваний:
70
Добавлен:
10.11.2019
Размер:
8.13 Mб
Скачать

5 Взаимодействие микроконтроллера с объектом управления

5.1 Формирование временных интервалов (задержек)

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

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

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

Если частота тактового генератора Fтакт равна 16 мГц, то длительность такта составляет:

Ттакт=1/ Fтакт = 1/16*10-6 Гц = 2-4 * 10-6 сек.

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

tsek=N * Tтакт или tsek=N / Fтакт .

Отсюда можно получить значение задержки в тактах N:

N= tsek * F. (1)

5.1.1 Программный способ формирования временных интервалов

Временные интервалы в пределах нескольких тактов организуются с помощью команд NOP. По этой команде не выполняется никакой операции, но время выполнения этой команды составляет 1 такт (период частоты) тактового генератора микроконтроллера.

Для формирования больших временных интервалов используются программные циклы. Временная задержка с использованием программных циклов осуществляется загрузкой соответствующего значения в регистр и цикл, в котором производится вычитание 1 из содержимого регистра и переход на эту же команду, если содержимое регистра не равно нулю. При использовании регистра R16, процедура имеет вид:

LDI R16, X ; Х – число, определяющ. длит.задержки

LOOP: DEC R16 ; R16 -1 и может установиться флаг нуля ; (Z)

BRNE LOOP ; если Z=0 (регистр не пуст), то переход.

;иначе будет выполн. следующая команда

Время выполнения команд:

LDI – 1 такт,

DEC – 1 такт,

BRNE LOOP – 2 такта при переходе и 1 такт в последнем цикле.

Длительность каждого цикла, кроме последнего, составляет 3 такта (один такт команды DEC и два такта команды BRNE). Длительность последнего цикла составляет два такта, так как в нем команда BRNE выполняется за один такт (из памяти уже считана последующая команда).

Получим формулу длительности задержки в тактах:

N = 1+3*(X-1)+1+1, или N = 3X, тактов (2)

Если задержка выполнена в виде подпрограммы, то, учитывая время выполнения команды вызова подпрограммы RCALL (3 такта) и возврата из подпрограммы RET(4 такта), получим формулу для временного интервала в тактах:

N = 3*X+7, тактов. (3)

Из этой формулы может быть определено значение X.

Так как максимальное значение в регистре равно 255, то максимальная задержка составляет 3*255 + 7 = 772 такта.

Пример Рассчитать значение константы задержки Х для формирования временного интервала в тактах N = 402.

Подставляем в формулу: N = 3*X+7. 402=3*Х+7 или 395=3*Х.

Так как 395 не делится в целое число раз на 3, то выбираем ближайшее целое, чтобы получилось деление без остатка.

393 = 3*Х. Отсюда: Х=131.

Так как было произведено уменьшение, то очевидно что время задержки уменьшится на 2 такта. Для получения заданного значения временного интервала необходимо добавить две команды NOP. Подпрограмма задержки (имя которой DELAY) будет иметь вид:

DELAY: LDI R16, 131 ; 131– число, определяющ. длит.задержки

LOOP: DEC R16 ; R16 -1 и может устанавиться флаг нуля Z

BRNE LOOP ; если Z=0 (регистр не пуст), то переход,

;иначе выполн. следующ. команда

NOP

NOP

RET ;Выход из подпрогр. задержки

Для задержек больше 772 тактов используется процедура вложенных циклов. При использовании регистров R16 и R17 подпрограмма имеет вид:

DELAY: LDI R16, Y ;Y –число внешних циклов