Micro contrôleurs AVR/Annexe/Les instructions

Leçons de niveau 15
Une page de Wikiversité, la communauté pédagogique libre.
Les instructions
Image logo représentative de la faculté
Annexe 2
Leçon : Micro contrôleurs AVR

Annexe de niveau 15.

Précédent :Liens
Suivant :La programmation ISP
En raison de limitations techniques, la typographie souhaitable du titre, « Annexe : Les instructions
Micro contrôleurs AVR/Annexe/Les instructions
 », n'a pu être restituée correctement ci-dessus.




Les instructions[modifier | modifier le wikicode]

Il n'est absolument pas nécessaire de connaître la liste des instructions pour continuer ce projet. Mais n'ayant trouvé cette liste nulle part dans Wikipédia, je la donne ici sans plus d'explications.

Instructions arithmétiques et logiques
Mnemonics Operands Description Opération Flags #Clocks
ADD Rd, Rr Additionne deux registres Rd ←Rd+Rr Z,C,N,V,H
1
ADC Rd, Rr Additionne deux registres avec la retenue Rd← Rd+Rr+C Z,C,N,V,H
1
ADIW Rdl, K Addition immédiate de mots Rdh:Rdl←Rdh:Rdl + K Z,C,N,V,S
2
SUB Rd, Rr Soustraire deux registres Rd←Rd - Rr Z,C,N,V,H
1
SUBI Rd, K Soustraire les constantes de deux registres Rd←Rd - K Z,C,N,V,H
1
SBC Rd, Rr Soustraire deux registres avec une retenue Rd←Rd - Rr - C Z,C,N,V,H
1
SBCI Rd, K Soustraire une constante du registre avec retenue Rd←Rd - K - C Z,C,N,V,H
1
SBIW Rdl, K Soustraction immédiate du mot Rdh:Rdl←Rdh:Rdl - K Z,C,N,V,S
2
AND Rd, Rr Registres du ET logique Rd ← Rd * Rr Z,N,V
1
ANDI Rd, K Registres du ET logique et constante Rd ← Rd * K Z,N,V
1
OR Rd, Rr OU logique entre registres Rd ← Rd v Rr Z,N,V
1
ORI Rd, K OU logique entre Registre et constante Rd ← Rd v K Z,N,V
1
EOR Rd, Rr OU exclusif entre registres Rd ← Rd Rr Z,N,V
1
COM Rd Complément à 1 Rd ← 0xFF - Rd Z,C,N,V
1
NEG Rd Complément à 2 Rd ← 0x00 - Rd Z,C,N,V,H
1
SBR Rd, K Mettre le(s) bit(s) dans un registre Rd ← Rd v K Z,N,V
1
CBR Rd, K Effacer le(s) bit(s) dans un registre Rd ← Rd ET (0xFF-K) Z,N,V
1
INC Rd Incremente Rd ← Rd + 1 Z,N,V
1
DEC Rd Decremente un registre Rd ← Rd - 1 Z,N,V
1
TST Rd Test si zero ou négatif Rd ← Rd * Rd Z,N,V
1
CLR Rd Effacer le registre Rd ← Rd XOR Rd Z,N,V
1
SER Rd Registre tout à 1 Rd ← 0xFF None
1
MUL Rd, Rr Multiplication (non signée) R1:R0← Rd * Rr Z,C
2
MULS Rd, Rr Multiplication (signée) R1:R0← Rd * Rr Z,C
2
MULSU Rd, Rr Multiplication signé par non signé R1:R0← (Rd * Rr) <<1 Z,C
2
FMUL Rd, Rr Multiplication fractionnaire non signée R1:R0 ← (Rd * Rr) << 1 Z,C
2
FMULS Rd, Rr Multiplication fractionnaire signée R1:R0← (Rd * Rr) << 1 Z,C
2
FMULSU Rd, Rr Multiplication fractionnaire non signée et non signée R1:R0← (Rd * Rr) << 1 Z,C
2


