Serwis Edukacyjny
Nauczycieli
w I-LO w Tarnowie

Do strony głównej I LO w Tarnowie

Materiały dla uczniów liceum

  Wyjście       Spis treści       Poprzedni       Następny  

©2019 mgr Jerzy Wałaszek
I LO w Tarnowie

pic

Autor artykułu: mgr Jerzy Wałaszek
Konsultacje: Wojciech Grodowski, mgr inż. Janusz Wałaszek

 

 

Mikrokontrolery

Instrukcje mikrokontrolerów AVR

Informacje wstępne

Rozdziały artykułu:
Wstęp
Teoria
Warsztat
Elementy
Projekty
Mikrokontrolery
    ATtiny4/5/9/10
    ATtiny11/12
    ATtiny13
    INSTRUKCJE AVR
        Informacje wstępne
        A
        B
        C
        D E F I J
        L
        M N O P R
        S T W
Zawartość:
Oznaczenia
Rejestry I/O
Tryby adresowania programu i danych
Tabela skoków warunkowych
Podsumowanie pełnej listy rozkazów

Educational and Non-Profit Use of Copyrighted Material:

If you use Microchip copyrighted material solely for educational (non-profit) purposes falling under the “fair use” exception of the U.S. Copyright Act of 1976 then you do not need Microchip’s written permission. For example, Microchip’s permission is not required when using copyrighted material in: (1) an academic report, thesis, or dissertation; (2) classroom handouts or textbook; or (3) a presentation or article that is solely educational in nature (e.g., technical article published in a magazine).

https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines

Oznaczenia

Rejestr Stanu (ang. Status Register, SREG)

SREG: Rejestr Stanu
C: Znacznik przeniesienia (ang. Carry Flag).
Z: Znacznik zera (ang. Zero Flag).
N: Znacznik wyniku ujemnego (ang. Negative Flag).
V: Znacznik nadmiaru dla liczb w kodzie U2 (ang. Overflow Flag).
S: Znacznik znaku, równy N pic V przy porównaniach ze znakiem (ang. Sign Flag).
H: Znacznik przeniesienia połówkowego (ang. Half Carry Flag).
T: Bit przenoszony, używany przez instrukcje BLD (ang. Bit Load, odczyt bitu) i BST (ang. Bit Store, zapis bitu) (ang. Transfer Bit).
I: Znacznik globalnego włączenia/wyłączenia przerwań (ang. Global Interrupt Enable/Disable Flag).

Rejestry i argumenty

Rd: Rejestr docelowy (i źródłowy) w zestawie rejestrów.
Rr: Rejestr źródłowy w zestawie rejestrów
R: Wynik po wykonaniu instrukcji
K: Dane stałe
k: Adres stały
b: Bit w zestawie rejestrów lub w rejestrze I/O (pole 3-bitowe)
s: Bit w rejestrze stanu (pole 3-bitowe)
X,Y,Z Rejestr adresowania pośredniego (ang. Indirect Address Register)
(X=R27:R26, Y=R29:R28 i Z=R31:R30)
A: Adres komórki I/O
q: Przesunięcie dla adresowania bezpośredniego (pole 6-bitowe)

 

 

Rejestry I/O

RAMPX, RAMPY, RAMPZ

Rejestry połączone z rejestrami X, Y i Z umożliwiające pośrednie adresowanie całej przestrzeni danych na mikrokontrolerach posiadających przestrzeń danych większą od 64KB oraz umożliwiających pobieranie danych z przestrzeni programu o rozmiarze większym niż 64KB

RAMPD

Rejestr połączony z rejestrem Z umożliwiający bezpośrednie adresowanie całej przestrzeni danych na mikrokontrolerach posiadających przestrzeń danych większą niż 64KB.

EIND

Rejestr połączony ze słowem instrukcji umożliwiający pośredni skok i wywołania funkcji w całej przestrzeni programu na mikrokontrolerach posiadających przestrzeń programu większą niż 64KB.

STACK (Stos)

Stos przechowuje adresy powrotne z podprogramów oraz zawartość umieszczonych na nim rejestrów.
SP: Wskaźnik stosu (ang. Stack Pointer)

Znaczniki (ang. Flags)

X : Znacznik zmieniony przez instrukcję
0 : Znacznik wyzerowany przez instrukcję
1 : Znacznik ustawiony przez instrukcję
: Znacznik niezmieniony przez instrukcję

 

 

Tryby adresowania programu i danych

