Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

МПУЭВС. Лекции. Задания / СбКонтрРаб_ЗФ

.pdf
Скачиваний:
26
Добавлен:
11.05.2015
Размер:
646.49 Кб
Скачать

В микро-ЭВМ аккумулятор имеет два различных имени в зависимости от способа адресации: А - при неявной адресации (например, MOV A, R0) и АСС - при использовании прямого адреса. Первый способ предпочтительнее, однако, не всегда применим.

10.7 Команды арифметических операций 8051.

В эту группу входят 24 команды, краткое описание которых приведено в таблице. Из нее следует, что микроЭВМ выполняет достаточно широкий набор команд для организации обработки целочисленных данных, включая команды умножения и деления. В таблице также указаны тип команды (Т) в соответствии с таблицей, ее длина в байтах (Б) и время выполнения в машинных циклах (Ц).

Таблица.10.2 - Арифметические операции.

Название команды

Мнемокод

КОП

T

Б

Ц

Операция

Сложение аккумулятора с регистром

ADD A, Rn

00101

1

1

1

(A) <- (A) + (Rn)

(п=0*7)

 

rrr

 

 

 

 

Сложение аккумулятора с

ADD A, ad

0010010

3

2

1

(A) <- (A) + (ad)

прямоадресуемым байтом

 

1

 

 

 

 

Сложение аккумулятора с байтом из РПД

ADD A,

0010011

1

1

1

(A) «_ (A) +

(i = 0,1)

@Ri

i

 

 

 

((Ri))

Сложение аккумулятора с константой

ADD A, #d

0010010

2

2

1

(A) «- (A) + #d

 

 

0

 

 

 

 

Сложение аккумулятора с регистром и

ADDC A,

00111

1

1

1

(A) <- (A) + (Rn)

переносом

Rn

rrr

 

 

 

+ (C)

Сложение аккумулятора с

ADDC A,

0011010

3

2

1

(A) <- (A) + (ad)

прямоадресуемым байтом и переносом

ad

1

 

 

 

+ (C)

Сложение аккумулятора с байтом из РПД

ADDC A,

0011011

1

1

1

(A) <- (A) +

и переносом

@Ri

i

 

 

 

((Ri)) + (C)

Сложение аккумулятора с константой и

ADDC A,

0011010

2

2

1

(A) <- (A) + # d

переносом

#d

0

 

 

 

+ (C)

Десятичная коррекция аккумулятора

DA A •

1101010

1

1

1

Если (Ао з)>9

 

 

0

 

 

 

или

 

 

 

 

 

 

((АС)=1),то(Ао..

 

 

 

 

 

 

з)<-(Ao 3) + 6,

 

 

 

 

 

 

затем если (Ад.

 

 

 

 

 

 

7)>9или((С)=1),

 

 

 

 

 

 

то

 

 

 

 

 

 

(Ад...7) <- (Ад

 

 

 

 

 

 

.7) + 6

Вычитание из аккумулятора регистра и

SUBB A,

10011

1

1

1

(А) <- (А) - (С) -

заёма

Rn

rrr

 

 

 

(Rn)

Вычитание из аккумулятора

SUBB A, ad

1001010

3

2

1

(А) «- (А) - (С) -

прямоадресуемого байта и заема

 

1

 

 

 

((ad))

Вычитание из аккумулятора байта РПД и

SUBB A,

1001011

1

1

1

(А) <-(А) - (С) -

заема

@Ri

i

 

 

 

((Ri))

Вычитание из аккумулятора константы и

SUBB A, d

1001010

2

2

1

(А) <- (А) - (С) -

заема

 

0

 

 

 

#d

Инкремент аккумулятора

INC A

0000010

1

1

1

(А) <- (А) + 1

 

 

0

 

 

 

 

Название команды

Мнемокод

КОП

T

Б

Ц

Операция

Инкремент регистра

INCRn

00001

1

1

1

(Rn)<-(Rn)+ 1

 

 

rrr

 

 

 

 

Инкремент прямоадресуемого байта

INC ad

0000010

3

2

1

(ad)<-(ad) + 1

 

 

1

 

 

 

 

Инкремент байта в РПД

INC@Ri