Instructions de sauts
Mnemonics Operands Description Opération Flags #Clocks
RJMP K Saut relatif PC ← PC + k + 1 None 2
IJMP Saut indirect vers (Z) PC ← Z None 2
RCALL K Appel du sous-programme en relatif PC ← PC + k + 1 None 3
ICALL Appel indirect de (Z) PC ← Z None 3
RET Retour de sous-programme PC ← STACK None 4
RETI Retour d'interruption PC ← STACK I 4
CPSE Rd,Rr Compare et saute si égal if(Rd=Rr) PC← PC + 2 or 3 None
CP Rd, Rr Compare Rd - Rr Z,N,V,C,H 1
CPC Rd, Rr Compare avec la retenue Rd – Rr - C Z,N,V,C,H 1
CPI Rd, K Comparaison en immédiat Rd - K Z,N,V,C,H 1
SBRC Rr, b Saut si le bit du registre est effacé if(Rr(b)=0) PC← PC + 2 or 3 None 1/2/3
SBRS Rr, b Saute si le bit du registre et positionné à 1 if(Rr(b)=1) PC← PC + 2 or 3 None
SBIC P, b Saute si bit registre d'entrées/sorties est à 0 if(P(b)=0) PC← PC + 2 or 3 None
SBIS S, K Saute si bit registre d'entrées/sorties est à 1 if(P(b)=1) PC← PC + 2 or 3 None
BRBS S, K Brancher si le drapeau est mis if(SREG(s)=1) then PC PC+K+1 None
BRBC S,K Brancher si le drapeau est effacé if(SREG(s)=0) then PC PC+K+1 None
BREQ k Brancher si égalité if(Z=1) then PC ← PC + k +1 None
BRNE k Brancher si non égal if(Z=0) then PC← PC + k +1 None
BRCS k Brancher si la retenue est mise if(C=1) then PC ← PC + k +1 None
BRCC k Brancher si la retenue est effacée if(C=0) then PC ← PC + k +1 None
BRSH k Brancher si idem ou supérieur if(C=0) then PC ← PC + k +1 None
BRLO k Brancher si inférieur if(C=1) then PC ← PC + k +1 None
BRMI k Brancher si minimum if(N=1) then PC ← PC + k +1 None
BRPL k Brancher si maxi if(N=0) then PC ← PC + k +1 None
BRGE k Brancher si supérieur ou égale, signé if(N V=0) then PC ← PC + k +1 None
BRLT k Brancher si inferieure a 0 (signé) if(N V=1) then PC ← PC + k +1 None
BRHS k Brancher si toutes les retenues du drapeau sont mises if(H=1) then PC ← PC + k +1 None
BRHC k Brancher si toutes les retenues du drapeau sont effacées if(H=0) then PC ← PC + k +1 None
BRTS k Brancher si T flag est mis if(T=1) then PC ← PC + k +1 None
BRTC k Brancher si T flag est if(T=0) then PC ← PC + k +1 None
BRVS k Brancher si l'Overflow est à un if(V=1) then PC ← PC + k +1 None
BRVC k Brancher si l'Overflow est effacé if(T=0) then PC ← PC + k +1 None
BRIE k Brancher si l'interruption est permise if(I=1) then PC ← PC + k +1 None
BRID k Brancher si l'interruption n’est pas permise if(I=0) then PC ← PC + k +1 None


