Д. В. Андреев Программирование микроконтроллеров mcs-51

Вид материалаУчебное пособие
DEC direct
DJNZ direct,addr
INC direct
Подобный материал:
1   2   3   4   5   6   7   8   9   10




CJNE Rn,#data8,addr

1 0 1 1 1 r r r

data8

rel

где n=0-7

где rrrB=000B-111B

Команда "сравнение и переход, если не равно" сравнивает содержимое заданного регистра Rn выбранного банка с байтом данных data8, непосредственно указанным в команде, и выполняет переход по адресу addr, если содержимое Rn не равно data8, в противном случае выполняется следующая команда. Процедура вычисления адреса перехода и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой. Флаг переноса C сбрасывается в "0", если содержимое Rn больше (равно) data8, в противном случае флаг устанавливается в "1". Команда не влияет на (Rn).

Алгоритм

Пример

если data8(Rn), то (PC)(PC)+3+rel и (C)0

если data8(Rn), то (PC)(PC)+3+rel и (C)1

если data8=(Rn), то (PC)(PC)+3 и

(C)0

;(R7)=80H, (C)=0, (PC)=300H, ;MT5 соответствует адресу

;30FH, rel=0CH

CJNE R7,#81H,MT5 ;(C)=1,

;(R7)=80H, (PC)=30FH




CJNE @Ri,#data8,addr

1 0 1 1 0 1 1 i

data8

rel

где i{0,1}




Команда "сравнение и переход, если не равно" сравнивает содержимое ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка, с байтом данных data8, непосредственно указанным в команде, и выполняет переход по адресу addr, если содержимое используемой ячейки не равно data8, в противном случае выполняется следующая команда. Процедура вычисления адреса перехода и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой. Флаг переноса C сбрасывается в "0", если содержимое используемой ячейки больше (равно) data8, в противном случае флаг устанавливается в "1". Команда не влияет на ((Ri)).

Алгоритм

Пример

если data8((Ri)), то (PC)(PC)+3+rel и (C)0

если data8((Ri)), то (PC)(PC)+3+rel и (C)1

если data8=((Ri)), то

(PC)(PC)+3 и (C)0

;(R0)=41H, (C)=1, (PC)=200H,

;в РПД (41H)=57H,

;MT6 соответствует адресу

;22AH, rel=27H

CJNE @R0,#29H,MT6 ;(C)=0,

;(PC)=22AH,

;в РПД (41H)=57H




CLR A

1 1 1 0 0 1 0 0



Команда "сброс аккумулятора" сбрасывает (обнуляет) содержимое аккумулятора A, на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A)0

;(A)=6CH, (C)=0, (AC)=1

CLR A ;(A)=00H, (C)=0, (AC)=1




CLR C

1 1 0 0 0 0 1 1



Команда "сброс флага переноса" сбрасывает (обнуляет) содержимое флага переноса C, на состояние других флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(C)0

;(C)=1

CLR C ;(C)=0




CLR bit

1 1 0 0 0 0 1 0

bit

Команда "сброс бита" сбрасывает (обнуляет) содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных (РПД) или регистров специальных функций, допускающей побитовое обращение. Команда на состояние не используемых флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(bit)0

;(P1)=5EH=01011110B

;в РПД (28H)=31H

CLR P1.3 ;(P1)=56H=01010110B

CLR 40H ;(28H)=30H




CPL A

1 1 1 1 0 1 0 0



Команда "инверсия аккумулятора" инвертирует содержимое каждого бита аккумулятора A, на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A)

;(A)=65H=01100101B

CPL A ;(A)=9AH=10011010B




CPL C

1 0 1 1 0 0 1 1



Команда "инверсия флага переноса" инвертирует содержимое флага переноса C, на состояние других флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(C)

;(C)=1, (AC)=1, (OV)=0

CPL C ;(C)=0, (AC)=1, (OV)=0




CPL bit

1 0 1 1 0 0 1 0

bit

Команда "инверсия бита" инвертирует содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных или регистров специальных функций, допускающей побитовое обращение. Команда на состояние не используемых флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(bit)

;(P1)=39H=00111001B

CPL P1.1

CPL P1.3 ;(P1)=33H=00110011B




DA A

1 1 0 1 0 1 0 0



Команда "десятичная коррекция аккумулятора" упорядочивает 8-битовую величину в аккумуляторе A, полученную в результате выполненной ранее команды сложения двух переменных, представленных в двоично-десятичном формате. Для выполнения сложения может использоваться любая из типов команд ADD или ADDC. Если значение битов 3-0 аккумулятора превышает 9 (xxxx1010B-xxxx1111B) или, если содержимое флага AC установлено в "1", то к содержимому A прибавляется 06H, при этом получается соответствующая двоично-десятичная цифра в младшем полубайте A. Указанное сложение не изменяет содержимое флага AC, но устанавливает в "1" содержимое флага переноса C, если перенос из поля младших четырех бит распространяется через все старшие биты A, в противном случае - не изменяет (C). Далее, если содержимое флага C равно "1", или если значение битов 7-4 аккумулятора превышает 9 (1010xxxxB-1111xxxxB), то это значение увеличивается на 6, создавая соответствующую двоично-десятичную цифру в старшем полубайте A. При этом флаг C устанавливается (не изменяется), если имеется (отсутствует) перенос из бита 7 аккумулятора. Время выполнения команды 1 цикл.

Алгоритм

Пример

если (A[3-0])9 или (AC)=1,

то (A)(A)+6

если (A[7-4])9 или (C)=1,

то (A[7-4])(A[7-4])+6

;(A)=30H, (R3)=99H

ADD A,R3 ;(A)=0C9H,

