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

 

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

 

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

 

 

 

 

 

 

 

 

 

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

 

 

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

 

 

 

23 

Косвенная адресация 

Косвенным  образом  могут  адресоваться  ячейки  памяти  данных  или  памяти 

программ.  

О

О

п

п

е

е

р

р

а

а

ц

ц

и

и

и

и

 

 

с

с

 

 

п

п

а

а

м

м

я

я

т

т

ь

ь

ю

ю

 

 

д

д

а

а

н

н

н

н

ы

ы

х

х

 

 

Операнд содержится в ячейке памяти данных. Адрес операнда находится в одном 

из регистров косвенной адресации X, Y или Z.  

Например,  

ld 

Rd, X 

load indirect 

Rd <-  (X) 

ld Rd, 

load indirect 

Rd <-  (Y) 

ld Rd, 

load indirect 

Rd <-  (Z) 

В 16-битном формате команды адрес ячейки памяти не фигурирует (рис. 3.14). 

 

 

 

 

 

Data Memory (SRAM) 

 

Регистр X, Y или Z 

 

$0000 

 

 

15               

  

0  $0001 

 

 k 

 

$0002 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

   

 

 

$k   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

   

 

 

$045F  

Рис.3.14. Косвенная адресация памяти данных 

А

А

д

д

р

р

е

е

с

с

а

а

ц

ц

и

и

я

я

 

 

п

п

а

а

м

м

я

я

т

т

и

и

 

 

д

д

а

а

н

н

н

н

ы

ы

х

х

 

 

с

с

 

 

п

п

о

о

с

с

т

т

и

и

н

н

к

к

р

р

е

е

м

м

е

е

н

н

т

т

о

о

м

м

 

 

Операнд содержится в ячейке памяти данных. Адрес операнда находится в одном 

из  регистров  косвенной  адресации X, Y или Z. После  выполнения  операции  регистр 
косвенной адресации (X, Y или Z) инкрементируется (рис. 3.15). 

Например: 

ld Rd, 

X+ load indirect and post-increment 

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

ld Rd, 

Y+ load indirect and post-increment 

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

 

 

 

 

 

 

Data Memory (SRAM) 

 

Регистр X, Y или Z 

 

$0000 

 

 

15               

  

0  $0001 

 

 K 

 

$0002 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

   

 

 

$K   

 

 

+1 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

   

 

 

$045F  

Рис. 3.15. Косвенная адресация памяти данных с постинкрементом 

 

24 

А

А

д

д

р

р

е

е

с

с

а

а

ц

ц

и

и

я

я

 

 

п

п

а

а

м

м

я

я

т

т

и

и

 

 

д

д

а

а

н

н

н

н

ы

ы

х

х

 

 

с

с

 

 

п

п

р

р

е

е

д

д

д

д

е

е

к

к

к

к

р

р

е

е

м

м

е

е

н

н

т

т

о

о

м

м

 

 

Операнд содержится в ячейке памяти данных. Адрес операнда находится в одном 

из  регистров  косвенной  адресации X, Y или Z. Перед  выполнением  операции  регистр 
косвенной адресации (X, Y или Z) декрементируется (рис. 3.16). 

Например: 

ld Rd, 

load indirect and pre-decrement 

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

 

 

 

 

 

 

Data Memory (SRAM) 

 

Регистр X, Y или Z 

 

$0000 

 

 

15               

  

0  $0001 

 

 k 

 

$0002 

 

 

 

 

 

 

 

 

 

 

 

 

 

-1 

 

 

 

  

   

 

 

$k-1 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

   

 

 

$045F  

Рис.3.16. Косвенная адресация памяти данных с преддекрементом 

А

А

д

д

р

р

е

е

с

с

а

а

ц

ц

и

и

я

я

 

 

п

п

а

а

м

м

я

я

т

т

и

и

 

 

д

д

а

а

н

н

н

н

ы

ы

х

х

 

 

с

с

о

о

 

 

с

с

м

м

е

е

щ

щ

е

е

н

н

и

и

е

е

м

м

 

 

Операнд  содержится  в  ячейке  памяти  данных.  Адрес  операнда  вычисляется 

суммированием  содержимого  регистра Y или Z с 6 битами  адреса,  содержащимися  в 
инструкции (рис. 3.17). 

Например, 

ldd 

Rd,Y+q 

load indirect with displacement 

Rd <-  (Y + q) 

ldd Rd, 

Z+q load indirect with displacement 

Rd <-  (Z + q) 

 

 

 

 

 

 

Data Memory (SRAM) 

 

Регистр Y или Z 

 

$0000 

 

 

15               

  

0  $0001 

 

 k 

 

$0002 

 

 

 

 

 

 

 

 

 

  

   

 

   

  

   

 

 

$(k+1+g)  

 

 

 

 

 

 

 

 

 