Instructions de transfert de données
Mnemonics Operands Description Opération Flags #Clocks
MOV Rd, Rr Copier un registre dans un autre Rd← Rr None 1
MOVW Rd, Rr Copier un mot dans un autre Rd+1:Rd← Rr+1:Rr None 1
LDI Rd, K Charger en immédiat Rd← Knone1
LD Rd, X Chargeer en indirect Rd← (x) None 2
LD Rd, X+ Chargement indirect et Post-inc. Rd← (x), x← x+1 None 2
LD Rd, - X Chargement indirect et Pre-Dec. x← x-1, Rd← (x) None 2
LD Rd, Y Chargement indirect Rd← (y) None 2
LD Rd, Y+ Chargement indirect et Post-inc Rd← (y), y← y+1 None 2
LD Rd, - Y Chargement indirect et Pre-Dec. y← y-1, Rd← (y) None 2
LDD Rd, Y+q Chargement indirect avec déplacement Rd← (y +q ) None 2
LD Rd, Z Chargement indirect Rd← (z) None 2
LD Rd, Z+ Chargement indirect et Post-inc Rd← (z), z← z+1 None 2
LD Rd, -Z Chargement indirect et Pre-Dec. z← z-1, Rd← (z) None 2
LDD Rd, Z+q Chargement indirect avec déplacement Rd← (z +q ) None 2
LDS Rd, K Chargement direct avec SRAM Rd← (k) None 2
ST X, Rr Stockage indirect (x) ← Rr None 2
ST X+, Rr Stockage indirect et Post-inc (x) ← Rr, x← x+1 None 2
ST -X, Rr Stockage indirect et Pre-Dec. x← x-1, (x)← Rr None 2
ST Y, Rr Stockage indirect (y) ← Rr None 2
ST Y+, Rr Stockage indirect et Post-inc. (y) ← Rr, y← y+1 None 2
ST -Y, Rr Stockage indirect et Pre-Dec. y← y-1, (y)← Rr None 2
STD Y+q, Rr Stockage indirect avec déplacement (y + q) ← Rr None 2
ST Z, Rr Stockage indirect (z) ← Rr None 2
ST Z+, Rr Stockage indirect et Post-inc (z) ← Rr, z← z+1 None 2
ST -Z, Rr Stockage indirect et Pre-dec. z← z-1, (z)← Rr None 2
STD Z+q, Rr Stockage indirect avec déplacement (z + q) ← Rr None 2
STS K, Rr Stockage direct de SRAM (k) ← Rr None 2
LPM Chargement du programme de la mémoire R0← (z) None 3
LPM Rd, Z Chargement du programme de la mémoire Rd← (z) None 3
LPM Rd, Z+ Chargement du programme de la mémoire et Post-inc Rd← (z), z← z+1 None 3
SPM Stockage du programme de la mémoire (z)← R1:R0 None -
IN Rd, P In port Rd← PNone1 None
OUT P, Rr OUT Port P← Rr None 1
PUSH Rr Pousse le registre dans la pile STACK ← Rr None 2
POP Rd Enlever le registre de la pile Rd←STACK None 2


Instructions sur bits et tests sur bit
Mnemonics Operands Description Opération Flags #Clocks
SBI P,b Positionne un bit à 1 I/O(p,b)← 1 None 2
CBI P,b Positionne un bit à 0 I/O(p,b)← 0 None 2
LSL Rd décalage vers la gauche Rd(n+1)←Rd(n),Rd(0)← 0 Z,C,N,V 1
LSR Rd décalage vers la droite Rd(n)←Rd(n+1),Rd(7)← 0 Z,C,N,V 1
ROL Rd décalage circulaire gauche Rd(0)←C,Rd(n+1)←Rd(n),C← Rd(7) Z,C,N,V 1
ROR Rd décalage circulaire droite Rd(7)←C,Rd(n)←Rd(n+1),C← Rd(0) Z,C,N,V 1
ASR Rd décalage arithmétique droit Rd(n)←Rd(n+1), n=0..6 Z,C,N,V 1
SWAP Rd échange poids/fort/faible Rd(3..0)←Rd(7..4),Rd(7..4),← Rd(3..0) None 1
BSET s SREG(s)← 1 SREG(s) 1
BCLR s SREG(s)← 0 SREG(s) 1
BST Rr, b T← Rr(b) T 1
BLD Rd, b Rd(b)←T None 1
SEC Mettre la retenue à 1 C←1 C 1
CLC Mettre la retenue à 0 C←0 C 1
SEN N←1 C 1
CLN N←0 N 1
SEZ mise à 1 de Z Z←1 C 1
CLZ mise à 0 de Z Z←0 Z 1
SEI Autorisation des interruptions globales I←1 I 1
CLI Désactivation des interruptions globales I←0 I 1
SES Positionnement à 1 le test de signe S←1 S 1
CLS Positionnement à 0 le test de signe S←0 S 1
SEV Positionne le dépassement en complément à deux v←1 V 1
CLV Annule le dépassement en complément à deux V←0 V 1
SET Set T in SREG T←1 T 1

Classement du jeu d'instructions par architectures[modifier | modifier le wikicode]

