Sunteți pe pagina 1din 26

Universitatea Dunarea de Jos - F.A.C.I.E.

E Galati

Laborator uC&DSP

TS41a - Grupa 1
Botin Bogdan

TEMA 1

Microcontrolere si DSp-uri
Fabricantul de microntrolere: ATMEL-AVR.

1.Sa se caracterizeze familia de microcontrolere de la fabricantul stabilit din punct de


vedere:
a) hardware
b) software (mediu de programare, aplicatii)
c) domeniu de aplicabilitate
Firma Atmel produce n prezent 3 categorii de microcontroller-e i anume:
*microcontroller-e pe 8 bii:
- ATMEGA 8
- ATMEGA 16
- ATMEGA 128
- ATMEGA 162
*microcontroller-e pe 8 si 16 bii:
-ATxmega 16
-ATxmega 32
-Atmega 64
-Atmega 128
* microcontroller-e pe 32 bii:
- AT32UC3A0128
- AT32UC3A0256
- AT32UC3A0512
- AT32UC3A1128

a. caracterizare din punct de vedere hardware:


Microcontrollerele din familia AVR prezinta o organizare de tipul RISC executand o instructiune pe
ciclu. Acestea au in componena lor urmatoarele blocuri interne:
- oscillator intern
- timere
- unitate UARt
- SPI
- rezitoare pull-up
- PWM (pulse widith modulation)
- ADC
3

- comparatoare
Prezenta tuturor acestor blocuri interne determina utilizarea microcontrollerelor intr-o gama foarte
larga de aplicatii.
Consumul de energie este foarte mic, domeniul tensiunilor de alimentare este cuprins intre 1.8 si 5V.
Prezinta 6 module diferite de stand-by care asigura ca aceste micrcontrollere nu vor consuma energie decat
atunci cand este nevoie.
b. Caracterizarea din punct de vedere software (mediu de programare, aplicatii):
Instructiunile acestei familii de microcontrolere au fost proiectate pentru a reduce dimensiunea unui
program scris in limbaje precum asamblare sau C.
Controlul software al frecventei garanteaza o viteza mare de executie atunci cand este nevoie, iar in
restul timpului microcontrolerul poate trece in stand-by unde consumul de energie este minim.
Pentru dezvoltarea programelor se poate folosi orice editor text (notepad, vim, etc) recomandat fiind
totusi un ide mai puternic. IDE-ul OEM este AVR Studi, oferit de catre Atmel, si foloseste compilatorul
WinAVR.
c. Domenii de aplicabilitate
Posibilitatea programarii memoriei FLASH si a memoriei EEPROM, determina ca acestea sa aiba o
larga utilizare datorata costului mic de dezvoltare a unei aplicatii (timpul de proiectare scurt).
Utilizarea acestor microcontrolere poate reduce semnificativ timpul de dezvoltare a unei aplicatii
datorita prezentei pe acestea a unui bloc de depanare in timp real, circuitul aflandu-se pe placa ce reprezinta
aplicatia. Se poate face in timp real operatii de watch asupra unor registri,operatii de rulare pas cu pas,
operatii de oprire in breakpoint.
Microcontrollerele ATMEL i gsesc utilitatea n accesoriile audio, smartphone-uri, perifericele jocurilor
video, echipamentele medicale avansate, circuite de control i management a ncrcrii bateriilor LiIon/Polymer,n circuitele de iluminare etc. De asemenea pot utilizate cu succes n comanda display-urilor
LCD, Touchscreen i a motoarelor, n circuite de comunicatii wireless , USB i/sau Ethernet, etc.

2. Sa se aleaga un microcontroler pe 8 biti si pe baza datelor de catalog sa se


caracterizeze din punct de vedere hardware
ATmega 16 este un microcontroller CMOS de 8 bii de mic putere bazat pe arhitectura RISC
AVR imbunataita.
ATmega16 este un microcontroler RISC pe 8 bii realizat de firma Atmel. Caracteristicile principale
ale acestuia sunt:
-16KB de memorie Flash reinscriptibil pentru stocarea programelor
-1KB de memorie RAM
-512B de memorie EEPROM
-dou numrtoare/temporizatoare de 8 bii
-un numrtor/temporizator de 16 bii
-conine un convertor analog digital de 10 biti, cu intrri multiple
4

-conine un comparator analogic


