МПС

Программное формирование временных задержек (Лекция)

ПЛАН ЛЕКЦИИ

1. Устройство управления и синхронизации

2. Программное формирование временных задержек

 

1. Устройство управления и синхронизации

Кварцевый резонатор, подключаемый к внешним выводам микроконтроллера, управляет работой внутреннего генератора, который в свою очередь формирует сигналы синхронизации. Устройство управления (CU) на основе сигналов синхронизации формирует машинный цикл фиксированной длительности, равной 12 периодам резонатора.

Т.е. частота выполнения машинных циклов: ,

а время выполнения одного машинного цикла: .

Большинство команд микроконтроллера выполняется за один машинный цикл. Некоторые команды, оперирующие с 2-байтными словами или связанные с обращением к внешней памяти, выполняются за два машинных цикла. Только команды деления и умножения требуют четырех машинных циклов. На основе этих особенностей работы устройства управления производится расчёт времени исполнения прикладных программ.

 

2. Программное формирование временных задержек

Временная задержка малой длительности

При реализации временной задержки длительностью порядка нескольких микросекунд часто используется набор команд NOP, каждая из которых выполняется за 1 машинный цикл. Т.е. для формирования задержки длительностью 4 мкс при частоте кварцевого резонатора 12 МГц программа для МК51 будет выглядеть:

NOP

NOP

NOP

NOP

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

Программа имеет сим­волическое имя DELAY.

Рис. 1. Блок-схема процедуры формирования временной задержки
малой длительности

 

Предположим, что в управляющей программе необходимо реализо­вать временную задержку 100 мкс. Фрагмент программы, реализующей временную задержку, требуется оформить в виде подпрограммы, так как предполагается, что основная управляющая программа будет произ­водить к ней многократные обращения для формирования выходных импульсных сигналов, длительность которых кратна 100 мкс:

...........

 ACALL DELAY ; вызов подпрограммы задержки

 ...........

 

DELAY: MOV R2,#X ; (R2) <— X

COUNT: DJNZ R2,COUNT ; декремент R2 и цикл, если не нуль

RET  ; возврат в основную программу

 

Для получения требуемой временной задержки необходимо опреде­лить число 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 мс:

...........

      ACALL DELAY ;вызов подпрограммы задержки

      ...........

 

DELAY:      MOV   R1,#201     ;загрузка x

LOOPEX:     MOV   R2,#247     ;загрузка y

LOOPIN:     DJNZ  R2,LOOPIN   ;декремент R2 и внутренний цикл

                  ;если (R2) не равно нулю

      DJNZ  R1,LOOPEX   ;декремент Rl и внешний цикл

                  ;если (Rl) не равно нулю

 

      MOV   R3,#48      ;точная подстройка временной

LOOPAD:     DJNZ  R3,LOOPAD   ;задержки

      NOP

     

      RET

 

Здесь два вложенных цикла реализуют временную задержку дли­тельностью 5 + 201(3 + 2 х 247) = 99 902 мкс, а дополнительный цикл LOOPAD реализует задержку 98 мкс и тем самым обеспечивает точную подстройку временного интервала.

 

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

,

где      2 – время выполнения самого внутреннего цикла (в машинных циклах);

            ТМЦ – время выполнения одного машинного цикла;

            X, Y, Z, … - количество выполнений соответствующих вложенных циклов

 

Временная задержка длительностью 1с

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

ONESEC: MOV R3, #10 ; загрузка в R3 числа

LOOP: ACALL DELAY ; задержка 100 мс вызовов

                  ; подпрограммы DELAY

 DJNZ R3, LOOP ; декремент R3 и цикл, если R3

               ; не равно нулю

 

Погрешность подпрограммы составляет 55 мкс. Для очень многих применений это достаточно высокая точность, хотя реализованные на основе этой программы часы астрономического времени за сутки "убегут" примерно на 5 с.