0000011

1

1

1

((Ri))<-((Ri))+1

 

 

i

 

 

 

 

Инкремент указателя данных

INC DPTR

1010001

1

1

2

(DPTR ) <-

 

 

1

 

 

 

(DPTR) + 1

Декремент аккумулятора

DEC A

0001010

1

1

1

(A)«-(A)-1

 

 

0

 

 

 

 

Декремент регистра

DECRn

00011

1

1

1

(Rn)<-(Rn)-1

 

 

rrr

 

 

 

 

Декремент прямоадресуемого байта

DEC ad

0001010

3

2

1

(ad)<-(ad)-1

 

 

1

 

 

 

 

Декремент байта в РПД

DEC @Ri

0001011

1

1

1

«Ri))<-((Ri))-1

 

 

i

 

 

 

 

Умножение аккумулятора на регистр В

MULAB

1010010

1

1

4

(B)(A) <-

 

 

0

 

 

 

(A)*(B)

Деление аккумулятора на регистр В

DIVAB

1000010

1

1

4

(B).(A) 4-

 

 

0

 

 

 

(A)/(B)

По результату выполнения команд ADD, ADDC, SUBB, MUL и DIV устанавливаются флаги PSW, структура которых приведена в таблице. Ц

Флаг С устанавливается при переносе из разряда D7, т. е. в случае, если результат не помещается в восемь разрядов; флаг АС устанавливается при переносе из разряда D3 в командах сложения и вычитания и служит для реализации десятичной арифметики. Этот признак используется командой DAA.

Флаг OV устанавливается при переносе из разряда D6, т. е. в случае, если результат не помещается в семь разрядов и восьмой не может быть интерпретирован как знаковый. Этот признак служит для организации обработки чисел со знаком.

Флаг Р устанавливается и сбрасывается аппаратно. Если число единичных бит в аккумуляторе нечетно, то Р = 1, в противном случае Р = 0.

10.8 - Команды логических операций микроконтроллера 8051.

В этой группе 25 команд, их краткое описание приведено в таблице. Нетрудно видеть, что эти команды позволяют выполнять операции над байтами: логическое И (Л ), логическое ИЛИ ( V), исключающее ИЛИ ((+)), инверсию (NOT), сброс в нулевое значение и сдвиг. В таблице также указаны тип команды (Т) в соответствии с таблицей, ее длина в байтах (Б) и время выполнения в машинных циклах (Ц).

Таблица10.3 - Логические операции

Название команды

Мнемокод

КОП

T

Б

Ц

Операция

Логическое И аккумулятора и регистра

ANL A, Rn

01011

1

1

1

(A) <- (A) AND

 

 

rrr

 

 

 

(Rn)

Логическое И аккумулятора и

ANL A, ad

0101010

3

2

1

(A) <_ (A) AND

прямоадресуемого байта

 

1

 

 

 

(ad)

Логическое И аккумулятора и байта из

ANL A, @Ri

0101011

1

1

1

(A)<-

РПД

 

i

 

 

 

(A)AND((Ri))

Логическое И аккумулятора и

ANL A, #d

0101010

2

2

1

(A) <- (A) AND

константы

 

0

 

 

 

#d

Логическое И прямоадресуемого байта

ANL ad, A

0101001

3

2

1

(ad) <- (ad)

и аккумулятора

 

0

 

 

 

AND (A)

Логическое И прямоадресуемого байта

ANL ad, #d

0101001

7

3

2

(ad) <- (ad)

и константы

 

1

 

 

 

AND #d

Логическое ИЛИ аккумулятора и

ORLA, Rn

01001

1

1

1

(A) <- (A) OR

регистра

 

rrr

 

 

 

(Rn)

Логическое ИЛИ аккумулятора и

ORLA, ad

0100010

3

2

1

(A) «- (A) OR

прямоадресуемого байта

 

1

 

 

 

(ad)

Логическое ИЛИ аккумулятора и байта

ORLA, @Ri

0100011

1

1

1

(A) «- (A) OR

из РПД

 

i

 

 

 

((Ri))

Логическое ИЛИ аккумулятора и

ORL A, #d

0100010

2

2

1

(A) <- (A) OR

