Добавил:
Negorov1337@gmail.com inst:vech.no_17 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

kniga_mikroprotsessory

.pdf
Скачиваний:
21
Добавлен:
02.10.2020
Размер:
1.06 Mб
Скачать

 

 

Алгоритм

Пример

 

 

 

 

 

(A)

 

 

 

;(A)=65H=01100101B

(A)

 

 

 

 

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

 

 

 

CPL C

 

 

 

1 0 1 1 0 0 1 1

 

 

 

 

 

Команда "инверсия флага переноса" инвертирует содержимое флага переноса

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

 

 

Алгоритм

 

 

Пример

 

 

 

 

 

 

 

 

 

 

(C)

 

 

 

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

 

 

(C)

 

 

 

 

 

 

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

(bit)

 

 

 

 

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", то к

72

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

создавая соответствующую двоично-десятичную цифру в старшем полубайте

A. При этом флаг C устанавливается (не изменяется), если имеется

(отсутствует) перенос из бита 7 аккумулятора. Время выполнения команды 1

цикл.

Алгоритм

Пример

 

 

 

 

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

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

 

то (A) (A)+6

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

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

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

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

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

цикл.

73

Алгоритм

 

 

Пример

 

 

 

 

 

 

 

 

 

(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

 

 

 

 

 

 

 

 

 

 

0 0 0 1 0 1 1 i

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

 

 

 

Команда "декремент" производит вычитание "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 - остаток. Содержимое флага

74

Пример
;(R1)=35H, (C)=0, (AC)=1
INC R1 ;(R1)=36H, (C)=0, (AC)=1

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

Алгоритм

Пример

 

 

 

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

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

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

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

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

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

 

 

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

 

 

 

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

INC direct

0 0 0 0 0 1 0 1

direct

 

 

 

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

в области резидентной памяти данных (РПД) или в среде регистров

75

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

специальных функций. Команда на флаги не влияет и имеет время выполнения

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Алгоритм

Пример

 

 

 

 

 

 

;(R0)=44H, в РПД (44H)=55H

((Ri))

((Ri))+1, где i {0,1}

 

 

 

 

INC @R0 ;(R0)=44H,

 

 

 

;в РПД (44H)=56H

 

 

 

INC DPTR

 

 

 

1 0 1 0 0 0 1 1

 

 

 

 

Команда "инкремент двух байтов" производит прибавление "1" к содержимому

16-битового указателя данных DPTR, причем переполнение младшего байта

DPTR (DPL) приводит к увеличению на "1" содержимого старшего байта DPTR (DPH). Команда на флаги не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

 

 

(DPTR) (DPTR)+1

;(DPH)=12H, (DPL)=0FFH,

 

INC DPTR ;(DPH)=13H, ;(DPL)=00H

 

 

76

Пример
;(A)=50H=80, (B)=0A0H=160, ;(C)=1, (OV)=0
MUL AB ;(C)=0, (OV)=1, ;(A)=00H, (B)=32H
0 0 0 0 0 0 0 0

MUL AB

1 0 1 0 0 1 0 0

 

 

Команда "умножение" умножает 8-битовую переменную из аккумулятора A на

8-битовую переменную из регистра B, при этом старший и младший байты произведения загружаются соответственно в B и A. Содержимое флага переноса C сбрасывается в "0". Содержимое флага переполнения OV

устанавливается в "1" если результат умножения больше 0FFH, в противном случае - также сбрасывается. Содержимое флага AC не изменяется. Команда имеет время выполнения 4 цикла.

Алгоритм

(A) (B)=data16

(A) data16[7-0], (B) data16[15-8]

(C) 0

если data16 0FFH, то (OV) 0

если data16 0FFH, то (OV) 1

NOP

Команда "нет операции" увеличивает содержимое программного счетчика PC

на единицу, при этом состояние всех остальных программно доступных элементов микроконтроллера не изменяется. Команда имеет время выполнения

1 цикл.

Алгоритм

 

 

Пример

 

 

 

 

(PC) (PC)+1

 

;(PC)=1FFH

 

 

 

NOP

 

 

 

NOP ;(PC)=201H

 

 

 

 

ORL A,Rn ;где n=0-7

 

где rrrB=000B-111B.

0 1 0 0 1 r r r

 

 

 

 

Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию содержимого аккумулятора A с содержимым заданного регистра Rn выбранного банка,

77

0 1 0 0 0 1 1 i

помещая результат в A. Содержимое используемого регистра не изменяется.

Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

 

 

(A) (A) (Rn), где n=0-7

;(A)=0FH, (R4)=0F3H

 

ORL A,R4 ;(A)=0FFH,

 

;(R4)=0F3H

 

 

ORL A,@Ri ;где i {0,1}

Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (РПД),

адресуемой содержимым заданного регистра Ri выбранного банка. Результат размещается в A. Содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

 

 

Алгоритм

 

 

Пример

 

 

 

 

 

 

 

 

 

 

 

 

 

 

;(A)=22H, (R0)=55H,

 

 

(A)

(A)

((Ri)), где i {0,1}

 

 

 

 

 

 

 

 

 

;в РПД (55H)=11H

 

 

 

 

 

 

ORL A,@R0 ;(A)=33H, (R0)=55H, ;в

 

 

 

 

РПД (55H)=11H

 

 

 

 

 

 

 

 

ORL A,direct

 

 

 

 

0 1 0 0 0 1 0 1

 

direct

 

 

 

 

 

 

 

 

Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого)

