Микроконтроллеры для систем автоматики - часть 7

 

  Главная      Учебники - Производство     

 

поиск по сайту           правообладателям

 

 

 

 

 

 

 

 

 

содержание   ..  5  6  7  8   ..

 

 

Микроконтроллеры для систем автоматики - часть 7

 

 

 

27 

кода  в  память  программ,  можно  использовать  только  в  Boot Program Section  памяти 
программ. 

Время  выполнения  инструкций,  работающих  с  регистрами,  равно  1  такту. 

Инструкции,  обращающиеся  к  ячейкам  памяти  данных,  выполняются  за 2 такта,  а 
обращающиеся к ячейкам памяти программ – за 3 такта. 

Таблица. 3.1.  

Команды пересылки AVR-микроконтроллеров 

Мнемо-

ника 

Операнды 

Описание инструкции 

Выполняемая 

операция 

Флаги  Такты 

mov Rd, 

Rr  Move Between Registers 

Rd <-  Rr 

None 

movw Rd, 

Rr 

Copy Register Word 

Rd+1:Rd <-  Rr+1:Rr None  1 

ldi Rd*, 

K  Load Immediate 

Rd <-  K 

None 

ld Rd, 

X  Load Indirect 

Rd <-  (X) 

None 

ld Rd, 

X+  Load Indirect and Post-Inc.  Rd <-  (X), X <-  X + 1 None  2 

ld Rd, 

X  Load Indirect and Pre-Dec. 

X <- X - 1, Rd <-  (X)  None 

ld Rd, 

Y  Load Indirect 

Rd <-  (Y) 

None 

ld Rd, 

Y+  Load Indirect and Post-Inc. 

Rd <-  (Y), Y <- Y + 1 None  2 

ld Rd, 

Y  Load Indirect and Pre-Dec. 

Y <- Y - 1, Rd <-  (Y)  None 

ldd Rd, 

Y+q Load Indirect with 

Displacement 

Rd <-  (Y + q) 

None 

ld Rd, 

Z  Load Indirect 

Rd <-  (Z) 

None 

ld Rd, 

Z+  Load Indirect and Post-Inc. 

Rd <-  (Z), Z <-  Z+1 None  2 

ld Rd, 

-Z  Load Indirect and Pre-Dec 

Z <-  Z - 1, Rd <-  (Z)  None 

ldd Rd, 

Z+q Load Indirect with 

Displacement 

Rd <-  (Z + q) 

None 

lds Rd, 

Load Direct from SRAM 

Rd <-  (k) 

None 

ST X, 

Rr 

Store Indirect 

(X) <-  Rr 

None 

st X+, 

Rr  Store Indirect and Post-Inc.  (X) <-  Rr, X <-  X + 1 None  2 

st 

- X, Rr 

Store Indirect and Pre-Dec. 

X <-  X - 1, (X) <-  Rr  None 

st Y, 

Rr  Store Indirect 

(Y) <-  Rr 

None 

st Y+, 

Rr  Store Indirect and Post-Inc.  (Y) <-  Rr, Y <-  Y + 1 None  2 

st 

- Y, Rr 

Store Indirect and Pre-Dec.  Y <-  Y - 1, (Y) <-  Rr  None 

std Y+q,Rr  Store Indirect with 

Displacement 

(Y + q) <-  Rr 

None 

st Z, 

Rr  Store Indirect 

(Z) <-  Rr 

None 

st Z+, 

Rr  Store Indirect and Post-Inc.  (Z) <-  Rr, Z <-  Z + 1 None  2 

st -Z, 

Rr  Store Indirect and Pre-Dec 

Z <-  Z - 1, (Z) <-  Rr  None 

std Z+q,Rr  Store Indirect with 

Displacement 

(Z + q) <-  Rr 

None 

sts k, 

Rr 

Store Direct to SRAM 

(k) <-  Rr 

None 

lpm  

Load Program Memory 

R0 <-  (Z) 

None 

lpm Rd, 

Load Program Memory 

Rd <- Z) 

None 

 

28 

Окончание табл. 3.1. 

Мнемо-

ника 

Операнды 

Описание инструкции 

Выполняемая 

операция 

Флаги  Такты 

lpm Rd, 

Z+  Load Program Memory and 

Post-Inc. 

Rd <- Z), Z=Z+1 None 3 

spm  

Store Program Memory 

(Z) <-  R1:R0 None 

in Rd, 

P  In Port  

Rd <-  P 

None 

out P, 

Rr 

  Out Port 

P <-  Rr 

None 

push Rr 

Push Register on Stack 

STACK <-  Rr; SP<-  

SP-1 

None 2 

pop Rd 

Pop Register from Stack 

SP<-  SP+1, Rd <-  