константы

 

0

 

 

 

#d

Логическое ИЛИ прямоадресуемого

ORL ad, A

0100001

3

2

1

(ad) <-(ad) OR

байта и аккумулятора

 

0

 

 

 

(A)

Логическое ИЛИ прямоадресуемого

ORL ad, #d

0100001

7

3

2

(ad) <- (ad) OR

байта и константы

 

1

 

 

 

#d

Исключающее ИЛИ аккумулятора и

XRL A, Rn

01101

1

1

1

(A) <- (A) XOR

регистра

 

rrr

 

 

 

(Rn)

Исключающее ИЛИ аккумулятора и

XRL A, ad

0110010

3

2

1

(A) <- (A) XOR

прямоадресуемого байта

 

1

 

 

 

(ad)

Исключающее ИЛИ аккумулятора и

XRL A, @Ri

0110011

1

1

1

(A) 4-(A) XOR

байта из РПД

 

1

 

 

 

((Ri))

Исключающее ИЛИ аккумулятора и

XRL A, #d

0110010

2

2

1

(A) <- (A) XOR

константы

 

0

 

 

 

#d

Исключающее ИЛИ прямоадресуемого

XRL ad, A

0110001

3

2

1

(ad) <- (ad)

байта и аккумулятора

 

0

 

 

 

XOR (A)

Исключающее ИЛИ прямоадресуемого

XRL ad, #d

0110001

7

3

2

(ad) <- (ad)

байта и константы

 

1

 

 

 

XOR #d

Сброс аккумулятора

CLRA

1110010

1

1

1

(A)<-0

 

 

0

 

 

 

 

Инверсия аккумулятора

CPLA

1111010

1

1

1

(A) <- NOT(A)

 

 

0

 

 

 

 

Сдвиг аккумулятора влево циклический

RLA

0010001

1

1

1

(An+1)<-(An),

 

 

1

 

 

 

n=CH3, (Ao) <-

 

 

 

 

 

 

(A7)

Сдвиг аккумулятора влево через

RLCA

0011001

1

1

1

(An+i)<-

перенос

 

1

 

 

 

(An),n=0+6 (Ao)

 

 

 

 

 

 

<- (С), (С) НАт)

Сдвиг аккумулятора вправо

RRA

0000001

1

1

1

(An)«-

циклический

 

1

 

 

 

(An+i)1n=0+6,

 

 

 

 

 

 

(A7)«- (Ao)

Сдвиг аккумулятора вправо через

RRCA

0001001

1

1

1

(An)<-(An+i),

перенос

 

1

 

 

 

n=0*6 (A7) <-

 

 

 

 

 

 

(С), (С) «-(Ao)

Обмен местами тетрад в аккумуляторе

SWAP A

1100010

1

1

1

(A0...3) <-«■

 

 

0

 

 

 

(A4...7)

10.9 Команды операций над битами микроконтроллера 8051.

Группа состоит из 12 команд, краткое описание которых приведено в таблице. Эти команды позволяют выполнять операции над отдельными битами: сброс, установку, инверсию бита, а также логические И (Л) и ИЛИ (V). В качестве "логического" аккумулятора, участвующего во всех операциях с двумя операндами, выступает признак переноса С (разряд D7 PSW), в качестве операндов могут использоваться 128 бит из резидентной памяти данных и регистры специальных функций, допускающие адресацию отдельных бит.

В таблице также указаны тип команды (Т) в соответствии с таблицей, ее длина в байтах (Б) и время выполнения в машинных циклах (Ц).

Таблица.10.4 - Операции с битами

Название команды

 

Мнемоко

КОП

т

Б

Ц

Операция

 

 

д

 

 

 

 

 

 

Сброс переноса

 

CLRC

 

1100001

1

1

1

(С)<-0

 

 

 

 

1

 

 

 

 

Сброс бита

 

CLR bit

 

1100001

4

2

1

(Ь)«-0

 

 

 

 

0

 

 

 

 

Установка переноса

 

SETBC

 

1101001

1

1

1

(С)<-1

 

 

 

 

1

 

 

 

 

Установка бита

 

SETB bit

1101001

4

2

1