-conine un modul USART pentru comunicaie serial (port serial)
-dispune de un cronometru cu oscilator intern
-ofer 32 de linii I/O organizate n patru porturi (PA, PB, PC, PD).
Ca si periferice interne ATmega16 ofera:
3 timere - doua pe 8 biti, unul pe 16 biti
interfete seriale: USART, SPI, TWI (two-wire serial interface)
convertor analog digital cu precizie de 10 biti.
4 canale PWM (pulse width modulation)
watchdog timer
RTC (real time counter)
interfata JTAG
Aceste periferice interne pot fi accesate din exterior prin intermediul porturilor, care functioneaza si
intr-un al doilea mod, ca pini de I/O catre periferice externe.

Descrierea pinilor
Portul A (PA7 .. PA0)
Port-ul A servete drept port de intrri analogice pentru Convertorul A/D.
Port-ul A serveste de asemenea i ca un port bidirecional I/O de 8 bii,n cazul n care Convertorul A/D nu
este folosit. Pinii de port pot fi conectai opional la VCC prin rezistori interni, (selectai pentru fiecare bit).
Buffer-ele de ieire ale Portului A au caracteristici de amplificare .
5

Portul B (PB7.. PB0)


Portul B este un port I/O de 8 bii bidirecional cu rezistori interni (opionali).
Buffer-ele de ieire ale Port-ului B au caracteristici de amplificare.
Port-ul B indeplinete de asemenea funcii speciale ale microcontrolerului ATmega 16
Portul C (PC7PC0)
Portul C este un port I/O de 8 bti bidirecional cu rezistori interni (opionali).
Buffer-ele de ieire ale Port-ului C au caracteristici de amplificare.
Daca interfaa JTAG (de depanare) este activat, rezistorii pinilor PC5(TDI), PC3(TMS) si PC2(TCK) vor
fi activai, chiar daca are loc o resetare.
Port-ul C indeplinete de asemenea funcii ale interfeei JTAG i alte funcii speciale ale ATmega 16.
Portul D (PD7PD0)
Portul D este un port I/O de 8 bii bidirecional cu rezistori interni conectai optional la VCC (selectai
pentru fiecare bit). Buffer-ele de output ale Port-ului D au caracteristici de amplificare.
Port-ul
D
indeplinete de asemenea funcii speciale ale ATmega 16.
Reset
Un nivel de tensiune sczut la acest pin si mai mare ca durat decat o valoare prestabilit, va genera o
iniializare.
XTAL 1: Intrare pentru amplificatorul inversor al oscilatorului;
XTAL 2: Ieire pentru amplificatorul inversor al oscilatorului.
AVCC: AVCC este pin de alimentare pentru Port-ul A si Convertorului A/D. Trebuie conectat extern
la Vcc, chiar dac ADC nu este folosit. Daca ADC este folosit , ar trebui conectat la Vcc printr-un filtru trece
-jos.
AREF :AREF este pinul de referina analogica pentru Convertorul A/D
Structura intern general a controlerului este prezentat n anexa 1:
Exista o magistral general de date la care sunt conectate mai multe module:
-unitatea aritmetic i logic (ALU)
-registrele generale
-memoria RAM i memoria EEPROM
-liniile de intrare (porturile I/O Lines) i celelalte blocuri de intrare/ieire. Aceste ultime
module sunt controlate de un set special de registre, fiecare modul avnd asociat un numr de registre
specifice.
Memoria Flash de program mpreun cu ntreg blocul de extragere a instruciunilor, decodare i
execuie comunic printr-o magistral proprie, separat de magistrala de date menionat mai sus. Acest tip de
organizare este conform principiilor unei arhitecturi Harvad i permite controlerului s execute instruciunile
foarte rapid.
6

Modul Power-down salveaza coninutul registrelor, dar blocheaza oscilatorul, dezactivnd toate
celelalte funcii al chip-ului pan la urmatoarea Intrerupere Externa sau Reset hardware. In modul Powersave, timer-ul asincron continua sa mearga, permiind user-ului sa menina o baza de timp in timp ce restul
dispozitivului este oprit.
In modul Stand-by , oscilatorul funcioneaz n timp ce restul despozitivului este oprit. Acest lucru
permite un start rapid combinat cu un consum redus de energie. In modul stand-by extins (Extended Stanby
Mode), atat oscilatorul principal cat i timer-ul asincron vor continua s funcioneze.
Memoria flash (On-chip) permite s fie reprogaramat printr-o interfa serial SPI , de catre un
programator de memorie nonvolatil convenional, sau de ctre un program de boot On-chip ce ruleaza pe
baza AVR. Programul de boot poate folosi orice interfata pentru a incarca programul de aplicaie in memoria
Flash .
Combinnd un CPU RISC de 8 bii cu un Flash In-system auto programabil pe un chip monolithic,
ATmega 16 este un microcontroler puternic ce ofera o solutie extrem de flexibil i cu un cost redus n
comparaie cu multe altele de pe piaa.
.