;(AC)=0, (C)=0

DA A ;(C)=1, (A)=29H, (AC)=0




DEC A

0 0 0 1 0 1 0 0



Команда "декремент" производит вычитание "1" из содержимого аккумулятора A, на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A)(A)-1

;(A)=00H, (C)=1, (AC)=1

DEC A ;(A)=0FFH, (C)=1, (AC)=1




DEC Rn ;где n=0-7

0 0 0 1 1 r r r

где rrrB=000B-111B

Команда "декремент" производит вычитание "1" из содержимого заданного регистра Rn выбранного банка, на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(Rn)(Rn)-1, где n=0-7

;(R1)=35H, (C)=0, (AC)=1

DEC R1 ;(R1)=34H, (C)=0, (AC)=1




DEC direct

0 0 0 1 0 1 0 1

direct

Команда "декремент" производит вычитание "1" из содержимого ячейки, 8-разрядный адрес которой определяется символическим именем direct в области резидентной памяти данных или в среде регистров специальных функций. Команда на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(direct)(direct)-1

;(SCON)=0A0H, (C)=1, (AC)=0

DEC SCON ;(SCON)=9FH,

;(C)=1, (AC)=0




DEC @Ri ;где i{0,1}

0 0 0 1 0 1 1 i



Команда "декремент" производит вычитание "1" из содержимого ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка, на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

((Ri))((Ri))-1, где i{0,1}

;(R1)=7FH, в РПД (7FH)=40H

DEC @R1 ;(R1)=7FH,

;в РПД (7FH)=3FH




DIV AB

1 0 0 0 0 1 0 0



Команда "деление" делит 8-битовую переменную из аккумулятора A на 8-битовую переменную из регистра B. Аккумулятору присваивается целая часть частного (старшие разряды), а регистру B - остаток. Содержимое флага переноса C сбрасывается в "0". Содержимое флага переполнения OV также сбрасывается, а в случае деления на нуль - устанавливается в "1". Содержимое флага AC не изменяется. Команда имеет время выполнения 4 цикла.

Алгоритм

Пример

(A)(A):(B), (B)mod[(A):(B)], (C)0

если (В)0, то (OV)0

если (В)=0, то (OV)1

;(A)=0FBH=251, (B)=12H=18,

;(C)=1, (OV)=1

DIV AB ;(C)=0, (OV)=0,

;(A)=0DH=13, (B)=11H=17




DJNZ Rn,addr ;где n=0-7

1 1 0 1 1 r r r

rel

где rrrB=000-111B

Команда "декремент и переход, если не равно нулю" выполняет вычитание "1" из содержимого заданного регистра Rn выбранного банка и осуществляет переход по адресу addr, если содержимое Rn не равно нулю, в противном случае выполняется следующая команда. Адрес перехода addr определяется при помощи сложения 8-битового числа rel (со знаком), размещенного в последнем байте команды, с содержимым счетчика команд PC после увеличения его на 2. Таким образом, указанный переход возможен в пределах от -128 до +127 относительно начального адреса следующей команды, при этом отрицательное значение rel представляется двоичным числом в дополнительном коде. Команда DJNZ Rn,addr на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(Rn)(Rn)-1, где n=0-7

если (Rn)0, то (PC)(PC)+2+rel

если (Rn)0, то (PC)(PC)+2

;(R3)=0AH, rel=0FEH

MT5: DJNZ R3,MT5 ;команда ;выполнится 10 раз




DJNZ direct,addr

1 1 0 1 0 1 0 1

direct

rel

Команда "декремент и переход, если не равно нулю" выполняет вычитание "1" из содержимого ячейки, 8-разрядный адрес которой определяется символическим именем direct в области резидентной памяти данных или в среде регистров специальных функций, и осуществляет переход по адресу addr, если содержимое используемой ячейки не равно нулю, в противном случае выполняется следующая команда. Адрес перехода addr определяется при помощи сложения 8-битового числа rel (со знаком), размещенного в последнем байте команды, с содержимым счетчика команд PC после увеличения его на 3. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(direct)(direct)-1

если (direct)0, то (PC)(PC)+3+rel

если (direct)0, то (PC)(PC)+3

;(P1)=0AH, rel=0FDH

MT5: DJNZ P1,MT5 ;команда ;выполнится 10 раз




INC A

0 0 0 0 0 1 0 0



Команда "инкремент байта" производит прибавление "1" к содержимому аккумулятора A, на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A)(A)+1

;(A)=0FFH, (C)=1, (AC)=1

INC A ;(A)=00H, (C)=1, (AC)=1




INC Rn ;где n=0-7

0 0 0 0 1 r r r

где rrrB=000B-111B

Команда "инкремент байта" производит прибавление "1" к содержимому заданного регистра Rn выбранного банка, на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(Rn)(Rn)+1, где n=0-7

;(R1)=35H, (C)=0, (AC)=1

INC R1 ;(R1)=36H, (C)=0, (AC)=1




INC direct

0 0 0 0 0 1 0 1

direct

Команда "инкремент байта" производит прибавление "1" к содержимому ячейки, 8-разрядный адрес которой определяется символическим именем direct в области резидентной памяти данных (РПД) или в среде регистров специальных функций. Команда на флаги не влияет и имеет время выполнения 1 цикл.




Алгоритм

Пример




(direct)(direct)+1

;(TMOD)=0A5H, (C)=1, (AC)=0

;в РПД (23H)=0FFH

INC TMOD ;(TMOD)=0A6H,

;(C)=1, (AC)=0

INC 23H ;в РПД (23H)=00H,

;(C)=1, (AC)=0

INC @Ri ;где i{0,1}

0 0 0 0 0 1 1 i