Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

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

©2021 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Mikrokontrolery

ATmega8

Zestaw instrukcji

obrazek

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

SPIS TREŚCI
Podrozdziały

obrazek

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 obrazek 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)

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ę
Na początek:  podrozdziału   strony 

Lista rozkazów mikrokontrolera ATmega8

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
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
AND Rd, Rr Logical AND – Logiczne I (koniunkcja) Rd ← Rd obrazek Rr Z,N,V,S 1
ANDI Rd, K Logical AND with Immediate – Logiczne I ze stałą Rd ← Rd obrazek K Z,N,V,S 1
OR Rd, Rr Logical OR – Logiczne LUB (alternatywa) Rd ← Rd obrazek Rr Z,N,V,S 1
ORI Rd, K Logical OR with Immediate – Logiczne LUB ze stałą Rd ← Rd obrazek K Z,N,V,S 1
EOR Rd, Rr Exclusive OR – Suma symetryczna Rd ← Rd obrazek 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 obrazek K Z,N,V,S 1
CBR Rd, K Clear Bit(s) in Register – Zerowanie bitów w rejestrze Rd ← Rd obrazek ($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 obrazek Rd Z,N,V,S 1
CLR Rd Clear Register – Zerowanie wszystkich bitów w rejestrze Rd ← Rd obrazek 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
MULS Rd, Rr Multiply Signed – Mnożenie liczb ze znakiem R1:R0 ← Rd × Rr (SS) Z,C 2
MULSU Rd, Rr Multiply Signed with Unsigned – Mnożenie liczby ze znakiem przez liczbę bez znaku R1:R0 ← Rd × Rr (SU) Z,C 2
FMUL Rd, Rr Fractional Multiply Unsigned – Ułamkowe mnożenie liczb bez znaku R1:R0 ← (Rd × Rr)<<1 (UU) Z,C 2
FMULS Rd, Rr Fractional Multiply Signed – Ułamkowe mnożenie liczb ze znakiem R1:R0 ← (Rd × Rr)<<1 (SS) Z,C 2
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
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
RCALL k Relative Call Subroutine – Względne wywołanie podprogramu PC ← PC + k + 1 żaden 3
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
RET   Subroutine Return – Powrót z podprogramu PC ← STACK żaden 4
RETI   Interrupt Return – Powrót z przerwania PC ← STACK I 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 obrazek 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 obrazek 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
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
LD Rd, X Load Indirect – Ładowanie pośrednie Rd ← (X) żaden 2
LD Rd, X+ Load Indirect and Post-Increment – Ładowanie pośrednie z postinkrementacją Rd ← (X), X ← X + 1 żaden 2
LD Rd, -X Load Indirect and Pre-Decrement – Ładowanie pośrednie z predekrementacją X ← X - 1, Rd ← (X) żaden 2
LD Rd, Y Load Indirect – Ładowanie pośrednie Rd ← (Y) żaden 2
LD Rd, Y+ Load Indirect and Post-Increment – Ładowanie pośrednie z postinkrementacją Rd ← (Y), Y ← Y + 1 żaden 2
LD Rd, -Y Load Indirect and Pre-Decrement – Ładowanie pośrednie z predekrementacją Y ← Y - 1, Rd ← (Y) żaden 2
LDD Rd,Y+q Load Indirect with Displacement – Ładowanie pośrednie z przesunięciem Rd ← (Y + q) żaden 2
LD Rd, Z Load Indirect – Ładowanie pośrednie Rd ← (Z) żaden 2
LD Rd, Z+ Load Indirect and Post-Increment – Ładowanie pośrednie z postinkrementacją Rd ← (Z), Z ← Z+1 żaden 2
LD Rd, -Z Load Indirect and Pre-Decrement – Ładowanie pośrednie z predekrementacją Z ← Z - 1, Rd ← (Z) żaden 2
LDD Rd, Z+q Load Indirect with Displacement – Ładowanie pośrednie z przesunięciem Rd ← (Z + q) żaden 2
STS k, Rr Store Direct to data space – Zapis bezpośredni w przestrzeni danych (k) ← Rd żaden 2
ST X, Rr Store Indirect – Zapis pośredni z indeksem X (X) ← Rr żaden 2
ST X+, Rr Store Indirect and Post-Increment – Zapis pośredni z postinkrementacją z indeksem X (X) ← Rr, X ← X + 1 żaden 2
ST -X, Rr Store Indirect and Pre-Decrement – Zapis pośredni z predekrementacją z indeksem X X ← X - 1, (X) ← Rr żaden 2
ST Y, Rr Store Indirect – Zapis pośredni z indeksem Y (Y) ← Rr żaden 2
ST Y+, Rr Store Indirect and Post-Increment – Zapis pośredni z postinkrementacją z indeksem Y (Y) ← Rr, Y ← Y + 1 żaden 2
ST -Y, Rr Store Indirect and Pre-Decrement – Zapis pośredni z predekrementacją z indeksem Y Y ← Y - 1, (Y) ← Rr żaden 2
STD Y+q,Rr Store Indirect with Displacement – Zapis pośredni z przesunięciem z indeksem Y (Y + q) ← Rr żaden 2
ST Z, Rr Store Indirect – Zapis pośredni z indeksem Z (Z) ← Rr żaden 2
ST Z+, Rr Store Indirect and Post-Increment – Zapis pośredni z postinkrementacją z indeksem Z (Z) ← Rr, Z ← Z + 1 żaden 2
ST -Z, Rr Store Indirect and Pre-Decrement – Zapis pośredni z predekrementacją z indeksem Z Z ← Z - 1, (Z) ← Rr żaden 2
STD Z+q,Rr Store Indirect with Displacement – Zapis pośredni z przesunięciem z indeksem Z (Z + q) ← Rr żaden 2
LPM   Load Program Memory – Ładowanie z pamięci programu R0 ← (Z) żaden 3
LPM Rd, Z Load Program Memory – Ładowanie z pamięci programu Rd ← (Z) żaden 3
LPM Rd, Z+ Load Program Memory and Post-Increment – Ładowanie z pamięci programu z postinkrementacją Rd ← (Z), Z ← Z + 1 żaden 3
SPM   Store Program Memory – Zapis w pamięci programu (Z) ← R1:R0 żaden
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
POP Rd Pop Register from Stack – Pobranie rejestru ze stosu Rd ← STACK żaden 2
Instrukcje Operacji na Bitach oraz Testowania Bitów
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
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
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
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
Na początek:  podrozdziału   strony 

Nota Copyright

Disclaimer: The information in this document is provided in connection with Atmel products. No license, express or implied, by estoppel or otherwise, to any intellectual property right is granted by this document or in connection with the sale of Atmel products. EXCEPT AS SET FORTH IN ATMEL’S TERMS AND CONDITIONS OF SALE LOCATED ON ATMEL’S WEB SITE, ATMEL ASSUMES NO LIABILITY WHATSOEVER AND DISCLAIMS ANY EXPRESS, IMPLIED OR STATUTORY WARRANTY RELATING TO ITS PRODUCTS INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE, SPECIAL OR INCIDENTAL DAMAGES (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF PROFITS, BUSINESS INTERRUPTION, OR LOSS OF INFORMATION) ARISING OUT OF THE USE OR INABILITY TO USE THIS DOCUMENT, EVEN IF ATMEL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Atmel makes no representations or warranties with respect to the accuracy or completeness of the contents of this document and reserves the right to make changes to specifications and product descriptions at any time without notice. Atmel does not make any commitment to update the information contained herein. Unless specifically provided
otherwise, Atmel products are not suitable for, and shall not be used in, automotive applications. Atmel’s products are not intended, authorized, or warranted for use as components in applications intended to support or sustain life.

© 2013 Atmel Corporation. All rights reserved.

Atmel®, logo and combinations thereof, and others are registered trademarks or trademarks of Atmel Corporation or its subsidiaries. Other terms and product names may be trademarks of others.

Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2021 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.