3. Sa se caracterizeze din punct de vedere software microcontrolerul respectiv


analizandu-se setul de instructiuni.
ATmega 16 AVR este susinut de o serie completa de instrumente de program i de dezvoltare a sistemului,
care include: compilatoare C, macroasambloare, programe debug/ simulare etc.
Pentru dezvoltarea programelor se poate folosi orice editor text (notepad++, vim, etc), recomandat
fiind programmers' notepad. Se poate utiliza deasemenea si IDE-ul AVR Studio 4 oferit de Atmel, ce
foloseste compilatorul WinAVR.

Dispune de un set de 131 instruciuni i 32 de regitri de uz general. Cele 32 de registre sunt direct
adresabile de Unitatea Logica Aritmetica (ALU), permind accesarea a doua registre independente intr-o
singura instruciune. Se obine astfel o eficiena sporita in execuie (de pana la zece ori mai rapide decat
microcontrorelerele convenionale CISC).
ALU- Unitatea Aritmetica Logica
Cea mai inalt performan a AVR ALU este aceea c lucreaz direct cu cele 32 de registre. In timpul
unui singur ciclu de ceas se efectueaza operaii aritmetice ntre registre sau ntre registre i o constanta ,
acestea sunt executate imediat. Operaiile pe care le executa unitatea ALU sunt mparite n trei mari
categorii: aritmetice, logice i funciuni de bit. Unele implementri ale arhitecturi pot efectua i multiplicri
cu sau far semn i/sau n regim de fracie. Mai multe detalii se gsesc n Setul de Instruciuni.
Registrul de stare
Registrului conine informaii despre ultima operaie aritmetica efectuat. Aceast informaie poate fi
folosit pentru a alterna de la program la executarea unei alte operaii mai prioritar. Situaia registrului este
actualizat dup fiecare execuie a unei operaii aritmetice, aa cum se specific n setul de instructiuni.
Aceasta poate duce n multe cazuri la nefolosirea concreta a fiecrei instruciuni n parte ci a unui cod mai
compact de instruciuni care efectueaz mai rapid operaia.AVR Status Register este definit ca:
8

Bitul 7-I Global Interrupt Enable (ntreruperi Globale Permise)


GIE-trebuie s fie fixat astfel ncat ntreruperile s fie permise. Controlul ntreruperilor individuale se face
dintr-un registru separat. Dac GIE este ters niciuna dintre ntreruperile individuale nu sunt permise
independent. Bitul I este ters de hard dup ce s-a ivit o ntrerupere i este corectat de RETI pentru a permite
accesul unei subsecvente antreruperi. Bitul I poate deasemenea sa fie fixat i ters de aplicaie cu ajutorul
instruciunilor SEI i CLI aa cum sunt descrise n Setul de Instruciuni
Bitul 6-T Bit Copy Storage (bitul copiere-depozitare stocare)
Instructiunile bitului de copiere BLD (Bit LoaD-bit de incrcare) i
BST (Bit Store-bit de stocare) folosete bitul T ca surs sau destinaie pentru bitul acionat. Un bit din registru
poate fi copiat n T cu ajutorul instruciunilor BST, i un bit din T poate fi copiat n registru cu ajutorul
instruciuni BLD.
Bitul 5-H Half Carry Flag (Indicator de transport la jumatate)
Acesta indic transportul la jumatate n cazul unor operaii aritmetice. Jumatate de transport este folosit n
aritmetica BCD. Pentru informaii detaliate a se vedea Setul de Instruciumi.
Bitul 4-S Sign Bit S=N V (bitul de semn)
Bitul S este mereu exclusiv sau situat ntre indicatorul negativ N i indicatorul de rezervare V. A se vedea
Setul de Instruciuni pentru informaii detaliate.
Bitul 3-V Twos Complement Overflow Flag
Indicatorul de rezervare susine operaii aritmetice.
Bitul 2-N Negative Flag (indicatorul negativ)
Indicatorul negativ indic un rezultat negativ n cadrul operaiilor aritmetice sau logice
Bitul 1-Z Zero Flag (indicatorul de zero)
Indicatorul de zero indic zero atunci cand rezultatul operaiilor logice sau aritmetice este zero.
Bitul 0- Carry Flag (indicatorul de transport)
Indicatorul de transport indic transport n cadrul operaiilor logice sau aritmetice.
Registrele de uz general
Registru fiier este optim pentru setul de instruciuni al arhitecturii AVR RISC. n scopul realizri
performanei i flexibilitai cerute, urmatoarele I/O sunt ndeplinite de registru fiier:
-8 bii actionai la intrare rezult 8 bii la intrare
-2 8 bii acionai la ieire rezult 8 bii la intrare
-28 bii actionai la ieire rezult 16 bii la intrare
-16 bii actionai la ieire rezult 16 bii la intrare.

