Читайте также:
|
|
Задержка большой длительности может быть реализована методом вложенных циклов. Числа Х и Y выбираются из соотношения Т = 2 + 1 + Х(1 + 2Y + 2) + 2, где Т - реализуемый временной интервал в микросекундах. Максимальный временной интервал, реализуемый таким способом, при Х = Y = 255 составляет 130.82 мс, т.е. приблизительно 0.13 с.
В качестве примера рассмотрим подпрограмму, реализующую временную задержку 100 мс:
DELAY: MOV R1, #195;загрузка X
LOOPEX: MOV R2, #254;загрузка
YLOOPIN: DJNZ R2, LOOPIN;декремент R2 и внутренний цикл,
;если (R2)¹0
DJNZ R1, LOOPEX;декремент R1 и внешний цикл,
;если (R1)¹0
MOV R3, #174;точная подстройка
LOOPAD: DJNZ R3, LOOPAD;временной задержки
NOP;задержки
RET
Здесь два вложенных цикла реализуют временную задержку длительностью 5 + 195(3 + 2*254) = 99 650 мкс, а дополнительный цикл LOOPAD и команда NOP реализует задержку 350 мкс и тем самым обеспечивает точную настройку временного интервала.
3. Временная задержка длительностью 1с:
ONESEC: MOV R3,#10; Загрузка в R3 числа вызовов подпрограммы DELAY
LOOP: CALL DELAY; Задержка 100 мс
DJNZ R3,LOOP; и цикл, если R3 не равно 0
4. Передать управление одной из восьми программ ROUT0 - ROUT7 при появлении нулевого уровня на соответствующем входе порта 0. Наивысшим приоритетом обладает вход Р1.0:
ORL P1,#0FFH; Настройка порта 1 на ввод
L: MOV A,P1; Ввод данных из порта 1
CPL A; Инверсия аккумулятора
JZ L; Ожидание появления первого нуля
JB A.0,ROUT0; Переход к ROUT0, если Р1.0=0
JB A.1,ROUT1; …
JB A.2,ROUT2; …
JB A.3,ROUT3; …
JB A.4,ROUT4; …
JB A.5,ROUT5; …
JB A.6,ROUT6; …
JB A.7,ROUT7; Переход к ROUT0, если Р1.7=7
Переход осуществляется группой команд JB. Приоритеты входов порта 1 определяются очередностью проверки.
5. Множественное ветвление программы:
Допустим, что результатом работы некоторой программы является число Х (в пределах от 0 до 15). Необходимо организовать передачу управления 16 различным программам с именами ROUT0 – ROUTF в зависимости от вычисления значения Х:
ORG 0C100H; Задание начального адреса программы
MOV DPTR,#TABLE
ANL A,#0FH; Сброс старшей тетрады А во избежание ошибки перехода
JMP @A+DPTR; Обращение к таблице векторов переходов
;Таблица векторов переходов
TABLE: DB ROUT0; Начальный адрес программы ROUT0
Дата добавления: 2015-07-11; просмотров: 77 | Нарушение авторских прав