Mikrokontroler AVR z rozszerzonym zestawem instrukcji RISC obsługuje zaawansowane i efektywne tryby adresowania przy dostępie do pamięci programu (FLASH) oraz przy dostępie do pamięci danych (SRAM, rejestry, pamięć we/wy i poszerzona pamięć I/O). Ten rozdział opisuje różne tryby adresowania wspierane przez architekturę AVR. Na poniższych obrazkach OP oznacza tę część słowa instrukcji, która zawiera kod operacji (ang. Operation Code). Dla uproszczenia nie wszystkie obrazki pokazują dokładne połozenie bitów adresowych. Określenia RAMEND i FLASHEND są używane do przedstawiania najwyższej komórki odpowiednio w pamięci danych oraz w pamięci programu.

Uwaga: Nie wszystkie mikrokontrolery AVR obsługują opisane tutaj tryby adresowania. W takich przypadkach musisz przeanalizować listę instrukcji konkretnego  mikrokontrolera, który chcesz programować.

Bezpośrednie adresowanie pojedynczego rejestru (ang. Register Direct, Single Register Rd):

pic

Argument instrukcji zawarty jest w rejestrze d (Rd).

Bezpośrednie adresowanie dwóch rejestrów (ang. Register Direct, Two Registers Rd and Rr)

pic

Argumenty instrukcji znajdują się w rejestrach r (Rr) i d (Rd). Wynik jest zapisywany w rejestrze d (Rd).

Bezpośrednie adresowanie we/wy (ang. I/O Direct)

pic

Adres argumentu zawarty jest w 6 bitach słowa instrukcji. Pole Rr/Rd określa rejestr docelowy lub źródłowy.

Uwaga: Niektóre złożone mikrokontrolery AVR posiadają więcej modułów peryferyjnych niż można obsłużyć za pomocą zarezerwowanych 64 adresów, które może adresować instrukcja za pomocą trybu bezpośredniego we/wy. Rozszerzona pamięć we/wy od adresu 64 do 255 może być osiągnięta jedynie przez adresowanie danych, nie przez adresowanie we/wy.

Bezpośrednie adresowanie danych (ang. Data Direct)

pic

16-bitowy adres danych zawarty jest w 16 najmłodszych bitach instrukcji, której kod składa się z 2 słów, czyli z 32 bitów. Pole Rd/Rr określa rejestr docelowy lub źródłowy.

Pośrednie adresowanie danych z przesunięciem (ang. Data Indirect with Displacement)

pic

Adres argumentu w przestrzeni danych jest sumą adresu zawartego w rejestrze Y lub Z z zawartością 6-bitowego pola q w słowie instrukcji. Pole Rd/Rr określa rejestr docelowy lub źródłowy.

Pośrednie adresowanie danych (ang. Data Indirect)

pic

Adresem argumentu w przestrzeni danych jest zawartość rejestru X, Y lub. W mikrokontrolerach AVR bez pamięci SRAM, tryb pośredni adresowania danych (ang. Data Indirect Addressing) jest nazywany trybem pośrednim adresowania rejestrów (ang. Register Indirect Addressing). Pośrednie adresowanie rejestrów jest podzbiorem pośredniego adresowania danych, ponieważ obszar danych o adresach od 0 do 31 zawiera zestaw rejestrów.

Pośrednie adresowanie danych z predekrementacją (ang. Data Indirect with Pre-decrement)

Predekremantacja oznacza wcześniejsze zmniejszenie o 1.

pic

Rejestr X, Y lub Z jest zmniejszany o 1 przed operacją. Adresem argumentu w przestrzeni danych jest zmniejszona zawartość rejestru X, Y lub Z.

Pośrednie adresowanie danych z postinkrementacją (ang. Data Indirect with Post-increment)

Postinkrementacja oznacza późniejsze zwiększenie o 1.

pic

Rejestr X, Y lub Z jest zwiększany o 1 po wykonaniu operacji. Adresem argumentu jest zawartość rejestru X, Y lub Z przed wykonaniem zwiększenia o 1.

Adresowanie stałej w pamięci programu (ang. Program Memory Constant Addressing)

pic

Tryb ten odnosi się do instrukcji LPM, ELPM i SPM. Adres bajta stałej jest określany przez zawartość rejestru Z. Pamięć programu zorganizowana jest w słowa 16-bitowe, zatem każda jej komórka składa się z dwóch bajtów: młodszego (ang. Less Significant Bajt, LSB) oraz starszego (ang. More Significant Byte, MSB). 15 starszych bitów rejestru Z stanowi adres komórki ze stałą, czyli adres słowa 16-bitowego. Dla instrukcji LPM najmłodszy bit rejestru Z wybiera młodszy bajt stałej, jeśli jest wyzerowany, lub starszy bajt stałej, jeśli jest ustawiony na 1. Dla instrukcji SPM najmłodszy bit rejestru Z powinien być wyzerowany. Jeśli jest użyta instrukcja ELPM, to rejestr RAMPZ zostanie wykorzystany do powiększenia rejestru Z.