Fig.3.2 Structura celor 32 de regitri i cadrul CPU


Majoritate instruciunilor care acioneaz pe registrul fiier au acces direct la toate registrele i marea lor
majoritate sunt instruciuni cu un singur ciclu .
Aa cum se vede in figura 3.2 fiecrui registru i se atribuie i o adresa de memorie, localizndu-l direct n
cele 32 de locaii. Dei nu exist implementat fizic ca locaie SRAM, organizarea acestei memorii d o buna
fiabilitate pentru accesul la registre, i registrele X,Y,Z pot fi setate pentru a cuta oricare registru.
Registrele X, Y, Z
Registrele R26...R31 au cteva funciuni adugat pe langa cele generale. Aceste registe au 16 bii de adres
pentru accesarea indirecta a datelor.Cele trei regisre pentru adresarea indirecta sunt regitrele X, Y, Z care
sunt descrise in figura 3.3.

Execuia n timp a instruciunilor


Aceast parte descrie n general timpul adresat executri instruciunilor. AVR CPU este condus de ceasul
CPU generat direct de la surs. Nu se folosete nici un ceas interor.
Figura 2 ne prezint n paralel o instruciune provocat i instruciunea de execuie permis de arhitectura
Harward i accesul rapid la regitrele fiier. Acesta este conceptul de baz pentru a obine mai mult de 1
MIPS /MHz i cele mai bune rezultate din punct de vedere funciuni/cost , funciuni/timp i
funciuni/unitate.

10

Fig.2 Instruciuni paralele de executie


Figura 2.1 ne arat timpul de registru. ntr-un singur ciclu de ceas o operaie ALU folosete 2 registre
pentru a executa calculul respectiv. Iar rezultatul este stocat napoi n registrul de destinaie .

Fig.2.1 Operaii ALU ntr-un singur ciclu de ceas

11

4.Pentru grupa de instructiuni de prelucrare arimetica sa se explice pe diagrama bloc


transferurile care au loc intre unitatile componente in timpul executiei acestor instructiuni.

12

13

ADD
Program counter(PC) contine adresa instructiunii (adunare) ce urmeaza a fi executata ,este transferata prin
intermediul magistralei de adrese la memoria Flash (EPROM) si prin intermediul unei magistrale bidirectionale
ajung la decodificatorul de instructiuni. Valoarea coninut de PC va fi incrementat dupa fiecare ciclu instruciune.
Instructiunea este preluata din memoria de program (EPROM). ALU va executa operatia(adunare) care a fost
indicata in memoria program cu ajutorul adresei din program counter
Descriere:
Aduna doua register fara indicatorul carry si pune rezultatul in registrul destinatie
Operation:
(i) Rd Rd + Rr
Syntax:
(i) ADD Rd,Rr

Operands:
0 d 31, 0 r 31

Program Counter:
PC PC + 1

16-bit Opcode:
0000

11rd

dddd

rrrr

Status Register (SREG) and Boolean Formulae:


I

T
-

Exemplu:
a
d
a

r1,r
2r28,

r28

; Add r2 to r1 (r1=r1+r2)
;
Add
r28
(r28=r28+r28)

to

itself

SUBB
PC contine adresa instructiunii(scadere) ce urmeaza a fi executata , este transferata prin intermediul
magistralei de adrese la memoria program (EPROM) si prin intermediul unei magistrale bidirectionale ajung la
decodificatorul de instructiuni. Valoarea coninut de PC va fi incrementat dupa fiecare ciclu instruciune.
Instrctiunea este preluata din memoria de program (EPROM). ALU va executa operatia(scadere) care a fost
indicata in memoria program cu ajutorul adresei din program counter
Descriere:
Scade dou registre i pune rezultatul n registrul destinaie Rd.
Operation:
(i) Rd Rd - Rr
14

Syntax:
(i) SUB Rd,Rr

Operands:
0 d 31, 0 r 31

Program Counter:
PC PC + 1

16-bit Opcode:
000

10r

ddd