STACK 

None 2 

Арифметические и логические команды 

В  группу  арифметических  команд  входят  команды  выполняющие  сложение, 

вычитание, декремент и инкремент данных, логическое умножение, логическое сложение, 
операцию  ИСКЛЮЧАЮЩЕЕ  ИЛИ,  инверсию  переменной.  Обычно  к  этой  группе  относят 
также инструкции сравнения данных. В микроконтроллере ATmega163 реализованы также 
функции арифметического умножения целых чисел и дробных чисел, без знака и со знаком. 

Все инструкции этой группы, как правило, приводят к изменению состояния флагов 

регистра состояния в соответствии с результатами, выполняемой операции. 

В  микроконтроллерах  с  архитектурой AVR предусмотрено  довольно  много (31) 

инструкций,  выполняющих  арифметические  и  логические  преобразования  данных. 
Инструкции  используют  исключительно  прямую  регистровую  или  непосредственную 
адресацию  данных.  Операнды  хранятся  в  регистрах  общего  назначения,  в  один  из  них 
(регистр-приемник) всегда направляется и результат вычислений. 

В  результате  выполнения  инструкций  изменяются  флаги  регистра SREG (Status 

Register), а флаг переноса С (Carry), кроме того, непосредственно участвует в выполнении 
ряда операций. 

Арифметические  команды  сложения  и  вычитания  выполняют  сложение  и 

вычитание одно- и двухбайтных операндов. Команды adc (add with carry two registers) и sbc 
(subtract with carry two registers) используют при вычислениях флаг переноса С. 

Инструкции  логического  умножения (and) и  логического  сложения (or) , 

ИСКЛЮЧАЮЩЕЕ ИЛИ (eor) преобразуют только однобайтные данные.  

Инструкция дополнения до единицы com (one’s complement), фактически выполняет 

операцию  инверсии,  а  инструкция  дополнения  до  двух neg (two’s complement ) – меняет 
знак числа. 

Инструкции  установки (set) позволяют  установить  как  отдельные,  так  и  все  биты 

выбранного регистра в единичное состояние, а команды очистки (clear) – в нулевое. 

Инструкции  инкремента  регистра inc (increment)  и  декремента  регистра dec 

(decrement) используют прямую адресацию одного выбранного регистра. 

Тест на нуль или минус tst (test for zero or minus) фактически не меняет содержимого 

регистра, но устанавливает соответствующие флаги при равенстве операнда нулю или при 
его отрицательном значении. 

 

29 

Команды  сравнения  (compare)  также  не  меняют  содержимого  регистров,  а 

оценивают  разность  операндов  и  устанавливают  соответствующие  флаги  в  регистре 
состояния. 

Шесть  инструкций  умножения  (multiply)  выполняют  умножение  целых  и  дробных 

операндов  с  учетом  и  без  учета  знака.  16-битный  результат  умножения  всегда 
записывается в регистры общего назначения R0:R1. 

Большинство  арифметических  и  логических  команд  выполняются  за  один  такт. 

Исключение составляют только команды с непосредственной адресацией, работающие с 
двухбайтными словами: adiw (add immediate to word) и sbiw (subtract immediate from word), и 
команды умножения, выполняющиеся за два такта. 

Таблица 3.2.  

Арифметические и логические команды микроконтроллера Atmega163 

Мнемо-

ника 

Операнды 

Описание 

Операция 

Флаги 

Так

т 

add Rd, 

Rr 

Add without Carry two 
Registers 

Rd <-  Rd + Rr 

Z,C,N,V,H  1 

adc Rd, 

Rr 

Add with Carry two Registers 

Rd <-  Rd + Rr + C 

Z,C,N,V,H  1 

adiw Rdl, 

ADD Immediate from Word 

Rdh:Rdl  <- 
Rdh:Rdl+K 

Z,C,N,V,S 2 

sub Rd, 

Rr 

Subtract  without Carry two 
Registers 

Rd <-  Rd – Rr 

Z,C,N,V,H  1 

subi Rd*, 

Subtract Constant from 
Register 

Rd <-  Rd – K 

Z,C,N,V,H  1 

sbc Rd, 

Rr 

Subtract with Carry two 
Registers 

Rd <-  Rd – Rr – C 

Z,C,N,V,H  1 

sbci Rd*, 

Subtract with Carry Constant 
from Register 

Rd <-  Rd – K – C 

Z,C,N,V,H  1 

sbiw Rdl, 

Subtract Immediate from Word  Rdh:Rd <- Rdh:Rdl–

Z,C,N,V,S 2 

and Rd, 

Rr 

Logical AND Registers 

Rd <-  Rd Rr 

Z,N,V 

andi Rd*, 