15          11 

10          6 

0  

 

 

 

ОР d  q 

 

$045F 

 

Рис.3.17. Косвенная адресация памяти данных со смещением 

К

К

о

о

с

с

в

в

е

е

н

н

н

н

а

а

я

я

 

 

а

а

д

д

р

р

е

е

с

с

а

а

ц

ц

и

и

я

я

 

 

п

п

а

а

м

м

я

я

т

т

и

и

 

 

п

п

р

р

о

о

г

г

р

р

а

а

м

м

м

м

 

 

Адрес  константы  в  памяти  программ  определяется  содержимым  регистра Z или 

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

 

25 

Например, команды, обращающиеся за данными к памяти программ: 

lpm 

load program memory 

R1:R0 <- (Z) 

spm 

store program memory 

(Z) <- R1:R0 

Инструкция SPM, модифицирующая программу может быть использована только в 

разделе Boot Program Section памяти программ (рис.2.1). 

Команды переходов 

ijmp 

indirect jump to (z) 

PC <-  Z 

 

  

   

 

Program 

Memory 

 

Регистр  Z 

 

$0000 

 

 

15               

  

0  $0001 

 

 K 

 

$0002 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

   

 

 

$K   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$1FFF  

Рис. 3.18. Косвенная адресация памяти программ 

Относительная адресация  

Относительная  адресация  используется  при  обращении  к  памяти  программ.  В 

инструкциях перехода с помощью относительной адресации модифицируется содержимое 
программного счетчика. 

Например, 

rjmp k 

relative jump 

PC <-  PC + k + 1 

rcall k 

relative subroutine call 

PC <-  PC + k + 1 

При  этом  Выполнение  программы  продолжается  с  адреса PC + k + 1.  Значение 

относительного адреса может быть от -2048 до 2047 (рис. 3.19). 

 

 

 

 

 

 

Program Memory (Flash) 

 

Программный счетчик  

$0000  

 

15               

  

0  $0001 

 

 PC 

 

$0002 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1  

  $(PC+k+1)  

 

 

 

 

 

 

 

 

 

15            12  11          

 

0  

 

 

 

ОР k 

 

$1FFF  

Рис.3.19. Относительная адресация памяти программ 

 

26 

К

Л А С С И Ф И К А Ц И Я   К О М А Н Д

 

Множество  инструкций  микроконтроллера  образует  систему  команд.  Система 

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

При  описании  системы  команд  приводится  полная  информация  о  каждой 

инструкции:  способах  адресации,  использовании  флагов  регистра  состояния,  времени 
исполнения. 

В качестве примера рассмотрим систему команд микроконтроллера ATmega 163. 
Система команд микроконтроллера содержит 130 команд, условно разделенных на 

четыре группы: 

º 

команды пересылки данных (data transfer instructions), 

º 

арифметические и логические команды (arithmetic and logic instructions

)

º 

команды работы с битами (bit and bit-test instructions), 

º 

команды ветвления (branch instructions). 

При описании системы команд использованы следующие обозначения: 

º Rd 

регистр-приемник результата (0 

 d 

  31), 

º Rd* 

регистр-приемник результата с номером более 16 (16 

  d 

 31), 

º Rr 

регистр-источник (0 

 r 

 31), 

º Rdl: 

регистры R24, R26, R28, R30 (для инструкций ADIW и  SBIW), 

º P- 

адрес регистра ввода/вывода, 

º P*- 

адрес побитно адресуемого регистра ввода/вывода ($00-$1F) 

º K 

символьная или численная константа (8 бит) 

º k 

адресная константа  

º b 

номер бита в регистре (3 бита) 

º s 

номер бита в регистре статуса (3 бита) 

º 

X, Y, Z - регистры косвенной адресации (X=R27:R26, Y=R29:R28; Z=R31:R30 

Команды пересылки 

Команды пересылки осуществляют перемещение данных между ячейками памяти 

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

Одним из операндов в любой команде пересылки обычно является регистр общего 

назначения процессорного ядра. Вторым может быть любой регистр или ячейка памяти.  

Инструкции, как правило, не влияют на флаги в регистре состояния процессорного 

ядра.  

В  системе  команд  микроконтроллеров AVR предусмотрено 34 инструкции, 

осуществляющие  пересылку  данных.  В  инструкциях  используются  все,  за  исключением 
битовых,  способы  адресации  данных;  одним  из  операндов в любой инструкции является 
регистр  общего  назначения.  Инструкция ldi (load immediate),  использующая 
непосредственную  адресацию,  может  быть  использована  только  в  старшей  половине 
файла регистров общего назначения (R16….R31), остальные команды работают с любым 
из  регистров  файла.  Инструкцию spm (store program memory),  осуществляющую  запись 

 

 

 

 

 

 

 

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