rrrr

ADC - Add with Carry


Descriere:
Adun 2 registre cu coninutul indicatorului Carry i pune rezultatul n registrul destinaie Rd.
Operation:
(i) Rd Rd + Rr + C
Syntax:
(i) ADC Rd,Rr

Operands:
0 d 31, 0 r 31

Program Counter:
PC PC + 1

16-bit Opcode:
0001

11rd

dddd

rrrr

Status Register (SREG) Boolean Formulae:


I

T
-

ADIW - Add Immediate to Word


Descriere:
Adun o valoare imediata (specificat n instrunciune) (0-63) la o pereche de registre i pune
rezultatul n perechea de registre..
Operation:
(i) Rd+1:Rd Rd+1:Rd + K
Syntax:
(i) ADIW Rd,K

Operands:
Program Counter:
d {24,26,28,30}, 0 K 63 PC PC + 1

16-bit Opcode:
1001

0110

KKd

KKK

SUB - Subtract without Carry


Descriere:
Scade dou registre i pune rezultatul n registrul destinaie Rd.
Operation:
(i) Rd Rd - Rr
Syntax:
(i) SUB Rd,Rr

Operands:
0 d 31, 0 r 31

Program Counter:
PC PC + 1
15

16-bit Opcode:
000

10r

ddd

rrrr

SUBI - Subtract Immediate


Descriere:
Scade un registru i o constat i plaseaz rezultatul n registrul destinaie Rd.
Operation:
(i) Rd Rd - K
Syntax:
(i) SUBI Rd,K

Operands:
16 d 31, 0 K 255

16-bit Opcode:
010
KK
ddd

Program Counter:
PC PC + 1

KK

SBC - Subtract with Carry


Descriere:
Scade 2 registre i pe Carry i pune rezultatul n registrul destinaie Rd.
Operation:
(i) Rd Rd - Rr - C
Syntax:
(i) SBC Rd,Rr

Operands:
0 d 31, 0 r 31

Program Counter:
PC PC + 1

16-bit Opcode:
000

10r

ddd

rrrr

SBCI - Subtract Immediate with Carry


Descriere:
Scade o constant i pe Carry din registru i pune rezultatul n registrul destinaie Rd.
Operation:
(i) Rd Rd - K - C
Syntax:
Operands:
Program Counter:
(i) SBCI Rd,K

16 d 31, 0 K 255

PC PC + 1

16

16-bit Opcode:
010

KK

ddd

KK

SBIW - Subtract Immediate from Word


Descriere:
Scade o valoare imediat din intervalul 0-63 (specificat n instruciune) dintr-o pereche de registre i pune
rezultatul n registrul pereche.
Operation:
(i) Rd+1:Rd Rd+1:Rd - K
Syntax:
(i) SBIW Rd,K

Operands:
Program Counter:
d {24,26,28,30}, 0 K 63 PC PC + 1

16-bit Opcode:
100

011

KK

KK

AND - Logical AND


Descriere:
Face I logic ntre coninutul registrului Rd i coninutul registrului Rr i pune rezultatul n registrul
final Rd.
Operation:
(i) Rd Rd Rr
Syntax:
(i) AND Rd,Rr

Operands:
0 d 31, 0 r 31

Program Counter:
PC PC + 1
17

16-bit Opcode:
0010

00rd

dddd

rrrr

ANDI - Logical AND with Immediate


Descriere:
Face I logic ntre coninutul registrului Rd i o constant i pune rezultatul n registrul final Rd.
Operation:
(i) Rd Rd K
Syntax:
(i) ANDI Rd,K

Operands:
16 d 31, 0 K 255

16-bit Opcode:
0111

KKK

dddd

KKK

Anexa 1

18

Program Counter:
PC PC + 1

19

ANEXA 2

32. Instruction Set Summary


Mnemonics

Operands

Description

ADD

Rd, Rr

Add without Carry

Operation

Flags

#Clocks

Arithmetic and Logic Instructions

ADC

Rd, Rr
Rd, K

Add Immediate to Word

SUB

Rd, Rr

Subtract without Carry

Rd, K
Rd, Rr

Subtract with Carry

SBCI

Rd, K

Subtract Immediate with Carry

Rd, K
Rd, Rr

Logical AND

ANDI

Rd, K

Logical AND with Immediate

ORI

Rd, Rr
Rd, K
Rd, Rr

Exclusive OR

Rd

Ones Complement

Rd,K

Set Bit(s) in Register

CBR

Rd,K

Clear Bit(s) in Register

Rd
Rd