определяется символическим именем direct. Результат помещается в A.

Содержимое используемой ячейки или используемого регистра не изменяется.

Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

 

 

(A) (A) (direct)

;(A)=23H, (PSW)=14H

 

ORL A,PSW ;(A)=37H,

 

 

78

;(PSW)=14H

ORL A,#data8

0 1 0 0 0 1 0 0

data8

 

 

 

Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию содержимого аккумулятора A с байтом данных data8, непосредственно указанным в команде.

Результат размещается в A. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

 

 

Пример

 

 

 

 

 

(A) (A) data8

 

;(A)=36H

 

 

 

 

ORL A,#41H ;(A)=77H

 

 

 

 

 

ORL direct,A

 

 

 

0 1 0 0 0 0 1 0

direct

 

 

 

 

 

Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого)

определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр.

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

Алгоритм

 

 

 

Пример

 

 

 

 

 

 

(direct) (A) (direct)

 

;(A)=55H, (P2)=0AAH

 

 

 

ORL P2,A ;(A)=55H,

 

 

 

;(P2)=0FFH

 

 

 

 

 

 

 

 

ORL direct,#data8

 

 

 

 

0 1 0 0 0 0 1 1

 

direct

data8

 

 

 

 

 

 

Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию байта данных data8, непосредственно указанного в команде, с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-

разрядный адрес которой (которого) определяется символическим именем

79

direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

 

 

 

Пример

 

 

 

 

 

 

 

(direct) (direct) data8

 

;(P1)=0FFH

 

 

 

 

 

ORL P1,#73H ;(P1)=0FFH

 

 

 

 

 

 

 

ORL C,bit

 

 

 

 

 

 

0 1 1 1 0 0 1 0

 

bit

 

 

 

 

 

 

 

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

или регистров специальных функций, допускающей побитовое обращение.

Результат помещается в С. Содержимое используемого бита не изменяется.

Команда на состояние других флагов не влияет и имеет время выполнения 2

цикла.

 

Алгоритм

 

 

Пример

 

 

 

 

 

 

 

 

 

 

 

 

;(C)=0, (P1[2])=1,

 

 

(C)

(C) (bit)

 

 

 

 

 

 

 

 

;в РПД (2EH)=12H

 

 

 

 

 

ORL C,P1.2 ;(C)=1, (P1[2])=1

 

 

 

ORL C,70H ;(C)=1,

 

 

 

 

 

;в РПД (2EH)=12H

 

 

 

 

 

 

 

 

 

 

ORL C,/bit

 

 

 

 

 

1 0 1 0 0 0 0 0

 

bit

 

 

 

 

 

 

 

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

80

 

 

Алгоритм

Пример

 

 

 

 

 

(C) (C)

 

 

 

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

(bit)

 

 

 

 

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

 

 

 

RL A

 

 

 

0 0 1 0 0 0 1 1

 

 

 

 

 

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

Алгоритм

Пример

 

 

 

 

;(A)=85H, (C)=0

(A[M+1]) (A[M]), где M=0-6

 

(A[0]) (A[7])

RL A

 

 

RL A ;(A)=16H, (C)=0

 

 

 

RLC A

 

 

 

0 0 1 1 0 0 1 1

 

 

 

Команда "сдвиг аккумулятора влево через флаг переноса" сдвигает содержимое аккумулятора A на один бит влево, причем содержимое бита 7 аккумулятора пересылается во флаг переноса C, а содержимое C - в бит 0 аккумулятора.

Команда на состояние других флагов не влияет и имеет время выполнения 1

цикл.

Алгоритм

Пример

 

 

(A[M+1]) (A[M]), где M=0-6

;(A)=85H, (C)=0

(A[0]) (С), (С) (A[7])

RLC A ;(A)=0AH, (C)=1

 

 

RR A

0 0 0 0 0 0 1 1

 

 

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

81

Соседние файлы в предмете Информатика