Сборник лабораторных работ: Специализированные вычислительные системы. Часть 2. Никищенков И.А. - 25 стр.

UptoLike

Составители: 

- 25 -
использовать метод вложенных циклов. Так, например, если в подп-
рограмму DELAY перед командой DJNZ вставить дополнительно две
команды NOP, то максимальная задержка составит 15+X(5+5) =
15+10*255 = 2565 мкс (т.е. почти в 2 раза больше).
Для программной реализации временной задержки большой дли-
тельности используется метод вложенных циклов. Числа X и Y выби-
раются из соотношения Т=5+5+X(5+5Y+5)+5, где Т - реализуемый
временной интервал в микросекундах. Максимальный временной ин-
тервал, реализуемый таким способом, при X=Y=255 составляет
327,69 мс, то есть приблизительно 0,3 с.
В качестве примера рассмотрим подпрограмму, реализующую вре-
менную задержку 100 мс:
DELAY: MOV R1,#84 ; загрузка X
LOOPEX: MOV R2,#236 ; загрузка Y
LOOPIN: DJNZ R2,LOOPIN ; декремент R2 и внутренний цикл,
; если (R2) не равно нулю
DJNZ R1,LOOPEX ; декремент R1 и внешний цикл,
; если (R1) не равно нулю
MOV R3,#4 ; точная подстройка
LOOPAD: DJNZ R3,LOOPAD ; временной задержки
RET
Здесь два вложенных цикла реализуют временную задержку дли-
тельностью 15+84(10+5*236) = 99975 мкс, а дополнительный цикл
LOOPAD реализует задержку 25 мкс и тем самым обеспечивает точную
подстройку временного интервала.
Из рассмотренного примера видно, что секунда является очень
большим интервалом времени по сравнению с частотой тактирования
МК. Такие задержки сложно реализовать методом вложенных циклов,
поэтому их обычно набирают из точно подстроенных задержек мень-
шей длительности. Например, задержку в 1 с можно реализовать де-
сятикратным вызовом подпрограммы, реализующей задержку 100 мс.
ONESEC: MOV R3,#10 ; загрузка в R3 числа и вызов
; подпрограммы DELAY
LOOP: CALL DELAY ; задержка 100 мс
DJNZ R3,LOOP; декремент R3 и цикл, если
; R3 не равен нулю
Погрешность подпрограммы составляет 55 мкс. Для очень многих
применений это достаточно высокая точность, хотя реализованные
на основе этой программы часы астрономического времени за сутки