Decrement

TST

Rd

Test for Zero or Minus

Rd
Rd

Set Register

MUL

Rd,Rr

Multiply Unsigned

MULSU

Rd,Rr
Rd,Rr

Rd + 1:Rd + K

Rd

Rd - Rr

Rd

Rd - K

Rd

Rd - Rr - C

Rd

Rd - K - C

Rd + 1:Rd

Rd + 1:Rd - K

Rd

Rd Rr

Rd

Rd K

Rd

Rd v Rr

Rd

Rd v K

Rd

Rd Rr

Rd

$FF - Rd

Rd

$00 - Rd

Rd

Rd v K

Rd

Rd ($FFh - K)

Rd

Rd + 1

Rd

Rd - 1

Rd

Rd Rd

Rd

Rd Rd

Rd

$FF

R1:R0

Rd x Rr (UU)

R1:R0

Rd x Rr (SS)

R1:R0

Rd x Rr (SU)

R1:R0

Rd x Rr<<1 (UU)

R1:R0

Rd x Rr<<1 (SS)

R1:R0

Rd x Rr<<1 (SU)

if (H = 0) then R15:R0
else if (H = 1) then R15:R0

Encrypt(R15:R0, K)
Decrypt(R15:R0, K)

PC

PC + k + 1

Clear Register

SER

MULS

Increment

DEC

CLR

Rd

Twos Complement

SBR

INC

Rd + Rr + C

Logical OR with Immediate

COM

Rd

Logical OR

EOR

NEG

Rd

Subtract Immediate from Word

AND

OR

Rd + Rr

Subtract Immediate

SBC

SBIW

Add with Carry

ADIW

SUBI

Rd

Multiply Signed
Multiply Signed with Unsigned

FMUL

Rd,Rr

Fractional Multiply Unsigned

FMULS

Rd,Rr

Fractional Multiply Signed

FMULSU

Rd,Rr

Fractional Multiply Signed with Unsigned

DES

Data Encryption

Z,C,N,V,S,H

Z,C,N,V,S,H

Z,C,N,V,S

Z,C,N,V,S,H

Z,C,N,V,S,H

Z,C,N,V,S,H

Z,C,N,V,S,H

Z,C,N,V,S

Z,N,V,S

Z,N,V,S

Z,N,V,S

Z,N,V,S

Z,N,V,S

Z,C,N,V,S

Z,C,N,V,S,H

Z,N,V,S

Z,N,V,S

Z,N,V,S

Z,N,V,S

Z,N,V,S

Z,N,V,S

None

Z,C

Z,C

Z,C

Z,C

Z,C

Z,C

2
1/2

Branch Instructions
RJMP

Relative Jump

None

IJMP

Indirect Jump to (Z)

PC(15:0)
PC(21:16)

Z,
0

None

EIJMP

Extended Indirect Jump to (Z)

PC(15:0)
PC(21:16)

Z,
EIND

None

None

JMP

PC

Jump

20

RCALL

Relative Call Subroutine

PC

PC + k + 1

None

2 / 3(1)

ICALL

Indirect Call to (Z)

PC(15:0)
PC(21:16)

Z,
0

None

2/3

EICALL

Extended Indirect Call to (Z)

PC(15:0)
PC(21:16)

Z,
EIND

None

3(1)

21

(1)

Mnemonics

Operands

Description

CALL

call Subroutine

RET

Rd,Rr

Compare, Skip if Equal

CP

Rd,Rr

Compare

CPC

Rd,Rr

Compare with Carry

CPI

Rd,K

Compare with Immediate

Rr, b
Rr, b

Skip if Bit in Register Set

SBIC

A, b

Skip if Bit in I/O Register Cleared

BRBS

A, b
s, k

BRBC

s, k

Branch if Status Flag Cleared

BREQ

Branch if Equal

BRNE

k
k

Branch if Carry Set

BRCC

Branch if Carry Cleared

k
k

Branch if Lower

BRMI

Branch if Minus

BRGE

k
k

STACK

if (Rd = Rr) PC

PC + 2 or 3

Branch if Less Than, Signed

Branch if Half Carry Flag Set

BRTS

Branch if T Flag Set

BRTC

Branch if T Flag Cleared

BRVC

Branch if Overflow Flag is Cleared

BRIE

Branch if Interrupt Enabled

BRID

Branch if Interrupt Disabled

MOV

Rd, Rr

Copy Register

3 / 4(1)

None

4/5

4 / 5(1)

None

1/2/3
1

Rd - Rr - C

Z,C,N,V,S,H