(Ь)<-1

 

 

 

 

0

 

 

 

 

Инверсия переноса

 

CPLC

 

1011001

1

1

1

(С) <- NOT(C)

 

 

 

 

1

 

 

 

 

Инверсия бита

 

CPL bit

 

1011001

4

2

1

(b)<-NOT(b)

 

 

 

 

0

 

 

 

 

Логическое И бита и переноса

 

ANL

C,

1000001

4

2

2

(C)<-(C)AND(b)

 

 

bit

 

0

 

 

 

 

Логическое И инверсии бита

и

ANL

C,

1011000

4

2

2

(С) <-(С) AND

переноса

 

/bit

 

0

 

 

 

(NOT(b))

Логическое ИЛИ бита и переноса

 

ORL

C,

0111001

4

2

2

(С) <-(С) OR (b)

 

 

bit

 

0

 

 

 

 

Логическое ИЛИ инверсии бита и

ORL

C,

1010000

4

2

2

(С) <- (С) OR

переноса

 

/bit

 

0

 

 

 

(NOT(b))

Пересылка бита в перенос

 

MOV

C,

1010001

4

2

1

(C)«-(b)

 

 

bit

 

0

 

 

 

 

Пересылка переноса в бит

 

MOV bit,

1001001

4

2

2

(b)<-(C)

 

 

С

 

0

 

 

 

 

10.10 Команды передачи управления микроконтроллера 8051.

Группа представлена командами безусловного и условного переходов, командами вызова подпрограмм и командами возврата из подпрограмм.

В таблице также указаны тип команды (Т) в соответствии с таблицей, ее длина в байтах (Б) и время выполнения в машинных циклах (Ц).

Таблица.10 - 5- Команды передачи управления

Название команды

 

 

Мнемокод

КОП

T

Б

Ц

Операция

 

Длинный

переход

в

полном

LJMP ad16

00000010

1

3

2

(PC)<-ad16

 

объеме ПП

 

 

 

 

 

2

 

 

 

 

Абсолютный

переход

внутри

AJMPad11

aioa9a80000

6

2

2

(PC) <- (PC) + 2, (РСо-

страницы в 2 Кб

 

 

 

1

 

 

 

ю) <- ad11

 

Короткий

 

относительный

SJMP rel

10000000

5

2

2

(PC) <- (PC) + 2, (PC) <-

переход внутри страницы в 256

 

 

 

 

 

(PC) +rel

 

байт

 

 

 

 

 

 

 

 

 

 

 

Косвенный

относительный

JMP

01110011

1

1

2

(PC) <- (A) + (DPTR)

переход

 

 

 

 

©A+DPTR

 

 

 

 

 

 

Переход,

если

аккумулятор

JZrel

01100000

5

2

2

(PC)<-(PC)+2,

если

равен нулю

 

 

 

 

 

 

 

 

(А)=0, то (PC)«-(PC)+rel

Переход,

если

аккумулятор не

JNZ rel

01110000

5

2

2

(PC)<-(PC)+2,

если

равен нулю

 

 

 

 

 

 

 

 

(А)*0, то (PC)<-(PC)+rel

Переход,

если

перенос

равен

JCrel

01000000

5

2

2

(PC)<-(PC)+2,

если

единице

 

 

 

 

 

 

 

 

 

(С)=1, то (PC)<-(PC)+rel

Переход,

если

перенос

равен

JNC rel

01010000

5

2

2

(PC)<-(PC)+2,

если

нулю

 

 

 

 

 

 

 

 

 

(С)=0, то (PC)<-(PC)+rel

Переход,

если

бит

равен

JB bit, rel

 

00100000

1

3

2

(PC)<-(PC)+3,

если

единице

 

 

 

 

 

 

 

 

1

 

 

(b)=l, то (PC)<-(PC)+rel

Переход, если бит равен нулю

 

JNB bit, rel

00110000

1

3

2

(PC)<-(PC)+3,

если

 

 

 

 

 

 

 

 

 

1

 

 

(b)=0, то (PC)<-(PC)+rel

Переход, если бит установлен, с

JBC bit, rel

00010000

1

3

2

(PC) <- (PC) +

3,

последующим сбросом бита

 

 

 

 

