Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное_пособие.doc
Скачиваний:
70
Добавлен:
10.11.2019
Размер:
8.13 Mб
Скачать
    1. Система команд

Все команды микроконтроллера сгруппированы в четыре группы:

  • команды передачи данных (таблица 4);

  • команды передачи управления (таблица 5);

  • арифметические и логические команды (таблица 6);

  • команды сдвигов и битовые (таблица 7).

В колонках “Описание” сокращенно приведено описание операции, выполняемой по команде или названии команды. В колонках “Операция” приведено условное обозначение выполняемой операции. В колонках “Циклов” приведены значения времени выполнения команды в машинных циклах (периодах тактовой частоты микроконтроллера). В колонках “Флаги” указаны биты регистра состояния SREG, которые могут изменяться при выполнении операции.

Обозначения в таблицах:

 - символ пересылки;

Символ ( … ) обозначает ячейку памяти, а значение в скобках адрес ячейки или регистр, в котором размещен адрес ее;

Rd – номер регистра приемника 0-31;

Rr – номер регистра источника0-31;

D8 – 8-разрядный операнд 0-255;

q – значение смещения (0 q 63) в командах пересылок;

I/O – адрес регистра ввода-вывода(0 I/O 63);

X,Y,Z – 16-разрядные регистры;

Adr – значение адреса c указанной разрядностью;

rel – значение смещения (-64 rel +63) в командах передачи управления;

s – номер бита в регистре статуса процессора SREG;

b – номер бита в регистре РОН или ввода-вывода.

2.6.1 Команды передачи данных (пересылки)

Команды передачи данных приведены в таблице 4. Из нее видно, что набор этих команд представляет собой сочетание восьми операций с различными методами адресации.

Таблица 4. Команды передачи данных

Мнемоника

Операнды

Описание

Операция

Циклов

MOV

Rd,Rr

Пересылка регистр-регистр

Rd Rr

1

MOVW

Rd,Rr

Пересылка двух регистров

Rd+1:RdRr+1:Rr

1

LDI

Rd,D8

Загрузить операнд D8 в регистр R16≤Rd≤R31

Rd D8

1

LDS

Rd,Adr16

Загрузить регистр из ячейки ОЗУ прямо

Rd (Adr16)

3

LD

Rd,X

Загрузить регистр косвенно

Rd (X)

2

LD

Rd,X+

Загрузить регистр косвенно с постинкрементом

Rd (X), X+1

2

LD

Rd,-X

Загрузить регистр косвенно с преддекрементом

X-1,Rd(X)

2

LD

Rd,Y

Загрузить регистр косвенно

Rd (Y)

2

LD

Rd,Y+

Загрузить регистр косвенно с постинкрементом

Rd (Y), Y+1

2

LD

Rd,-Y

Загрузить регистр косвенно с преддекрементом

Y-1,Rd (Y)

2

LDD

Rd,Y+q

Загрузить регистр косвенно со смещением

Rd (Y+q)

2

LD

Rd,Z

Загрузить регистр косвенно

Rd (Z)

2

LD

Rd,Z+

Загрузит регистр косвенно с постинкрементом

Rd (Z), Z+1

2

LD

Rd,-Z

Загрузить регистр косвенно с преддекрементом

ZZ-1,Rd (Z)

2

LDD

Rd,Z+q

Загрузить регистр косвенно со смещением

Rd (Z+q)

2

STS

Adr16,Rr

Записать из регистра прямо в ОЗУ

(Adr16) Rr

3

ST

X,Rr

Записать из регистра косвенно

(X) Rr

2

ST

X+,Rr

Записать косвенно из регистра с постинкрементом

(X) Rr, X+1

2

ST

-X,Rr

Записать из регистра косвенно с преддекрементом

XX-1,(X) Rr

2

ST

Y,Rr

Записать косвенно

(Y) Rr

2

ST

Y+,Rr

Записать косвенно с постинкрементом

(Y) Rr, Y+1

2

ST

-Y,Rr

Записать косвенно с преддекрементом

Y-1,(Y) Rr

2

ST

Z,Rr

Записать косвенно

(Z) Rr

2

STD

Y+q,Rr

Записать косвенно со смещением

(Y+q) Rr

2

ST

Z+,Rr

Записать косвенно с постинкрементом

(Z) Rr, Z+1

2

ST

-Z,Rr

Записать косвенно с преддекрементом

Z-1,(Z) Rr

2

STD

Z+q,Rr

Записать косвенно со смещением

(Z+q) Rr

2

LPM

Загрузить байт из памяти программ в R0

R0(Z)

3

LPM

Rd,Z

Загрузить байт из памяти программ в регистр РОН

Rd(Z)

3

LPM

Rd,Z+

Загрузить байт из памяти программ с постинкрементом

Rd(Z), Z+1

3

SPM

Записать слово из R1:R0 в программную память

(Z)R1:R0

-

IN

Rd,I/O

Загрузить данные из регистра I/O в регистр РОН

Rd I/O

1

OUT

I/O,Rr

Записать данные из регистра РОН в регистр I/O

I/ORr

1

PUSH

Rr

Сохранить регистр в стеке

(SР)Rr, SP-1

2

POP

Rd

Выгрузить регистр из стека

SP+1, Rd  (SР)

2

Команда MOV копирует содержимое одного регистра общего назна­чения в другой.

Команда LDI загружает содержимое регистра общего назначения непосредственно константой. В этой команде может использоваться один из регистров R16 – R31. Команды LD выполняют загрузку ре­гистра РОН из ячейки ОЗУ, адрес которой в одном из регистров X, Y или Z, а также варианты с постинкрементом и преддекрементом адреса. Команда LDD выполняет эту же операцию при помощи косвенной адресации со смещением q. Адрес ячейки ОЗУ получается добавлением значения смещения к содержимому регистра Y или Z. Значение смещения q может быть в пределах 0 – 63. Команда LDS загружает в регистр общего назначения содержимое прямо адресуемой ячейки памя­ти данных.

Команда ST выполняют обратную операцию относительно команды LD - заносит в косвенно адресуемую ячейку памяти данных содержимое регистра общего назначения, используя также варианты с постинкрементом и преддекрементом адреса. Команда STD выполняет эту же операцию при помощи косвенной адресации со смещением, а команда STS прямо адре­сует ячейку ОЗУ.

Команда IN заносит содержимое регистра ввода-вывода в регистр общего назначения, а команда OUT выполняет обратную операцию.

Команда PUSH сохраняет содержимое регистра РОН в стеке, а команда POP выполняет обратную операцию. При выполнении этих команд изменяется значение указателя стека SP в соответствии с обозначениями в колонке “Операция”.

Команда LPM выполняет чтение из ячейки памяти программ, организованной как 16-битное слово, адрес которой в регистре Z, в регистр R0. Младший бит регистра Z определяет байт слова: 0- младший байт слова, 1- старший. Старшие 15 разрядов команды определяют адрес ячейки программной памяти в формате слова.

Имеются модификации этой команды, в которых может использоваться любой регистр РОН LPM Rd,Z и загрузка с последующим увеличением Z на единицу LPM Rd,Z+ .

По команде SPM слово из регистров R1 и R0 загружается в ячейку FLASH-памяти программ (так называемый режим самопрограммирования).

Команды пересылки данных состояния флагов регистра SREG не изменяют.