Rd - K

Z,C,N,V,S,H

PC + 2 or 3

If (I/O(A,b) =1) PC

PC + 2 or 3

if (SREG(s) = 1) then PC

PC + k + 1

if (SREG(s) = 0) then PC

PC + k + 1

if (Z = 1) then PC

PC + k + 1

if (Z = 0) then PC

PC + k + 1

if (C = 1) then PC

PC + k + 1

if (C = 0) then PC

PC + k + 1

if (C = 0) then PC

PC + k + 1

if (C = 1) then PC

PC + k + 1

if (N = 1) then PC

PC + k + 1

if (N = 0) then PC

PC + k + 1

if (N V= 0) then PC

PC + k + 1

if (N V= 1) then PC

PC + k + 1

if (H = 1) then PC

PC + k + 1

if (H = 0) then PC

PC + k + 1

if (T = 1) then PC

PC + k + 1

if (T = 0) then PC

PC + k + 1

if (V = 1) then PC

PC + k + 1

if (V = 0) then PC

PC + k + 1

if (I = 1) then PC

PC + k + 1

if (I = 0) then PC

PC + k + 1

Rd

Rr

Rd+1:Rd

Rr+1:Rr

Branch if Overflow Flag is Set

#Clocks

None

Z,C,N,V,S,H

if (I/O(A,b) = 0) PC

Branch if Half Carry Flag Cleared

Flags

Rd - Rr

PC + 2 or 3

Branch if Greater or Equal, Signed

BRHS

BRVS

Branch if Plus

BRLT

BRHC

PC

if (Rr(b) = 1) PC

Branch if Same or Higher

BRLO

BRPL

STACK

PC + 2 or 3

Branch if Not Equal

BRCS

BRSH

Skip if Bit in I/O Register Set


Branch if Status Flag Set

if (Rr(b) = 0) PC

Skip if Bit in Register Cleared

SBRS

PC

Interrupt Return

CPSE

SBIS

PC

Subroutine Return

RETI

SBRC

Operation

(1)

None

1/2/3

None

1/2/3

None

2/3/4

None

2/3/4

None

1/2

None

1/2

None

1/2

None

1/2

None

1/2

None

1/2

None

1/2

None

1/2

None

1/2

None

1/2

None

1/2

None

1/2

None

1/2

None

1/2

None

1/2

None

1/2

None

1/2

None

1/2

None

1/2

None

1/2

None

None

Data Transfer Instructions

MOVW
LDI

Rd, Rr
Rd, K

Copy Register Pair

Rd

Load Immediate

Rd

(k)

Rd

(X)

None

None

(1)(2)

None

1(1)(2)

LDS

Rd, k

Load Direct from data space

LD

Rd, X

Load Indirect

LD

Rd, X+

Load Indirect and Post-Increment

Rd
X

(X)
X+1

None

1(1)(2)

LD

Rd, -X

Load Indirect and Pre-Decrement

X X - 1,
Rd (X)

X-1
(X)

None

LD

Rd, Y

Load Indirect

Rd (Y)

(Y)

None

1(1)(2)

22

(1)(2)

LD

Rd, Y+

Load Indirect and Post-Increment

Rd
Y

23

(Y)
Y+1

None

1(1)(2)

Mnemonics

Operands

Description

LD

Rd, -Y

Load Indirect and Pre-Decrement

LDD

Rd, Y+q

Load Indirect with Displacement

Operation
Y
Rd

Y-1
(Y)

Rd

(Y + q)

Rd

(Z)

Flags

#Clocks

None

2(1)(2)

None

None

1(1)(2)

(1)(2)

LD

Rd, Z

Load Indirect

LD

Rd, Z+

Load Indirect and Post-Increment

Rd
Z

(Z),
Z+1

None

1(1)(2)

LD

Rd, -Z

Load Indirect and Pre-Decrement

Z
Rd

Z
(Z)- 1,

None

LDD

Rd, Z+q

Load Indirect with Displacement

Rd

(Z + q)

None

2(1)(2)

(k)

Rd

None

2(1)

(X)

Rr

None

STS

k, Rr

Store Direct to Data Space

(1)(2)

ST

X, Rr

Store Indirect

ST

X+, Rr

Store Indirect and Post-Increment

(X)
X

Rr,
X+1

None

1(1)

ST

-X, Rr

Store Indirect and Pre-Decrement

X
(X)

X
Rr - 1,

None

2(1)

ST

Y, Rr

Store Indirect

(Y)

Rr

None

ST

Y+, Rr