Toutes les instructions ne sont pas implantées dans les micro contrôleurs Atmel AVR. C'est le cas des instructions réalisant des multiplications, des loads/jumps/calls étendus, long jumps, et la gestion de l'énergie.

Familles Membres Arithmétique Branchements Transferts Opérations sur Bit
Cœur Minimal AT90S1200
ATtiny11
ATtiny12
ATtiny15
ATtiny28
ADD
ADC
SUB
SUBI
SBC
SBCI
AND
ANDI
OR
ORI
EOR
COM
NEG
SBR
CBR
INC
DEC
TST
CLR
SER
RJMP
RCALL
RET
RETI
CPSE
CP
CPC
CPI
SBRC
SBRS
SBIC
SBIS
BRBS
BRBC
BREQ
BRNE
BRCS
BRCC
BRSH
BRLO
BRMI
BRPL
BRGE
BRLT
BRHS
BRHC
BRTS
BRTC
BRVS
BRVC
BRIE
BRID
LD
ST
MOV
LDI
IN
OUT
LPM (not in AT90S1200)
SBI
CBI
LSL
LSR
ROL
ROR
ASR
SWAP
BSET
BCLR
BST
BLD
SEC
CLC
SEN
CLN
SEZ
CLZ
SEI
CLI
SES
CLS
SEV
CLV
SET
CLT
SEH
CLH
NOP
SLEEP
WDR
Cœur classique avec jusqu'à 8K de mémoire programme AT90S2313
AT90S2323
ATtiny22
AT90S2333
AT90S2343
AT90S4414
AT90S4433
AT90S4434
AT90S8515
AT90C8534
AT90S8535
ATtiny26
ATmega8515
nouvelles instructions:
ADIW
SBIW
nouvelles instructions:
IJMP
ICALL
nouvelles instructions:
LD (now 9 modes)
LDD
LDS
ST (9 modes)
STD
STS
PUSH
POP
(rien de nouveau)
Cœur classique avec jusqu'à 128K de mémoire programme ATmega103
ATmega603
AT43USB320
AT76C711
(rien de nouveau) nouvelles instructions:
JMP
CALL
nouvelles instructions:
ELPM
(rien de nouveau)
Cœur étendu avec jusqu'à 8K de mémoire programme ATmega8
ATmega83
ATmega85
new instructions:
MUL
MULS
MULSU
FMUL
FMULS
FMULSU
(rien de nouveau) nouvelles instructions:
MOVW
LPM (3 modes)
SPM
(rien de nouveau)
Cœur étendu avec jusqu'à 128K de mémoire programme ATmega16
ATmega161
ATmega163
ATmega32
ATmega323
ATmega64
ATmega128
AT43USB355
AT94 (FPSLIC)
AT90CAN series
AT90PWM series
ATmega48
ATmega88
ATmega168
ATmega162
ATtiny13
ATtiny25
ATtiny45
ATtiny85
ATtiny2313
ATmega164
ATmega324
ATmega328
ATmega644
ATmega165
ATmega169
ATmega325
ATmega3250
ATmega645
ATmega6450
ATmega406
(rien de nouveau) (rien de nouveau) (rien de nouveau) nouvelles instructions:
BREAK
Enhanced Core with up to 4M ATmega640
ATmega1280
ATmega1281
ATmega2560
ATmega2561
(rien de nouveau) new instructions:
EIJMP
EICALL
(rien de nouveau) (rien de nouveau)
XMEGA core ATxmega series new instructions:
DES
(rien de nouveau) new instructions:
(from second revision silicon - AU,B,C parts)
XCH
LAS
LAC
LAT
(rien de nouveau)
Cœur réduit ATtiny10
ATtiny9
ATtiny5
ATtiny4
(Identique au cœur minimal, sauf pour l’ensemble des registres) (Identique au cœur classique jusqu'à 8k, sauf pour l’ensemble des registres) Identique au core classique jusqu'à 8k, avec les exceptions suivantes:
LPM (retiré)
LDD (retiré)
STD (retiré)
LD (aussi les acces à la mémoire programme)
LDS (codé différemment)
STS (codé différemment)
ensemble de registres réduit
(Identique au cœur étendu jusqu'à 128K, sauf que l’ensemble de registres est réduit)

Voir aussi[modifier | modifier le wikicode]