|
В начало
Программное формирование временных
задержек (Лекция)
ПЛАН
ЛЕКЦИИ 1. Устройство
управления и синхронизации 2. Программное
формирование временных задержек 1. Устройство управления и синхронизации
Кварцевый резонатор, подключаемый к внешним выводам
микроконтроллера, управляет работой внутреннего генератора, который в свою
очередь формирует сигналы синхронизации. Устройство управления (CU) на
основе сигналов синхронизации формирует машинный цикл фиксированной
длительности, равной 12 периодам резонатора. Т.е. частота выполнения машинных циклов: , а время выполнения одного машинного цикла: . Большинство команд микроконтроллера выполняется за один
машинный цикл. Некоторые команды, оперирующие с 2-байтными словами или
связанные с обращением к внешней памяти, выполняются за два машинных цикла.
Только команды деления и умножения требуют четырех машинных циклов. На основе
этих особенностей работы устройства управления производится расчёт времени исполнения
прикладных программ. 2. Программное формирование временных задержек
Временная
задержка малой длительности
При реализации временной задержки длительностью порядка
нескольких микросекунд часто используется набор команд NOP, каждая из которых выполняется
за 1 машинный цикл. Т.е. для формирования задержки длительностью 4 мкс при
частоте кварцевого резонатора 12 МГц программа для МК51 будет выглядеть: NOP NOP NOP NOP При реализации временной задержки длительностью порядка
десятков или сотен микросекунд использует метод программных циклов. При этом в
некоторый рабочий регистр загружается число, которое затем в каждом проходе
цикла уменьшается на 1. Так продолжается до тех пор, пока содержимое рабочего
регистра не станет равным нулю, что интерпретируется программой как момент
выхода из цикла. Время задержки при этом определяется числом, загруженным в
рабочий регистр, временем выполнения команд, образующих программный цикл.
Схема алгоритма такой программы показана на рисунке 1. Программа имеет символическое имя DELAY. Рис. 1. Блок-схема процедуры
формирования временной задержки Предположим, что в управляющей программе необходимо реализовать
временную задержку 100 мкс. Фрагмент программы, реализующей временную задержку,
требуется оформить в виде подпрограммы, так как предполагается, что основная
управляющая программа будет производить к ней многократные обращения для
формирования выходных импульсных сигналов, длительность которых кратна 100 мкс:
Для получения требуемой временной задержки необходимо определить
число X, загружаемое в рабочий регистр. Определение числа X выполняется на
основе расчета времени выполнения команд, образующих данную подпрограмму. При
этом необходимо учитывать, что команды MOV и RET выполняются однократно, а
число повторений команды DJNZ равно числу X. Кроме того, обращение к
подпрограмме временной задержки осуществляется по команде ACALL
DELAY, время исполнения которой также необходимо учитывать при подсчете временной
задержки. В описании команд МК указывается, за сколько машинных циклов (МЦ)
исполняется каждая команда. На основании этих данных определяется суммарное
число машинных циклов в подпрограмме: АCALL - 2 МЦ, MOV - 1 МЦ, DJNZ - 2 МЦ,
RET - 2 МЦ. При тактовой частоте 12 МГц каждый машинный цикл выполняется
за 1 мкс. Таким образом, подпрограмма выполняется за время 2 + 1 + 2Х + 2=5 +
2Х мкс. Для реализации временной задержки 100 мкс число Х= (100-5)/2= 47,5. Если число X получается дробным, то временную задержку можно
реализовать лишь приблизительно. Для более точной подстройки в подпрограмму
могут быть включены команды NOP, время выполнения каждой из
которых равно 1 мкс. Минимальная временная задержка, реализуемая подпрограммой DELAY,
составляет 7 мкс (X = 1). Временную задержку меньшей длительности
программным путем можно реализовать, включая в программу цепочки команд NOP. Максимальная длительность задержки, реализуемая подпрограммой
DELAY, составляет 515 мкс (X = 255) . Для реализации задержки большей длительности можно рекомендовать
увеличить тело цикла включением дополнительных команд или использовать метод
вложенных циклов. Так, например, если в подпрограмму DELAY перед командой DJNZ
вставить дополнительно две команды NOP, то максимальная задержка
составит 5 + Х(2 + 2) = = 5 + 4x255 = 1025 мкс (т.е. почти в 2 раза больше). Временная задержка большой длительности
Схема алгоритма программной реализации временной задержки
большой длительности методом вложенных циклов показана на рисунке 2. Там же
обозначено, сколько раз выполняется каждый фрагмент программы. Рис. 2. Блок-схема процедуры
формирования временной задержки Числа X и Y выбираются из соотношения Т = 2 +1 + X(1 + 2Y +
2) +2, где Т - реализуемый временной интервал в микросекундах. Максимальный
временной интервал, реализуемый таким способом, при X = Y = 255 составляет 130
мс. В качестве примера рассмотрим подпрограмму, реализующую
временную задержку 100 мс:
Здесь два вложенных цикла реализуют временную задержку длительностью
5 + 201(3 + 2 х 247) = 99 902 мкс, а дополнительный цикл LOOPAD реализует задержку
98 мкс и тем самым обеспечивает точную подстройку временного интервала. Для реализации временных задержек большей длительности
необходимо использовать тройные и т.д. вложенные циклы. При этом при отсутствии
необходимости в точной задержке, т.е. если погрешность в несколько процентов
является приемлемой, удобно считать время задержки по приближенной формуле: , где 2 – время
выполнения самого внутреннего цикла (в машинных циклах); ТМЦ – время выполнения одного
машинного цикла; X, Y, Z, … - количество выполнений соответствующих вложенных циклов Временная задержка длительностью 1с
Из рассмотренного примера видно, что секунда является очень
большим интервалом времени по сравнению с частотой тактирования МК. Такие
задержки сложно реализовать методом вложенных циклов, поэтому их обычно
набирают из точно настроенных задержек меньшей длительности. Например, задержку
в 1 с можно реализовать десятикратным вызовом подпрограммы, реализующей
задержку 100 мс:
Погрешность подпрограммы составляет 55 мкс. Для очень многих
применений это достаточно высокая точность, хотя реализованные на основе этой
программы часы астрономического времени за сутки "убегут" примерно на
5 с. |
||||