Store Indirect and Post-Increment

(Y)
Y

Rr,
Y+1

None

1(1)

ST

-Y, Rr

Store Indirect and Pre-Decrement

Y
(Y)

Y
Rr - 1,

None

2(1)

STD

Y+q, Rr

Store Indirect with Displacement

(Y + q)

Rr

None

2(1)

(Z)

Rr

None

(Z)
Z

Rr
Z+1

None

1(1)

Z-1

None

2(1)

(Z + q)

Rr

None

R0

(Z)

Rd

(Z)

Rd
Z

(Z),
Z+1

R0

(RAMPZ:Z)

Rd

(RAMPZ:Z)

Rd
Z

(RAMPZ:Z),
Z
+1

(RAMPZ:Z)

R1:R0

(RAMPZ:Z)Z

R1:R0,
Z+2

Rd

I/O(A)

I/O(A)

Rr

STACK

Rr

Rd

STACK

Rd(n+1)
Rd(0)
C

Rd(n),
0,
Rd(7)

Z,C,N,V,H

Rd(n)
Rd(7)
C

Rd(n+1),
0,
Rd(0)

Z,C,N,V

ST

Z, Rr

Store Indirect

ST

Z+, Rr

Store Indirect and Post-Increment

ST

-Z, Rr

Store Indirect and Pre-Decrement

STD

Z+q,Rr

LPM

Store Indirect with Displacement


Load Program Memory

LPM

Rd, Z

Load Program Memory

LPM

Rd, Z+

Load Program Memory and Post-Increment

ELPM

Extended Load Program Memory

ELPM

Rd, Z

Extended Load Program Memory

ELPM

Rd, Z+

Extended Load Program Memory and PostIncrement

SPM

Store Program Memory

SPM

Z+

Store Program Memory and Post-Increment


by 2

IN

Rd, A

In From I/O Location

OUT

A, Rr

Out To I/O Location

PUSH

Rr

Push Register on Stack

POP

Rd

Pop Register from Stack

LSL

Rd

Logical Shift Left

LSR

Rd

Logical Shift Right

(1)

(1)

(1)

(1)

None

None

None

None

None

None

None

None

None

None

None

1(1)

None

(1)

Bit and Bit-test Instructions

24

Mnemonics

Operands

Description

ROL

Rd

Rotate Left Through Carry

ROR

Rd

Rotate Right Through Carry

ASR

Rd

Arithmetic Shift Right

SWAP
BSET

Rd
s

Swap Nibbles
Flag Set

BCLR

Flag Clear

SBI

A, b

Set Bit in I/O Register

CBI
BST
BLD
SEC
CLC

A, b
Rr, b
Rd, b

Clear Bit in I/O Register

Bit load from T to Register


Set Carry
Clear Carry
Set Negative Flag

CLN

Clear Negative Flag


Set Zero Flag

CLZ

Clear Zero Flag

SEI

Global Interrupt Enable

CLI

Global Interrupt Disable

SES

Set Signed Test Flag

CLS

Clear Signed Test Flag

SEV
CLV

Set Twos Complement Overflow


Clear Twos Complement Overflow

SET

Set T in SREG

CLT

Clear T in SREG

SEH
CLH

Rd(0)
Rd(n+1)
C

Rd(7)
Rd(n)
C

Set Half Carry Flag in SREG


Clear Half Carry Flag in SREG

Flags
C,
Rd(n),
Rd(7)
C,
Rd(n+1),
Rd(0)

Rd(n)

Rd(n+1), n=0..6

Rd(3..0)

Rd(7..4)

SREG(s)

SREG(s)

I/O(A, b)

I/O(A, b)

Bit Store from Register to T

SEN

SEZ

Operation

Rr(b)

Rd(b)

#Clocks

Z,C,N,V,H

Z,C,N,V

Z,C,N,V

None

SREG(s)

SREG(s)

None

None

None

None

MCU Control Instructions


BREAK

Break

(See specific descr. for BREAK)

NOP

No Operation

None

SLEEP

Sleep

(see specific descr. for Sleep)

None

WDR

Watchdog Reset

(see specific descr. for WDR)

None

25

Bibliografie:
http://support.atmel.no/knowledgebase/avrstudiohelp/mergedProjects/AVRASM/Html/ATmega
32_ATmega16_instructions.html
www.atmel.com/atmel/acrobat/doc2466.pdf
http://datasheetreference.com/avr-atmega16-datasheet.html
http://en.wikipedia.org/wiki/Atmel_AVR

26

S-ar putea să vă placă și