1

 

 

если(Ь)=1, то (b) <- 0 и

 

 

 

 

 

 

 

 

 

 

 

 

(РС)<- (PC) + rel

 

Декремент

регистра и переход,

DJNZ Rn, rel

11011rrr

5

2

2

(PC) <- (PC) + 2, (Rn) <-

если не нуль

 

 

 

 

 

 

 

 

 

 

(Rn) -1, если (Rn) t 0, то

 

 

 

 

 

 

 

 

 

 

 

 

(PC) <- (PC) + rel

 

Декремент

прямоадресуемого

DJNZ ad, rel

11010101

8

3

2

(PC) <-(PC) + 2, (ad)<-

байта и переход, если не нуль

 

 

 

 

 

 

 

(ad)-1, если (ad) t 0, то

 

 

 

 

 

 

 

 

 

 

 

 

(PC) <- (PC) + rel

 

Сравнение

аккумулятора

с

CJNE A, ad,

10110101

8

3

2

(PC) 4- (PC) + З.если

прямоадресуемым

байтом

и

rel

 

 

 

 

 

(A) t (ad), то (PC) <-

переход, еслк не равно

 

 

 

 

 

 

 

 

(PC) + ге1,если (A) <

 

 

 

 

 

 

 

 

 

 

 

 

(ad), то (С) <- 1, иначе

 

 

 

 

 

 

 

 

 

 

 

 

(С) <- 0

 

 

 

Сравнение

аккумулятора

с

CJNE A, #d,

10110100

1

3

2

(PC)

<-

(PC)

+ З.если

константой и переход, если не

rel

 

 

0

 

 

(А) * #d, то (PC) <- (PC)

равно

 

 

 

 

 

 

 

 

 

 

 

+ ге1,если (А) < #d, то

 

 

 

 

 

 

 

 

 

 

 

 

(C)<- 1, иначе (С) <-0

 

Сравнение

 

регистра

с

CJNE

Rn,

10111rrr

1

3

2

(PC) «- (PC) + З.если

константой и

переход,

если не

#d, re

 

 

0

 

 

(Rn) t #d, то (PC) <-

равно

 

 

 

 

 

 

 

 

 

 

 

(PC) + rel,если (Rn) <

 

 

 

 

 

 

 

 

 

 

 

 

#d, то (C)<- 1, иначе (С)

 

 

 

 

 

 

 

 

 

 

 

 

<- 0

 

 

 

 

Сравнение

байта

в

РПД

с

CJNE

 

1011011i

1

3

2

(PC) <- (PC) + З.если

константой и переход, если не

@Ri,#d,re

 

0

 

 

((Ri)) * #d, то (PC) «-

равно

 

 

 

 

 

 

 

 

 

 

 

(PC) + ге1,если ((Ri)) <

 

 

 

 

 

 

 

 

 

 

 

 

#d, то (C)<- 1, иначе (С)

 

 

 

 

 

 

 

 

 

 

 

 

<-0

 

 

 

 

Длинный вызов подпрограммы

 

LCALL adl6

00010010

1

3

2

(PC) <- (PC) + 3, (SP) <-

 

 

 

 

 

 

 

 

 

2

 

 

(SP)

+1, ((SP))

<-

 

 

 

 

 

 

 

 

 

 

 

 

(PC0...7), (SP)<-(SP)+1,

 

 

 

 

 

 

 

 

 

 

 

 

((SP))«-(PCe...i5), (PC)«-

 

 

 

 

 

 

 

 

 

 

 

 

ad16

 

 

 

 

Абсолютный

в

 

вызов

ACALLad11

a10a9a8i000

6

2

2

(PC) 4- (PC) + 2, (SP) <-

подпрограммы

пределах

 

 

1

 

 

 

(SP)

+

1,

((SP))

<-

страницы в 2 Кб

 

 

 

 

 

 

 

 

 

(PC0...7), (SP)«-(SP)+1,

 

 

 

 

 

 

 

 

 

 

 

 

((SP)) <- (PC8...is), (PC0-

 

 

 

 

 

 

 

 

 

 

 

 

10) <- ad11

 

 

Возврат из подпрограммы

 

