Команда DJNZ <байт>, <смещение>
Команда "декремент и переход, если не равно нулю" выполняет вычитание "1" из указанной ячейки и осуществляет ветвление по вычисляемому адресу, если результат не равен нулю. Начальное значение 00Н перейдет в 0FFH. Адрес перехода (ветвления) вычисляется сложением значения смещения (со знаком), указанного в последнем байте команды, с содержимым счетчика команд, увеличенным на длину команды DJNZ. На флаги эта команда не влияет и допускает следующие режимы адресации:
- регистровый
- прямой
Ассемблер: |
DJNZ Rn, <метка> ; где n=0-7 |
Код: |
|
|
Время: |
2 циклa |
Алгоритм: |
(PC) : = (PC)+2,
(Rn) : = (Rn)-1,
если ((Rn)>0 или (Rn)<0), то (PC):=(PC)+<re18> |
Пример: |
;(R2)=08H, (P1)=FFH (11111111B)
LAB4: CPL P1.7
DJNZ R2,LAB4 ;(R2)={07-00}
;Эта последовательность команд переключает Р1.7
;восемь раз и приводит к появлению четырех импульсов
;на выводе БИС, соответствующем биту Р1.7
|
Ассемблер: |
DJNZ <direct>, <метка> |
Код: |
|
|
|
Время: |
2 циклa |
Алгоритм: |
(PC) : = (PC)+3,
(direct) : = (direct)-1,
если ((вшкусе)>0 или (direct)<0), то
(PC) : = (PC)+<re18>
|
Пример: |
;(ОЗУ[40])=01H, (ОЗУ[50])=80H,
;(ОЗУ[60])=25H
DJNZ 40H, LAB1 ;(ОЗУ[40]):=00H
DJNZ 50H, LAB2 ;(ОЗУ[50]):=7FH
DJNZ 60H, LAB3 ;(ОЗУ[60]):=25H
...
LAB1: CLR A
...
LAB2: DEC R1 ;осуществился переход на
;метку LAB2
|
Примечание. Если команда DJNZ используется для изменения выхода порта, значение, используемое как операнд, считывается из "защелки" порта, а не с выводов БИС.
|