Adresowanie stałej w pamięci programu z postinkrementacją (ang. Program Memory with Post-increment)

pic

Ten tryb dotyczy instrukcji LPM Z+ i ELPM Z+. Adres bajta stałej jest określony przez zawartość rejestru Z. Starsze 15 bitów wybierają adres słowa w pamięci programu. Najmłodszy bit rejestru Z wybiera młodszy bajt stałej, jeśli jest wyzerowany, lub starszy bajt stałej, jeśli jest ustawiony na 1. W instrukcji ELPM Z+ stosowany jest rejestr RAMPZ do powiększenia rejestru Z.

Bezpośrednie adresowanie pamięci programu (ang. Direct Program Addressing)

pic

Tryb ten dotyczy rozkazów JMP i CALL. 6 bitowe pole najmłodszych bitów ze starszego słowa instrukcji zostaje połączone z 16 bitami młodszego słowa instrukcji i 22-bitowy adres jest wpisywany do rejestru licznika rozkazów. W efekcie mikroprocesor jako następną wykona instrukcję leżącą w pamięci programu pod tym 22-bitowym adresem.

Pośrednie adresowanie pamięci programu (ang. Indirect Program Addressing)

pic

Tryb ten dotyczy instrukcji IJMP i ICALL. Zawartość rejestru Z trafia do licznika programu i mikrokontroler wykonuje jako następną instrukcję wskazaną przez ten adres.

Względne adresowanie pamięci programu (ang. Relative Program Addressing)

pic

Tryb dotyczy instrukcji RJMP i RCALL. Pole k jest zwiększane o 1 i dodawane do aktualnej zawartości licznika rozkazów, a wynik zostaje umieszczony w liczniku rozkazów. W efekcie mikrokontroler wykona instrukcję spod adresu PC + k + 1. Pole k jest traktowane jako liczba ze znakiem w kodzie U2. Posiada ono długość 12 bitów. Zakres przesunięcia wynosi od -2048 do 2047.

 

Tabela skoków warunkowych

Test Warunek Mnemonik Test odwrotny Warunek Mnemonik Komentarz
Rd > Rr Zpic(NpicV) = 0 BRLT (1) Rd ≤ Rr Zpic(NpicV) = 1 BRGE (1) Liczby ze znakiem
Rd ≥ Rr (NpicV) = 0 BRGE Rd < Rr (NpicV) = 1 BRLT Liczby ze znakiem
Rd = Rr Z = 1 BREQ Rd ≠ Rr Z = 0 BRNE Liczby ze znakiem
Rd ≤ Rr Zpic(NpicV) = 1 BRGE (1) Rd > Rr Zpic(NpicV) = 0 BRLT (1) Liczby ze znakiem
Rd < Rr (NpicV) = 1 BRLT Rd ≥ Rr (NpicV) = 0 BRGE Liczby ze znakiem
Rd > Rr CpicZ = 0 BRLO (1) Rd ≤ Rr CpicZ = 1 BRSH (1) Liczby bez znaku
Rd ≥ Rr C = 0 BRSH/BRCC Rd < Rr C = 1 BRLO/BRCS Liczby bez znaku
Rd = Rr Z = 1 BREQ Rd ≠ Rr Z = 0 BRNE Liczby bez znaku
Rd ≤ Rr CpicZ = 1 BRSH (1) Rd > Rr CpicZ = 0 BRLO (1) Liczby bez znaku
Rd < Rr C = 1 BRLO/BRCS Rd ≥ Rr C = 0 BRSH/BRCC Liczby bez znaku
Przeniesienie C = 1 BRCS Brak przeniesienia C = 0 BRCC Proste sprawdzenie znacznika
Ujemny N = 1 BRMI Dodatni N = 0 BRPL Proste sprawdzenie znacznika
Nadmiar V = 1 BRVS Brak nadmiaru V = 0 BRVC Proste sprawdzenie znacznika
Zero Z = 1 BREQ Różny od zera Z = 0 BRNE Proste sprawdzenie znacznika
Nota: (1) Wymień miejscami  Rd i Rr w operacji porównania przed testem, np. CP Rd,Rr → CP Rr,Rd

 