RET

 

00100010

1

1

2

(PC8...15)«-((SP)),

 

 

 

 

 

 

 

 

 

 

 

 

 

(SP)<-(SP)-1,

(PCo...7)

 

 

 

 

 

 

 

 

 

 

 

 

<- ((SP)), (SP) <- (SP) - 1

Возврат

из

подпрограммы

RETI

 

00110010

1

1

2

(PCe.,.15)

 

<-((SP)),

обработки прерывания

 

 

 

 

 

 

 

 

(SP)«-(SP)-1,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(PC0...7) <- ((SP)), (SP)

 

 

 

 

 

 

 

 

 

 

 

 

<r- (SP) - 1

 

 

Пустая операция

 

 

 

NOP

 

00000000

1

1

1

(PC)<-(PC)+ 1

 

 

Команда безусловного перехода LJMP (L - long - длинный) осуществляет переход по абсолютному 16-битному адресу, указанному в теле команды, т. е. команда обеспечивает переход в любую точку памяти программ.

Действие команды AJMP (А - absolute - абсолютный) аналогично команде LJMP, однако в теле команды указаны лишь 11 младших разрядов адреса. Поэтому переход осуществляется в пределах страницы размером 2 Кбайт, при этом надо иметь в виду, что сначала содержимое счетчика команд увеличивается на 2 и только потом заменяются 11 разрядов адреса.

В отличие от предыдущих команд, в команде SJMP (S - short - короткий) указан не абсолютный, а относительный адрес перехода. Величина смещения rel рассматривается как число со знаком, а, следовательно, переход возможен в пределах128...+127 байт относительно адреса команды, следующей за командой SJMP.

Команда косвенного перехода JMP @A+DPTR позволяет вычислять адрес перехода в процессе выполнения самой программы.

Командами условного перехода можно проверять следующие условия: JZ — аккумулятор содержит нулевое значение;

JNZ — аккумулятор содержит не нулевое значение JC — бит переноса С установлен;

JNC — бит переноса С не установлен;

JB — прямо адресуемый бит равен 1

NB — прямо адресуемый бит равен 0;

JBC — прямо адресуемый бит равен 1 и сбрасывается в нулевое значение при выполнении команды.

Все команды условного перехода рассматриваемых микро-ЭВМ содержат короткий относительный адрес, т. е. переход может осуществляться в пределах—128... +127 байт относительно следующей команды.

Команда DJNZ предназначена для организации программных циклов. Регистр Rn или байт по адресу ad, указанные в теле команды, содержат счетчик повторений цикла, а смещение rel — относительный адрес перехода к началу цикла. При выполнении команды содержимое счетчика уменьшается на 1 и проверяется на 0. Если значение содержимого счетчика не равно 0, то осуществляется переход на начало цикла, в противном случае выполняется следующая команда.

Команда CJNЕ для реализации процедур ожидания внешних событий. В теле команды указаны "координаты" двух байт и относительный адрес перехода rel. В качестве двух байт могут быть использованы, например, значения содержимого аккумулятора и прямо адресуемого байта или косвенно адресуемого байта и константы. При выполнении команды значения указанных двух байт сравниваются и в случае, если они не одинаковы, осуществляется переход. Например, команда WAIT: CJNE A, PO, WAIT

будет выполняться до тех пор, пока значения на линиях порта Р0 не совпадут со значениями содержимого аккумулятора.

Действие команд вызова процедур полностью аналогично действию команд безусловного перехода. Единственное отличие состоит в том, что они сохраняют в стеке адрес возврата.

Команда возврата из подпрограммы RET восстанавливает из стека значение содержимого счетчика команд, а команда возврата из процедуры обработки прерывания RETI, кроме того, разрешает прерывание обслуженного уровня. Команды RET и RETI не различают, какой командой - LCALL или ACALL - была вызвана подпрограмма, так как и в том, и в другом случае в стеке сохраняется полный 16-разрядный адрес возврата.

Большинство Ассемблеров допускают обобщенную мнемонику JMP - для команд безусловного перехода и CALL - для команд вызова подпрограмм. Конкретный тип команды определяется Ассемблером, исходя из "длины" перехода или вызова.