Logical AND Register and 
Constant 

Rd <-  Rd K 

Z,N,V 

or Rd, 

Rr 

Logical OR Registers 

Rd <-  Rd v Rr 

Z,N,V 

ori Rd*, 

Logical OR Register and 
Constant 

Rd <-  Rd v K 

Z,N,V 

eor Rd, 

Rr 

Exclusive OR Registers 

Rd <-  Rd Rr 

Z,N,V 

com Rd 

One’s Complement 

Rd <-  $FF – Rd 

Z,C,N,V 

neg Rd 

Two’s Complement  

Rd <-  $00 – Rd 

Z,C,N,V,H  1 

sbr Rd*, 

Set Bit(s) in Register 

Rd <-  Rd v K 

Z,N,V 

ser Rd 

Set Register 

Rd <-  $FF 

None 

cbr Rd*, 

Clear Bit(s) in Register 

Rd <-  Rd ($FF – K) 

Z,N,V 

clr Rd 

Clear Register 

Rd <-  $00 

Z,N,V 

inc Rd 

Increment 

Rd <-  Rd + 1 Z,N,V 

dec Rd 

Decrement 

Rd <-  Rd –1 Z,N,V 

 

30 

Окончание табл. 3.2. 

Мнемо-

ника 

Операнды 

Описание 

Операция 

Флаги 

Так

т 

tst Rd 

Test for Zero or Minus 

Rd <-  Rd Rd 

Z,N,V 

cp Rd, 

Rr 

Compare 

Rd – Rr 

Z, 

N,V,C,H 

cpc Rd, 

Rr 

Compare with Carry 

Rd – Rr – C 

Z, 

N,V,C,H 

cpi Rd*, 

Compare Register with 
Immediate 

Rd – K 

Z, 

N,V,C,H 

mul Rd, 

Rr 

Multiply Unsigned 

R1:R0 <- Rd x Rr 

Z,C 

muls Rd, 

Rr 

Multiply Signed 

R1:R0 <- Rd x Rr 

Z,C 

mulsu Rd, 

Rr 

Multiply Signed with Unsigned  R1:R0 <- Rd x Rr 

Z,C 

fmul Rd, 

Rr 

Fractional Multiply Unsigned 

R1:R0<-(Rd x Rr)<<1 Z,C  2 

fmuls Rd, 

Rr 

Fractional Multiply Signed 

R1:R0<-(Rd x Rr)<<1 Z,C  2 

fmulsu Rd, 

Rr 

Fractional Multiply Signed with 
Unsigned 

R1:R0<-(Rd x Rr)<<1 Z,C 2 

Битовые команды  

Битовые  команды  (Bit And Bit-Test Instructions)  позволяют  обращаться 

непосредственно  к  отдельным  битам  регистров  процессорного  ядра  и  выполнять  с 
выбранными битами простейшие операции: пересылки, установки и сброса.  Операндами 
команд  могут  быть  как  биты  регистров  общего  назначения,  так  и  биты  регистров 
ввода/вывода. Битовые команды могут влиять на отдельные флаги регистра признаков. 

Битовые  команды  микроконтроллеров  семейства AVR работают  с  отдельными 

битами  регистров  общего  назначения  и  регистров  ввода/вывода.  Биты  регистров 
ввода/вывода могут быть установлены или сброшены. Биты регистров общего назначения 
могут  быть  сдвинуты  в  соседние  ячейки,  как  влево  (в  сторону  старших  разрядов),  так  и 
вправо  (в  сторону  младших  разрядов).  В  операциях  сдвига,  кроме  разрядов  регистров, 
может участвовать и бит переноса. Специальные команды предусмотрены для установки и 
сброса  отдельных  флагов  регистра  состояния.  Команда swap меняет  местами  тетрады 
(полубайты) регистров общего назначения. 

Таблица 3.3.  

Битовые команды микроконтроллера ATmega163 

Мнемо-

ника 

Операнды 

Описание 

Операция 

Флаги 

Так

т 

sbi P*,b 

Set Bit in I/O Register  I/O(P,b) <- 1 None 

cbi P*,b 

Clear Bit in I/O 
Register 

I/O(P,b) <- 0 

None 

lsl Rd 

Logical Shift Left 

Rd(n+1) <- Rd(n), Rd(0) <- 0  Z,C,N,V 

lsr Rd 

Logical Shift Right 

Rd(n) <- Rd(n+1), Rd(7) <- 0  Z,C,N,V 

rol Rd 

Rotate Left Through 
Carry 

Rd(0) <- C, Rd(n+1) <- 
Rd(n), C <- Rd(7) 

Z,C,N,V 

 

 

 

 

 

 

 

 

содержание   ..  5  6  7  8   ..