Podsumowanie pełnej listy rozkazów

Mnemonik Argumenty Opis Działanie Znaczniki Liczba cykli
Instrukcje Arytmetyczne i Logiczne
ADD Rd, Rr Add without Carry – Dodawanie bez przeniesienia Rd ← Rd + Rr Z,C,N,V,S,H 1
ADC Rd, Rr Add with Carry – Dodawanie z przeniesieniem Rd ← Rd + Rr + C Z,C,N,V,S,H 1
ADIW Rd, K Add Immediate to Word – Dodawanie stałej do słowa Rd+1:Rd ← Rd+1:Rd + K Z,C,N,V,S 2(1)
SUB Rd, Rr Subtract without Carry – Odejmowanie bez przeniesienia Rd ← Rd - Rr Z,C,N,V,S,H 1
SUBI Rd, K Subtract Immediate – Odejmowanie stałej Rd ← Rd - K Z,C,N,V,S,H 1
SBC Rd, Rr Subtract with Carry – Odejmowanie z przeniesieniem Rd ← Rd - Rr - C Z,C,N,V,S,H 1
SBCI Rd, K Subtract Immediate with Carry – Odejmowanie stałej z przeniesieniem Rd ← Rd - K - C Z,C,N,V,S,H 1
SBIW Rd, K Subtract Immediate from Word – Odejmowanie stałej od słowa Rd+1:Rd ← Rd+1:Rd - K Z,C,N,V,S 2(1)
AND Rd, Rr Logical AND – Logiczne I (koniunkcja) Rd ← Rd pic Rr Z,N,V,S 1
ANDI Rd, K Logical AND with Immediate – Logiczne I ze stałą Rd ← Rd pic K Z,N,V,S 1
OR Rd, Rr Logical OR – Logiczne LUB (alternatywa) Rd ← Rd pic Rr Z,N,V,S 1
ORI Rd, K Logical OR with Immediate – Logiczne LUB ze stałą Rd ← Rd pic K Z,N,V,S 1
EOR Rd, Rr Exclusive OR – Suma symetryczna Rd ← Rd pic Rr Z,N,V,S 1
COM Rd One's Complement – Negacja bitowa U1 Rd ← $FF - Rd Z,C,N,V,S 1
NEG Rd Two's Complement – Negacja arytmetyczna U2 Rd ← $00 - Rd Z,C,N,V,S,H 1
SBR Rd, K Set Bit(s) in Register – Ustawienie bitów w rejestrze Rd ← Rd v K Z,N,V,S 1
CBR Rd, K Clear Bit(s) in Register – Zerowanie bitów w rejestrze Rd ← Rd pic ($FFh - K) Z,N,V,S 1
INC Rd Increment – Zwiększanie o 1 Rd ← Rd + 1 Z,N,V,S 1
DEC Rd Decrement – Zmniejszanie o 1 Rd ← Rd - 1 Z,N,V,S 1
TST Rd Test for Zero or Minus – Test na zero lub liczbę ujemną Rd ← Rd pic Rd Z,N,V,S 1
CLR Rd Clear Register – Zerowanie wszystkich bitów w rejestrze Rd ← Rd pic Rd Z,N,V,S 1
SER Rd Set Register – Ustawienie wszystkich bitów w rejestrze Rd ← $FF żaden 1
MUL Rd, Rr Multiply Unsigned – Mnożenie liczb bez znaku R1:R0 ← Rd × Rr (UU) Z,C 2(1)
MULS Rd, Rr Multiply Signed – Mnożenie liczb ze znakiem R1:R0 ← Rd × Rr (SS) Z,C 2(1)
MULSU Rd, Rr Multiply Signed with Unsigned – Mnożenie liczby ze znakiem przez liczbę bez znaku R1:R0 ← Rd × Rr (SU) Z,C 2(1)
FMUL Rd, Rr Fractional Multiply Unsigned – Ułamkowe mnożenie liczb bez znaku R1:R0 ← (Rd × Rr)<<1 (UU) Z,C 2(1)
FMULS Rd, Rr Fractional Multiply Signed – Ułamkowe mnożenie liczb ze znakiem R1:R0 ← (Rd × Rr)<<1 (SS) Z,C 2(1)
FMULSU Rd, Rr Fractional Multiply Signed with Unsigned – Ułamkowe mnożenie liczby ze znakiem przez liczbę bez znaku R1:R0 ← (Rd × Rr)<<1 (SU) Z,C 2(1)
Instrukcje Rozgałęzień
RJMP k Relative Jump – Skok względny PC ← PC + k + 1 żaden 2
IJMP   Indirect Jump to (Z) – Skok pośredni pod adres w rejestrze Z PC(15:0) ← Z, PC(21:16) ← 0 żaden 2(1)
EIJMP   Extended Indirect Jump to (Z) – Rozszerzony skok pośredni pod adres w rejestrze Z PC(15:0) ← Z, PC(21:16) ← EIND żaden 2(1)
JMP k Jump – Skok PC ← k żaden 3(1)
RCALL k Relative Call Subroutine – Względne wywołanie podprogramu PC ← PC + k + 1 żaden 3 / 4(4)
ICALL   Indirect Call to (Z) – Pośrednie wywołanie podprogramu o adresie w rejestrze Z PC(15:0) ← Z, PC(21:16) ← 0 żaden 3 / 4(1)(4)
EICALL   Extended Indirect Call to (Z) – Rozszerzone pośrednie wywołanie podprogramu o adresie w rejestrze Z PC(15:0) ← Z, PC(21:16) ← EIND żaden 4(1)(4)
CALL k Call Subroutine – Wywołanie podprogramu PC ← k żaden 4 / 5(1)(4)
RET   Subroutine Return – Powrót z podprogramu PC ← STACK żaden 4 / 5(4)
RETI   Interrupt Return – Powrót z przerwania PC ← STACK I 4 / 5(4)
CPSE Rd, Rr Compare, Skip if Equal – Porównanie z pominięciem następnej instrukcji, jeśli argumenty równe jeśli (Rd = Rr), to PC ← PC + 2 lub 3 żaden 1 / 2 / 3
CP Rd, Rr Compare – Porównanie Rd - Rr Z,C,N,V,S,H 1
CPC Rd, Rr Compare with Carry – Porównanie z przeniesieniem Rd - Rr - C Z,C,N,V,S,H 1
CPI Rd, K Compare with Immediate – Porównanie ze stałą Rd - K Z,C,N,V,S,H 1
SBRC Rr, b Skip if Bit in Register Cleared – Pominięcie następnej instrukcji, jeśli bit w rejestrze w stanie 0 jeśli (Rr(b)=0), to PC ← PC + 2 lub 3 żaden 1 / 2 / 3
SBRS Rr, b Skip if Bit in Register Set – Pominięcie następnej instrukcji, jeśli bit w rejestrze w stanie 1 jeśli (Rr(b)=1), to PC ← PC + 2 lub 3 żaden 1 / 2 / 3
SBIC A, b Skip if Bit in I/O Register Cleared – Pominięcie następnej instrukcji, jeśli bit w rejestrze we/wy w stanie 0 jeśli (I/O(A,b)=0), to PC ← PC + 2 lub 3 żaden 1 / 2 / 3
SBIS A, b Skip if Bit in I/O Register Set – Pominięcie następnej instrukcji, jeśli bit w rejestrze we/wy w stanie 1 jeśli (I/O(A,b)=1), to PC ← PC + 2 lub 3 żaden 1 / 2 / 3
BRBS s, k Branch if Status Flag Set – Skok warunkowy, jeśli znacznik stanu ustawiony jeśli (SREG(s) = 1), to PC ← PC + k + 1 żaden 1 / 2
BRBC s, k Branch if Status Flag Cleared – Skok warunkowy, jeśli znacznik stanu wyzerowany jeśli (SREG(s) = 0), to  PC ← PC + k + 1 żaden 1 / 2
BREQ k Branch if Equal – Skok warunkowy, jeśli równe jeśli (Z = 1), to PC ← PC + k + 1 żaden 1 / 2
BRNE k Branch if Not Equal – Skok warunkowy, jeśli różne jeśli (Z = 0), to PC ← PC + k + 1 żaden 1 / 2
BRCS k Branch if Carry Set – Skok warunkowy, jeśli jest przeniesienie jeśli (C = 1), to PC ← PC + k + 1 żaden 1 / 2
BRCC k Branch if Carry Cleared – Skok warunkowy, jeśli nie ma przeniesienia jeśli (C = 0), to PC ← PC + k + 1 żaden 1 / 2
BRSH k Branch if Same or Higher – Skok względny, jeśli takie same lub wyższe jeśli (C = 0), to PC ← PC + k + 1 żaden 1 / 2
BRLO k Branch if Lower – Skok warunkowy, jeśli niższe jeśli (C = 1), to PC ← PC + k + 1 żaden 1 / 2
BRMI k Branch if Minus – Skok warunkowy przy minusie jeśli (N = 1), to PC ← PC + k + 1 żaden 1 / 2
BRPL k Branch if Plus – Skok warunkowy przy plusie jeśli (N = 0), to PC ← PC + k + 1 żaden 1 / 2
BRGE k Branch if Greater or Equal, Signed – Skok warunkowy, jeśli większe lub równe, liczby ze znakiem jeśli (N pic V= 0), to PC ← PC + k + 1 żaden 1 / 2
BRLT k Branch if Less Than, Signed – Skok warunkowy, jeśli mniejsze, liczby ze znakiem jeśli (N pic V= 1), to PC ← PC + k + 1 żaden 1 / 2
BRHS k Branch if Half Carry Flag Set – Skok warunkowy, jeśli przeniesienie połówkowe ustawione jeśli (H = 1), to PC ← PC + k + 1 żaden 1 / 2
BRHC k Branch if Half Carry Flag Cleared – Skok warunkowy, jeśli przeniesienie połówkowe wyzerowane jeśli (H = 0), to PC ← PC + k + 1 żaden 1 / 2
BRTS k Branch if T Flag Set – Skok warunkowy, jeśli znacznik T ustawiony jeśli (T = 1), to PC ← PC + k + 1 żaden 1 / 2
BRTC k Branch if T Flag Cleared – Skok warunkowy, jeśli znacznik T wyzerowany jeśli (T = 0), to PC ← PC + k + 1 żaden 1 / 2
BRVS k Branch if Overflow Flag is Set – Skok warunkowy, jeśli znacznik nadmiaru V ustawiony jeśli (V = 1), to PC ← PC + k + 1 żaden 1 / 2
BRVC k Branch if Overflow Flag is Cleared – Skok warunkowy, jeśli znacznik nadmiaru V wyzerowany jeśli (V = 0), to PC ← PC + k + 1 żaden 1 / 2
BRIE k Branch if Interrupt Enabled – Skok warunkowy przy uaktywnionych przerwaniach jeśli ( I = 1), to PC ← PC + k + 1 żaden 1 / 2
BRID k Branch if Interrupt Disabled – Skok warunkowy przy przerwaniach zablokowanych jeśli ( I = 0), to PC ← PC + k + 1 żaden 1/2
Instrukcje Przesyłu Danych
MOV Rd, Rr Copy Register – Kopiowanie rejestru Rd ← Rr żaden 1
MOVW Rd, Rr Copy Register Pair – Kopiowanie pary rejestrów Rd+1:Rd ← Rr+1:Rr żaden 1(1)
LDI Rd, K Load Immediate – Ładowanie stałej Rd ← K żaden 1
LDS Rd, k Load Direct from data space – Ładowanie bezpośrednie z przestrzeni danych Rd ← (k) żaden 2(1)(4)
LD Rd, X Load Indirect – Ładowanie pośrednie Rd ← (X) żaden 2(2)(4)
LD Rd, X+ Load Indirect and Post-Increment – Ładowanie pośrednie z postinkrementacją Rd ← (X), X ← X + 1 żaden 2(2)(4)
LD Rd, -X Load Indirect and Pre-Decrement – Ładowanie pośrednie z predekrementacją X ← X - 1, Rd ← (X) żaden 2(2)(4)
LD Rd, Y Load Indirect – Ładowanie pośrednie Rd ← (Y) żaden 2(2)(4)
LD Rd, Y+ Load Indirect and Post-Increment – Ładowanie pośrednie z postinkrementacją Rd ← (Y), Y ← Y + 1 żaden 2(2)(4)
LD Rd, -Y Load Indirect and Pre-Decrement – Ładowanie pośrednie z predekrementacją Y ← Y - 1, Rd ← (Y) żaden 2(2)(4)
LDD Rd,Y+q Load Indirect with Displacement – Ładowanie pośrednie z przesunięciem Rd ← (Y + q) żaden 2(1)(4)
LD Rd, Z Load Indirect – Ładowanie pośrednie Rd ← (Z) żaden 2(2)(4)
LD Rd, Z+ Load Indirect and Post-Increment – Ładowanie pośrednie z postinkrementacją Rd ← (Z), Z ← Z+1 żaden 2(2)(4)
LD Rd, -Z Load Indirect and Pre-Decrement – Ładowanie pośrednie z predekrementacją Z ← Z - 1, Rd ← (Z) żaden 2(2)(4)
LDD Rd, Z+q Load Indirect with Displacement – Ładowanie pośrednie z przesunięciem Rd ← (Z + q) żaden 2(1)(4)
STS k, Rr Store Direct to data space – Zapis bezpośredni w przestrzeni danych (k) ← Rd żaden 2(1)(4)
ST X, Rr Store Indirect – Zapis pośredni z indeksem X (X) ← Rr żaden 2(2)(4)
ST X+, Rr Store Indirect and Post-Increment – Zapis pośredni z postinkrementacją z indeksem X (X) ← Rr, X ← X + 1 żaden 2(2)(4)
ST -X, Rr Store Indirect and Pre-Decrement – Zapis pośredni z predekrementacją z indeksem X X ← X - 1, (X) ← Rr żaden 2(2)(4)
ST Y, Rr Store Indirect – Zapis pośredni z indeksem Y (Y) ← Rr żaden 2(2)(4)
ST Y+, Rr Store Indirect and Post-Increment – Zapis pośredni z postinkrementacją z indeksem Y (Y) ← Rr, Y ← Y + 1 żaden 2(2)(4)
ST -Y, Rr Store Indirect and Pre-Decrement – Zapis pośredni z predekrementacją z indeksem Y Y ← Y - 1, (Y) ← Rr żaden 2(2)(4)
STD Y+q,Rr Store Indirect with Displacement – Zapis pośredni z przesunięciem z indeksem Y (Y + q) ← Rr żaden 2(1)(4)
ST Z, Rr Store Indirect – Zapis pośredni z indeksem Z (Z) ← Rr żaden 2(2)(4)
ST Z+, Rr Store Indirect and Post-Increment – Zapis pośredni z postinkrementacją z indeksem Z (Z) ← Rr, Z ← Z + 1 żaden 2(2)(4)
ST -Z, Rr Store Indirect and Pre-Decrement – Zapis pośredni z predekrementacją z indeksem Z Z ← Z - 1, (Z) ← Rr żaden 2(2)(4)
STD Z+q,Rr Store Indirect with Displacement – Zapis pośredni z przesunięciem z indeksem Z (Z + q) ← Rr żaden 2(1)(4)
LPM   Load Program Memory – Ładowanie z pamięci programu R0 ← (Z) żaden 3(3)
LPM Rd, Z Load Program Memory – Ładowanie z pamięci programu Rd ← (Z) żaden 3(3)
LPM Rd, Z+ Load Program Memory and Post-Increment – Ładowanie z pamięci programu z postinkrementacją Rd ← (Z), Z ← Z + 1 żaden 3(3)
ELPM   Extended Load Program Memory – Rozszerzone ładowanie z pamięci programu R0 ← (RAMPZ:Z) żaden 3(1)
ELPM Rd, Z Extended Load Program Memory – Rozszerzone ładowanie z pamięci programu Rd ← (RAMPZ:Z) żaden 3(1)
ELPM Rd, Z+ Extended Load Program Memory and Post-Increment – Rozszerzone ładowanie z pamięci programu z postinkrementacją Rd ← (RAMPZ:Z), Z ← Z + 1 żaden 3(1)
SPM   Store Program Memory – Zapis w pamięci programu (Z) ← R1:R0 żaden -(1)
IN Rd, A In From I/O Location – Odczyt z komórki we/wy Rd ← I/O(A) żaden 1
OUT A, Rr Out To I/O Location – Zapis do komórki we/wy I/O(A) ← Rr żaden 1
PUSH Rr Push Register on Stack – Zapis rejestru na stos STACK ← Rr żaden 2(1)
POP Rd Pop Register from Stack – Pobranie rejestru ze stosu Rd ← STACK żaden 2(1)
Instrukcje Operacji na Bitach oraz Testowania Bitów
LSL Rd Logical Shift Left – Logiczne przesunięcie w lewo Rd(n+1)←Rd(n),Rd(0) ← 0,C←Rd(7), n=0..6 Z,C,N,V,H 1
LSR Rd Logical Shift Right – Logiczne przesunięcie w prawo Rd(n)←Rd(n+1),Rd(7) ← 0,C←Rd(0), n=0..6 Z,C,N,V 1
ROL Rd Rotate Left Through Carry – Obrót w lewo poprzez przeniesienie Rd(0)←C,Rd(n+1) ← Rd(n),C←Rd(7), n=0..6 Z,C,N,V,H 1
ROR Rd Rotate Right Through Carry – Obrót w prawo poprzez przeniesienie Rd(7)←C,Rd(n)←Rd(n+1),C ← Rd(0), n=0..6 Z,C,N,V 1
ASR Rd Arithmetic Shift Right – Arytmetyczne przesunięcie w prawo Rd(n) ← Rd(n+1), n=0..6 Z,C,N,V 1
SWAP Rd Swap Nibbles – Wymiana 4 górnych bitów z 4 dolnymi Rd(3..0) ↔ Rd(7..4) żaden 1
BSET s Flag Set – Ustawienie znacznika w rejestrze stanu SREG SREG(s) ← 1 SREG(s) 1
BCLR s Flag Clear – Zerowanie znacznika w rejestrze stanu SREG SREG(s) ← 0 SREG(s) 1
SBI A, b Set Bit in I/O Register – Ustawienie bitu w rejestrze we/wy I/O(A, b) ← 1 żaden 2
CBI A, b Clear Bit in I/O Register – Zerowanie bitu w rejestrze we/wy I/O(A, b) ← 0 żaden 2
BST Rr, b Bit Store from Register to T – Zapis bitu z rejestru w T T ← Rr(b) T 1
BLD Rd, b Bit load from T to Register – Załadowanie bitu z T do rejestru Rd(b) ← T żaden 1
SEC   Set Carry – Ustawienie przeniesienia C ← 1 C 1
CLC   Clear Carry – Zerowanie przeniesienia C ← 0 C 1
SEN   Set Negative Flag – Ustawienie znacznika wyniku ujemnego N ← 1 N 1
CLN   Clear Negative Flag – Zerowanie znacznika wyniku ujemnego N ← 0 N 1
SEZ   Set Zero Flag – Ustawienie znacznika zera Z ← 1 Z 1
CLZ   Clear Zero Flag – Zerowanie znacznika zera Z ← 0 Z 1
SEI   Global Interrupt Enable – Globalne włączenie przerwań I ← 1 I 1
CLI   Global Interrupt Disable – Globalne wyłączenie przerwań I ← 0 I 1
SES   Set Signed Test Flag – Ustawienie znacznika znaku wyniku S ← 1 S 1
CLS   Clear Signed Test Flag – Zerowanie znacznika znakowego S ← 0 S 1
SEV   Set Two’s Complement Overflow – Ustawienie znacznika nadmiaru U2 V ← 1 V 1
CLV   Clear Two’s Complement Overflow – Zerowanie znacznika nadmiaru U2 V ← 0 V 1
SET   Set T in SREG – Ustawienie bitu T w rejestrze stanu T ← 1 T 1
CLT   Clear T in SREG – Zerowanie bitu T w rejestrze stanu T ← 0 T 1
SEH   Set Half Carry Flag in SREG – Ustawienie znacznika przeniesienia połówkowego w rejestrze stanu H ← 1 H 1
CLH   Clear Half Carry Flag in SREG – Zerowanie znacznika przeniesienia połówkowego w rejestrze stanu H ← 0 H 1
Instrukcje Sterujące Mikrokontrolerem
BREAK   Break – Przerwanie wykonywania programu (zobacz na opis BREAK)   żaden 1(1)
NOP   No Operation – Operacja pusta   żaden 1
SLEEP   Sleep – Wejście w tryb uśpienia (zobacz na opis Sleep)   żaden 1
WDR   Watchdog Reset – Reset licznika zegarowego (zobacz na opis WDR)   żaden 1
Uwagi: 1.Ta instrukcja nie jest dostępna na wszystkich mikrokontrolerach AVR. Zobacz do danych technicznych konkretnego mikrokontrolera.
2. Nie wszystkie warianty tej instrukcji są dostępne na wszystkich mikrokontrolerach AVR. Zobacz do danych technicznych konkretnego mikrokontrolera.
3. Nie wszystkie warianty instrukcji LPM są dostępne na wszystkich mikrokontrolerach AVR. Zobacz do danych technicznych konkretnego mikrokontrolera. Instrukcja LPM nie jest wcale zaimplementowana na AT90S1200.
4. Liczba cykli przy dostępie do pamięci danych zakłada dostępy do pamięci wewnętrznej i nie jest prawidłowa dla dostępów poprzez interfejs pamięci zewnętrznej RAM. Dla LD, ST, LDS, STS, PUSH, POP dodaj jeden cykl plus jeszcze jeden dla każdego stanu oczekiwania. Dla CALL, ICALL, EICALL, RCALL, RET, RETI w mikrokontrolerach z 16-bitowym licznikiem rozkazów PC, dodaj trzy cykle plus dwa cykle dla każdego stanu oczekiwania Dla CALL, ICALL, EICALL, RCALL, RET, RETI w mikrokontrolerach z 22-bitowym licznikiem rozkazów PC, dodaj pięć cykli plus trzy cykle dla każdego stanu oczekiwania.

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2019 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.