Локальные системы управления. Конопелько Г.К. - 56 стр.

UptoLike

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

56
; ВЕРСИЯ ДЛЯ МК 48
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 x ( 10 + 5 x 236 ) = 99 975 мкс, а дополнительный цикл LOOPAD реализуют
задержку 25 мкс и тем самым обеспечивают точную подстройку временного интервала.
Временная задержка длительностью 1 с. Из рассмотренного примера видно, что
секунда является очень большим интервалом времени по сравнению с частотой
тактирования МК. Такие задержки сложно реализовать методом вложенных циклов, поэтому
их обычно набирают из точно подстроенных задержек меньшей длительности. Например,
задержку в
1 с можно реализовать десятикратным вызовом подпрограммы, реализующей
задержку 100 мс:
ONESEC: MOV R3,#10 ; ЗАГРУЗКА В R3 ЧИСЛА ВЫЗОВОВ
;
ПОДПОГРАММЫ DELAY
LOOP: CALL DELAY ; ЗАДЕРЖКА 100 МС
DJNZ R3,LOOP ; ДЕКРЕМЕНТ R3 И ЦИКЛ, ЕСЛИ R3 НЕ
; РАВНО НУЛЮ
Погрешность подпрограммы составляет 55 мкс. Для очень многих применений это
достаточно высокая точность, хотя реализованные на основе этой программы часы
астрономического времени за сутки "
убегут" примерно на 5 секунд.