Sunteți pe pagina 1din 21

MICROCONTROLERE AVR ATMEL PE 8 BII

Caracteristici generale

Microcontrolerul AVR are la baz un procesor RISC cu o arhitectur Harvard (adic unitatea
central de procesare are memorie de program i memorie de date separate). Pe baza acestui nucleu
RISC firma Atmel a dezvoltat mai multe familii de microcontrolere, cu diferite structuri de memorie i
de interfee I/O, destinate diferitelor clase de aplicaii.
Aceste microcontrolere sunt destinate aplicaiilor simple cum ar fi: controlul motoarelor,
controlul fluxului de informaie pe portul USB, controlul accesului de la distan (Remote Access
Control), .a..

Familia de microcontrolere AVR pe 8 bii prezint urmtoarele caracteristici:

1. Are memorie FLASH programabil integrat, folosit ca memorie de program. Toate


procesoarele AVR au memorie de program integrat. Asta nseamn c nu ai nevoie de memorii
EPROM, EEPROM sau ROM externe pentru a stoca codul programelor. Programarea se poate
face n dou moduri: serial i paralel.
2. Are 32 de registre de lucru de 8 bii fiecare (acest lucru este specific procesoarelor
RISC). Numrul mare de registre de lucru permite stocarea variabilelor n interiorul
procesorului, n loc s fie stocate n memorie, lucru care necesit un timp mai lung pentru
accesare. n acest fel crete viteza de execuie a programului (deci va rula mai repede).
3. Are memorie de date integrat de tip EEPROM (Electrically Erasable Programmable
Read-Only Memory) i memorie RAM integrat. Unitatea central de prelucrare are arhitectur
Harvard, iar memoriile de tip RAM i EEPROM ale microcontrolerului sunt memorii de date,
fiind folosite pentru a stoca date/variabile (RAM), respectiv constante (EEPROM).
4. Are frecvena de lucru care poate fi controlat prin software de la 0 la 16 MHz. Cele mai
multe instruciuni sunt executate ntr-un singur ciclu de tact, ceea ce duce la mbuntirea
performanei de 10 ori fa de procesoarele convenionale care opereaz la aceeai frecven (de
exemplu: Intel 8051).
5. Realizeaz funcia de RESET fr decuplarea circuitului.
6. Are un timer programabil ncorporat cu circuit de prescalare separat, care este folosit
pentru sincronizarea aplicaiilor.
7. Surse interne i externe de ntrerupere.
8. Are un timer watchdog cu oscilator independent, care este folosit pentru recuperarea
informaiilor n caz de apariia unei erori software, dar mai poate fi folosit i n alte aplicaii.
9. Are 6 moduri de operare pentru economisirea energiei. Poate lucra n modurile de
operare SLEEP i POWER DOWN, moduri ce economisesc energie, atunci cnd procesorul nu
lucreaz.
10. Multe cipuri au oscilator integrat RC, care micoreaz i mai mult numrul
componentelor n cazul microcontrolerelor care-l conin.
11. Sunt prevzute cu o gam larg de dispozitive de I/O i de periferice ncorporate.
12. Beneficiaz de existena unui set unitar de instrumente software pentru dezvoltarea
aplicaiilor.
13. Are o compatibilitate mare, pornind de la procesoare mici cu 8 pini i ajungnd la
procesoare cu 68 de pini.

Microcontrolerele din familia AVR prezint o organizare de tip RISC din punctul de vedere al
execuiei unei instruciuni pe ciclu main. Prezena unor blocuri interne precum: oscilator intern,
timere, unitate UART (Universal Asynchronous Receiver/Transmitter), interfa SPI (Serial Peripheral
Interface), rezistoare pull-up, PWM (Pulse Width Modulation), convertoare analog-digitale,
comparatoare analogice determin utilizarea acestor microcontrolere ntr-o gam foarte larg de
aplicaii.
1
Specific arhitecturii Harvard, microcontrolerele AVR folosesc spaii de memorie i magistrale de
acces separate pentru coduri i pentru date. Memoria de program care este de tip FLASH integrat,
poate fi programat fr scoaterea din sistem, ceea ce permie efectuarea rapid de upgrade-uri n
programe.
Instruciunile acestei familii de microcontrolere au fost proiectate pentru a reduce dimensiunea
unui program scris n limbaj C sau n limbaj de asamblare. Posibilitatea programrii memoriei FLASH
i a memoriei EEPROM, determin ca aceste microcontrolere s aib o larg utilizare datorat costului
mic de dezvoltare a unei aplicaii (au timpul de proiectare scurt).
Aceste microcontrolere au consum redus de energie. Domeniul tensiunilor de alimentare este
cuprins ntre 1,8V i 5V. Prezint 6 moduri diferite de operare cu consum redus de energie, ceea ce ne
asigur c aceste microcontrolere nu vor consuma energie dect atunci cnd este nevoie.
Controlul software al frecvenei de tact garanteaz o vitez maxim de execuie atunci cnd este
nevoie, iar n restul timpului microcontrolerul poate trece n modul STANDBY, unde consumul de
energie este minim. Utilizarea acestor microcontrolere poate reduce semnificativ timpul de dezvoltare a
unei aplicaii datorit prezenei unui bloc de depanare n timp real, circuitul aflndu-se chiar pe plac.
Printre cele mai utilizate microcontrolere de uz general putem aminti: ATMEGA 8, ATMEGA
16, ATMEGA 128, ATMEGA 162, etc..
Microcontrolerele din familia AVR pot fi att microcontrolere de uz general, ct i
microcontrolere cu funcii specializate, mprindu-se n urmtoarele categorii:
1. Familia TINY AVR cuprinde microcontrolere destinate unor aplicaii simple, cu 1 8 KB
memorie de program.
2. Familia MEGA AVR cu un set dezvoltat de instryciuni i cu 4 256 KB memorie de
program.
3. Familia XMEGA AVR destinat unor aplicaii complexe. Acestea au uniti DMA
(Direct Access Memory), module pentru criptare, .a. i folosesc un spaiu de memorie de
program de 16 384 KB.
4. Microcontrolere AVR destinate unor aplicaii specifice, care se mpart n mai multe
categorii:
4.1. LIGTHING AVR: microcontrolere ce conin un procesor de semnal, fiind special
conceput pentru controlul motoarelor de curent continuu.
4.2. LCD AVR: microcontrolere ce conin un controler pentru adresarea dispozitivelor LCD
4.3. CAN AVR: microcontrolere ce conin o interfa CAN implementat hardware.

Microcontrolerele din familia AVR de 8 bii au un set de 131 instruciuni i 32 de registre de uz general.
Cele 32 de registre sunt direct adresabile de unitatea aritmetic i logic (UAL), permind accesarea a
dou registre independente ntr-o singur instruciune. Astfel se obine o eficien sporit n execuie,
fiind de pn la zece ori mai rapide dect microcontrolerele convenionale de tip CISC.

Microcontrolerul ATMEGA 16

Arhitectura AVR (firma ATMEL)


ATMEGA 16 este un microcontroler realizat de firma Atmel, avnd o tehnologie CMOS de 8
bii, de mic putere i o arhitectur RISC AVR mbuntit.
Caracteristicile principale ale acestui microcontroler sunt:
- 16 KB de memorie FLASH reinscriptibil pentru stocarea programelor;
- 1 KB de memorie RAM;
- 512 B de memorie EEPROM;
- dou numrtoare/temporizatoare de 8 bii;
- un numrtor/temporizator de 16 bii;
- un convertor analog digital de 10 bii, cu 8 intrri (intrri multiple);
- un comparator analogic;
- 4 canale PWM;
- conine 3 interfee pentru comunicaie: un modul USART pentru comunicaie serial (port serial),
interfa serial TWI i interfa serial SPI;

2
- un cronometru cu oscilator intern;
- ofer 32 de linii I/O organizate n patru porturi (PA, PB, PC, PD) cu 8 bii fiecare;
- are o magistral general de date la care sunt conectate mai multe module i anume: unitatea
aritmetic i logic (UAL), registrele generale, memoria RAM i memoria EEPROM, liniile de
intrare (adic porturile) 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, de decodare
i de execuie comunic printr-o magistral proprie, separat de magistrala de date menionat mai
sus. Acest tip de organizare este conform principiilor unei arhitecturi Harvard i permite
microcontrolerului s execute instruciunile foarte rapid.
n modul POWER DOWN se salveaz coninutul registrelor, dar se blocheaz oscilatorul,
dezactivndu-se toate celelalte funcii ale chip-ului pn la urmtoarea ntrerupere extern sau la
urmtorul RESET hardware. n modul POWER SAVE, timer-ul asincron continu s mearg n timp ce
restul dispozitivelor sunt oprite. n modul STANDBY, oscilatorul funcioneaz, n timp ce restul
despozitivului este oprit. Acest lucru permite un start foarte rapid combinat cu un consum redus de
energie, iar n modul STANDBY EXTINS (Extended Standby Mode), att oscilatorul principal ct i
timer-ul asincron continu s funcioneze.
ATMEGA 16 AVR este susinut de o serie complet de instrumente de program i de
dezvoltare a sistemului, care include: compilatoare C, macroasambloare, programe de debbug/simulare,
.a..

Descrierea pinilor la Microcontrolerul ATMEGA 16

Vcc Sursa de curent


GND Masa

Port A (PA7 .. PA0)


Portul A servete drept port de intrri analogice pentru convertorul A/D. Mai poate fi folosit, 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 sursa de curent Vcc prin rezistori interni (selectai pentru fiecare
bit). Buffer-ele de ieire ale portului A au i caracteristici de amplificare .

Port B (PB7.. PB0)


Portul B este un port I/O de 8 bii bidirecional cu rezistori interni (opionali), dar poate ndeplini i
functii speciale ale microcontrolerului ATMEGA 16. Buffer-ele de ieire ale portului B au i ele
caracteristici de amplificare.

3
Port C (PC7PC0)
Portul C este un port I/O de 8 bii bidirecional cu rezistori interni (opionali), poate ndeplini i functii
ale interfeei JTAG (de depanare), ct i alte funcii speciale ale microcontrolerului ATMEGA 16.
Buffer-ele de ieire ale portului C au caracteristici de amplificare. Dac interfaa JTAG (de depanare)
este activat, rezistorii pinilor PC5(TDI), PC3(TMS) i PC2(TCK) vor fi activai, chiar dac are loc o
resetare.

Port D (PD7PD0)
Portul D este un port I/O de 8 bii bidirecional cu rezistori interni conectai opional la sursa de curent
Vcc (selectai pentru fiecare bit), dar poate ndeplini i functii speciale ale microcontrolerului
ATMEGA 16. Buffer-ele de ieire ale p ortului D au caracteristici de amplificare.

RESET - Un nivel sczut la acest pin mai mare ca durat dect o valoare prestabilit, va genera o
iniializare.
XTAL 1 - reprezint intrare pentru amplificatorul inversor al oscilatorului.
XTAL 2 - reprezint ieire pentru amplificatorul inversor al oscilatorului.

AVCC - este pinul de alimentare pentru portul A i convertorul A/D. Trebuie conectat extern la Vcc,
chiar dac convertorul analog-digital nu este folosit. Dac convertorul analog-digital este folosit, ar
trebui conectat la sursa de curent Vcc printr-un filtru trece-jos.

AREF - este pinul de referin analogic pentru convertorul A/D.

Unitatea central de prelucrare pentru AVR

Funcia principal a nucleului unitii centrale de prelucrare (UCP) este aceea de a asigura
execuia corect a programului. Din acest motiv, nucleul UCP este capabil s acceseze memoriile, s
execute calcule, s controleze perifericele i s prelucreze ntreruperile.

Figura 1 Schema bloc a nucleului UCP la microcontrolere AVR

4
Pentru a maximiza performana, AVR folosete o arhitectur Harvard cu memorii i magistrale
separate pentru program i date. Instruciunile din memoria programului sunt executate ntr-un singur
nivel n timp ce o instruciune este executat i urmtoarea este adus de la memoria de program. Acest
concept permite executarea instruciunilor la fiecare ciclu de ceas. Memoria de program este o memorie
de tip FLASH reprogramabil.
Registrele la AVR sunt n numr de 328 bii fiecare, scopul acestor microcontrolere fiind acela
de a accesa registrele ntr-un singur ciclu de ceas. Acest singur timp de acces se datoreaz unitii
aritmetice i logice (UAL=Unitatea Aritmetic i Logic). ntr-o unitate aritmetic i logic operaia are
loc astfel: operanzii sunt scoi din registru, se efectueaz operaia i rezultatul este introdus n regitri,
toate acestea fiind executate ntr-un singur ciclu de ceas. ase din cele 32 de registre pot fi folosite ca
trei registre de 16 bii cu acces indirect la informaii, permind astfel calcularea eficient a adresei. Una
dintre aceste adrese poate fi folosit pentru a cuta tabele n memoria de program.
Unitatea aritmetic i logic efectueaz (suport) operaii aritmetice i logice ntre registre sau
ntre o constant i un registru. Dup efectuarea unei operaii aritmetice registrul afieaz rezultatul
operaiei.
Programul furnizeaz salturi condiionate, necondiionate i apelri de instruciuni capabile s
acceseze tot spaiul de adres. Majoritatea instruciunilor AVR sunt formate dintr-un cuvnt de16 bii.
Spaiul memoriei de program (FLASH) este mprit n dou seciuni, seciunea BOOT i
seciunea de aplicare a programelor. Seciunea BOOT are bii speciali pentru protecia la scriere i
citire/scriere. De exemplu i nstruciunea SPM cu ajutorul creia se scrie n memoria FLASH
aplicaii trebuie s fie n seciunea BOOT.
n timpul ntreruperilor sau a apelrii subrutinelor, adresa de ntoarcere este coninut n stiv.
Stiva este efectiv alocat n informaiile generale SRAM i n consecin mrimea ei este limitat doar
de mrimea total a SRAM i de uzura ei. Toi utilizatorii de program trebuie s iniializeze
indicatorul de stiv SP (Stack Pointer) nainte ca subrutina sau ntreruperea s fie executat. SP se poate
citi/scrie n spaiul de I/O. Informaiile din SRAM pot fi accesate cu uurin prin cele cinci moduri
diferite de adresare suportate de arhitectura AVR.
Spaiile de memorie n arhitectura AVR sunt liniare i normale.
Modulele ntreruperilor au registrele de control n spaiul I/O i n Registrul STATUS se afl
bitul de ntreupere global. Toate ntreruperile au prioritate n funcie de locul ocupat n tabelul de
vectori de ntrerupere. Cu ct este mai jos situat n tabel vectorul de ntrerupere cu att acea ntrerupere
are prioritate mai mare. Prioritatea mai mare o are ntreruperea cu vectorul cel mai slab plasat n tabel.
Spaiul de memorie I/O conine 64 de adrese pentru funciuni periferice ale UCP precum:
controlul registrelor, indicatorul SPI sau alte funcii de I/O. Memoria I/O poate fi accesat direct sau
indirect.

Execuia n timp a instruciunilor


Aceast parte descrie n general timpul necesar executrii instructiunilor. UCP a MC
AVR este controlat de ceasul UCP generat direct de la surs. Nu se folosete nici un ceas interior.
Figura 6 ne prezint pipeline-ul de execuie al unei instruciuni permis n arhitectura Harvard
i accesul rapid la fiierul de registre. 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.

5
Figura 6 - Instruciuni paralele de execuie

Figura 7 ne arat timpul de lucru cu registrele. ntr-un singur ciclu de ceas o operaie a UAL
folosete 2 registre pentru a executa calculul respectiv, iar rezultatul este stocat napoi n registrul de
destinaie.

Figura 7 - Operaii UAL ntr-un singur ciclu de ceas

Sistemul de ntreruperi la MC AVR

ntreruperile sunt un mecanism de control al fluxului care este implementat n aproape toate
microcontrolerele. n sistemele cu procesor care interacioneaz cu alte componente, multe lucruri se
ntmpl asincron, de exemplu, utilizatorul poate apsa un buton pentru face o aciune, n timp ce pe
portul serial urmeaz s soseasc un octet. Ar fi imposibil pentru procesor s poat urmri toate
evenimentele doar prin interogarea acestor dispozitive. De aceea, ar fi mai bine dac aceste dispozitive
i-ar putea anuna sosirea unei date. Asta este ceea ce face mecanismul de ntreruperi. Dispozitivele
periferice pot ntrerupe execuia programului principal, i procesorul se oprete din execuia
programului pentru a examina sursa ntreruperii i pentru a executa task-urile necesare. Dup ce aceste
task-uri au fost finalizate, execuia programului ntrerupt este reluat. ntreruperile sunt implementate ca
subrutine de program.
MC AVR are o structur de ntreruperi bogat. Aproape toate dispozitivele periferice au fost
dotate cu capaciti de ntrerupere, de aceea programul principal nu trebuie s verifice periodic aceste
dispozitive.
O secven de evenimente care se deruleaz cnd apare o ntrerupere este urmtoarea:
1. Dispozitivul periferic ntrerupe procesorul
2. Executia instruciunii curente este finalizat
3. Adresa urmtoarei instruciuni este memorat n stiv (stiva poate fi hardware sau
software)
4. Adresa ISR (Interrupt Subroutine) este ncrcat n program.
5. Procesorul execut ISR-ul.
6. Terminarea execuiei ISR este indicat de instruciunea RETI (Return from Interrupt)
7. Procesorul reia execuia programului normal de la valoarea memorat n stiv.
Deoarece ntreruperile pot apare n orice moment, starea procesorului trebuie salvat pentru ca
execuia normal a programului s poat fi reluat dup ce ISR este finalizat. Starea n care este
procesorul se afl n registrul SREG. Instruciunea ISR trebuie s salveze registrul SREG nainte de a
executa orice alt operaie i, nainte de a returna controlul ctre programul principal, SREG trebuie
restaurat. Aceast operaie poate fi fcut n dou moduri:
1. SREG este copiat ntr-un alt registru, de exemplu R1, care nu poate fi folosit pentru orice
alta operaie, i nainte ca ISR s execute instruciunea RETI, R1 este copiat napoi n SREG.
2. SREG este salvat n stiv (folosind instruciunea PUSH SREG) i nainte de execuia
instruciunii RETI, SREG este copiat napoi din stiv (folosind instruciunea POP SREG).
Aceast metod este posibil doar pentru procesoarele care au stiv software.
Microcontrolerul AT90S1200, de exemplu, nu poate folosi aceasta metoda pentru salvarea
SREG.
6
n mod normal, dup ce a intervenit o ntrerupere i a fost executat prin adresa corespunztoare
ISR, ntreruperile globale sunt dezactivate automat (echivalent cu execuia instruciunii CLI); oricum,
este posibil s se activeze ntreruperile n timp ce un ISR este executat, executnd instruciunea SEI n
ISR. Dac o alt ntrerupere apare n timp ce un ISR este deja n execuie, atunci aceasta este acceptat
prin ntreruperea primului ISR.
Prioritatea ntreruperilor este stabilit de ordinea n care sunt memorate n tabelul de ntreruperi.
Vectorul de ntreruperi de la o adres joas din memorie are prioritate mare. Prioritatea ntreruperilor
este folosit pentru a decide care ntrerupere este servit prima, dac mai multe ntreruperi sunt active n
acelai moment de timp.
Un factor important de luat n seam cnd sunt folosite ntreruperile este ct de repede poate
rspunde un procesor la o ntrerupere. Aceasta depinde de arhitectura procesorului. Pentru
microcontrolerele AVR, rspunsul la ntreruperi se face n minim 4 cicli dup ce flag-ul de ntreruperi a
fost setat, iar rutina pentru ntreruperi excutat. n timpul celor 4 cicli, Program Counter (este pe 2
octei) este introdus n stiv, i Stack Pointer este decrementat cu 2.
MC AVR furnizeaz mai multe tipuri de ntreruperi. Aceste ntreruperi i vectorul de resetare au
cte un vector de program fiecare aflat n spaiul memoriei de program. Tuturor ntreruperilor le sunt
alocate individual bii care trebuie scrii logic o dat cu bitul GIE (Global Interrupt Enable) n registrul
de stare cu scopul de a permite ntreruperea. n funcie de starea n care se afl PC (Program Counter),
ntreruperile pot fi invalidate, atunci cnd Boot Loader-ul este programat. Aceast tehnic
mbunattete securitatea.
Cele mai joase adrese din memoria de program sunt definite ca vectori de resetare i ntrerupere.
n funcie de list se determin i nivelurile de prioritate ale diferitelor ntreruperi. Cu ct ntreruperea
are nivelul mai jos, cu att prioritatea este mai mare. RESET are cea mai mare prioritate, iar dup
aceasta este INT0 - cererea de ntrerupere extern 0. Vectorii de ntrerupere pot fi mutai la nceputul
seciunii Boot Flash prin setarea bitului IV SEL din registrul global de control al ntreruperilor (GICR).
Vectorul de RESET poate fi, de asemenea, mutat la nceputul aceleiai seciuni prin programarea
seciunii BOOTRST.
Cnd apare o ntrerupere, bitul GIE (bitul I de ntrerupere) este ters i toate ntreruperile sunt
invalidate. Utilizatorul de software poate scrie 1 logic n bitul I pentru a permite executarea
ntreruperilor. Toate ntreruperile permise pot, la rndul lor, ntrerupe ntreruperile de rutin. Bitul I este
automat corectat cnd instruciunea RETI este executat.
Practic sunt dou tipuri de ntreruperi:
1. Primul tip este declanat de evenimentele care seteaz indicatorul de ntrerupere. Pentru
aceste ntreruperi PC este trimis la vectorii de ntrerupere n scopul executrii ntreruperilor de
rutin i hardware-ul terge indicatorul de ntrerupere corespunztor. Indicatorul de ntrerupere poate
fi ters i prin scrierea cu 1 logic. Dac se ntmpl o ntrerupere n timpul n care bitul care permite
ntreruperea este ters, atunci indicatorul de ntrerupere va fi setat s rein ntreruperea pn cnd
aceasta va putea fi permis sau indicatorul este ters de software. n caz similar se procedeaz atunci
cnd este vorba de tergerea indicatorului GIE.
2. Cel de-al doilea tip de ntreruperi este dat atta timp ct condiia de ntrerupere este
prezent. Aceste ntreruperi nu au neaprat indicator de ntrerupere. Dac condiia de ntrerupere
dispare nainte ca ntreruperea s fie permis, ntreruperea nu va mai fi executat. Cnd AVR iese dintr-
o ntrerupere se ntoarce la programul principal i mai execut o dat instruciunile nainte de a interveni
alt ntrerupere. Starea registrului nu este automat stocat cnd apare o ntrerupere de rutin, nici cnd
revine din ntreruperea de rutin. Acesta trebuie susinut de software.
Saltul execuiei programului la rutina de ntrerupere consum doi cicli. Dac o ntrerupere apare
n timpul unei instruciuni multiciclu, aceast instruciune este finalizat nainte de a fi servit
ntreruperea. ntoarcerea de la o rutin de ntrziere dureaz ali 4 cicli. n timpul acestor 4 cicli,
Program Counter (cuvnt - 16 bii) este scos din stiv, Stack Pointer este incrementat cu 2, i bitul I din
registrul SREG este setat. Cnd microcontrolerele AVR ies dintr-o ntrerupere, ntotdeauna se vor
ntoarce la execuia programului principal i va executa cel puin o nou instruciune nainte de a fi
acceptat o nou ntrerupere.

7
De exemplu:
1. Cnd se folosete instruciunea CLI (Clear Interrupt) pentru invalidarea ntreruperilor,
ntreruperea va fi invalidat imediat. Nici o ntrerupere nu va mai fi executat dup
acionarea instruciunii CLI, chiar dac se ntmpl simultan cu instruciunea CLI.
2. Cnd se folosete instruciunea SEI (Set Interrupt) pentru a permite ntreruperi,
instruciunea SEI este rulat naintea oricrei instruciuni aflate n ateptare.

Unitatea aritmetic i logic (UAL)

Cea mai mare performant a UAL a MC AVR este aceea c lucreaz direct cu cele 32 de
registre. n timpul unui singur ciclu de ceas se efectueaz operaii aritmetice ntre registre sau ntre
registre i o constant, acestea fiind executate imediat. Operaiile pe care le execut UAL sunt
mprite n trei mari categorii: aritmetice, logice i operaii pe bit. Unele implementri ale arhitecturii
pot efectua i multiplicri cu sau far semn i/sau n regim de fracie. Mai multe detalii se gsesc n
subcapitolul Setul de Instruciuni.

Registrele de uz general

Fiierul de registre este optimizat pentru setul de instruciuni al arhitecturii AVR RISC. MC
AVR folosesc un set de 32 de registre de uz general de 8 bii fiecare (notate R0 R31) care pot fi
accesate ntr-un singur ciclu de tact. Structura setului de registre de uz general este prezentat n figura
9. Aa cum se vede i n figura 9, fiecrui registru i se atribuie i o adres de memorie,
localizndu-l direct n cele 32 de locaii, adic fiecare registru are o adres n spaiul memoriei de date
permind astfel o adresare uniform.
Observaie: Doar registrele R16 R31 pot stoca operanzi imediai.

Figura 9 Structura celor 32 de registre de uz general

Majoritatea instruciunilor care folosesc fiierul de registre au acces direct la toate registrele i
marea lor majoritate sunt instruciuni care se execut ntr-un singur ciclu de tact. ase din cele 32 de
registre (R26 R31) pot fi folosite ca trei registre de 16 bii pentru stocarea unor pointeri folosii la
adresarea indirect a datelor. Cele trei registre pentru adresarea indirect sunt denumite registrele X,Y,Z.

Registrele X, Y, Z

Registrele R26 R31 au cteva funciuni adugate pe lng cele generale. Aceste registe au 16
bii i se folosesc pentru accesarea indirect a datelor. Cele trei registre pentru adresarea indirect sunt
regitrele X, Y, Z care sunt descrise n figura 10 de mai jos.

8
Figura 10 Registrele X, Y, Z
Registrele generale 26, 27, 28, 29, 30 i 31 pot fi utilizate cu denumiri specifice i anume:
R26 registrul X octet inferior; R27 registrul X octet superior;
R28 registrul Y octet inferior; R29 registrul Y octet superior;
R30 registrul Z octet inferior; R31 registrul Z octet superior;

Registrul de stare (Status Register)

Registrul de stare conine informaii despre ultima operaie aritmetic efectuat. Aceast
informaie poate fi folosit pentru a reveni (a alterna) de la program la executarea unei alte operaii mai
prioritar. Situaia registrului este actualizat dup fiecare execuie a unei operaii aritmetice. Aceasta
poate duce n multe cazuri la nefolosirea concret a fiecrei instruciuni n parte, ci a unui cod mai
compact de instruciuni care efectueaz mai rapid operaia.
Valorile din registrul de stare nu sunt automat stocate cnd apare o ntrerupere de rutin i mai apoi
restaurate cnd se ntoarc la program. Acest lucru trebuie manipulat de program.
Registrul de stare (Status Register) la MC AVR este definit ca mai jos:

Figura 8 Regitrul de stare

unde:
Bitul 7-I (Global Interrupt Enable - GIE) (ntreruperi Globale Permise) trebuie s fie setat pentru
ca 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 insttructiunea RETI (return from interrupt) pentru
a permite accesul unei subsecvente la ntreruperi. Bitul I poate deasemenea sa fie fixat i ters de
aplicatie cu ajutorul instructiunilor SEI i CLI aa cum sunt descrise n Setul de Instructiuni
Bitul 6-T (Bit Copy Storage BCS) (bitul copiere-depozitare stocare) Instructiunile la nivel de bit
pentru copiere BLD (Bit LoaD-bit de incrcare) i memorare BST (Bit Store-bit de stocare) folosesc
bitul T ca surs sau destinatie pentru bitul actionat. Un bit dintr-un registru poate fi copiat n T cu
ajutorul instructiunilor BST, i un bit din T poate fi copiat n registru cu ajutorul instructiuni BLD.
Bitul 5-H (Half Carry Flag HCF) (Indicator de transport la jumatate) Acesta indic transportul
la jumatate n cazul unor operatii aritmetice. Jumatate de transport este folosit n aritmetica BCD
(binary-coded decimal). Pentru informatii detaliate a se vedea Setul de Instructiumi.
Bitul 4-S - Sign Bit (bitul de semn) Acest bit este un sau exclusiv ntre flag-ul indicator de negativ N
si bitul de depire V.
Bitul 3-V Twos Complement Overflow Flag Bitul indicator de depasire memorie
Bitul 2-N Negative Flag (indicatorul negativ) Indicatorul negativ indic un rezultat negativ n
cadrul operatiilor aritmetice sau logice

9
Bitul 1 Z Zero Flag (indicator de zero) Indicator de zero este setat atuci cand rezultatul unei
operatii logice sau aritmetice este nul.
Bitul 0- Carry Flag (indicatorul de transport) Indicatorul de transport indic transport n cadrul
operaiilor logice sau aritmetice.

Stiva
Stiva este folosit n principal pentu nmagazinarea temporar a datelor, dar i pentru
nmagazinarea variabilelor locale i pentru redarea adreselor dup efectuarea ntreruperilor sau a
subrutinelor. Informaia care este pus n stiv este pus ntotdeauna deasupra celorlalte deja existente.
Stiva este implementat pentru a trece de la locaii de memorie superioare la locaii de memorie
inferioare.
Indicatorul de stiv (SP) indic spatiul de date din memoria SRAM a stivei unde sunt localizate
ntreruperile i subrutinele. Acest spaiu trebuie definit de program nainte de a se executa vreo
subrutin sau ntrerupere. Indicatorul de stiv (SP) este decrementat cu 1 cnd se introduc alte date n
stiv cu ajutorul instruciunii PUSH, i decrementat cu 2 cnd adresele de revenire la program sunt
introduse n stiv cu subrutinele sau cu instruiunile CALL sau GOTO. Indicatorul de stiv este
incrementat cu 1 cnd datele sunt terse din stiv cu instruciunea POP, i incrementat cu 2 cnd datele
sunt scoase din stiv i se revine din subrutin cu instruciunea RET sau din ntrerupere cu instruciunea
RETI.
Indicatorul de stiv la MC AVR este implementat ca fiind format din dou registre de 8 bii.
Numrul de bii folosii depinde de necesitatea implementrii. Spaiul de adrese la unele implementri
ale arhitecturii AVR sunt aa de mici nct nu este necesar dect SPL-ul (SP Low). n acest caz registrul
SPH (SP High) nu mai este utilizat.

Figura 11 Indicatorul de stiv (SP)

ORGANIZAREA MEMORIEI LA MC AVR ATMEGA 16


ATmega 16 AVR are dou spaii de memorie principal: spaiul pentru memoria de date i cel
pentru memoria de program. n plus, ATmega16 are i o memorie nevolatil EEPROM pentru
memorarea datelor. Toate cele trei tipuri de memorie folosesc adresarea liniar.

Memoria pentru programe


ATmega 16 conine o memorie de tip FLASH reprogramabil (In-system On-chip) de 16 KB
pentru programe. Deoarece toate comenzile pentru AVR sunt de 16 i 32 bii, memoria FLASH este
organizat pe cuvinte n formatul 8Kx16. Pentru securitatea software-ului, spaiul pentru memoria de
programe FLASH este mprit n dou seciuni: seciunea de program BOOT i seciunea pentru
programe de aplicaie.
Memoria FLASH suport cel puin 10.000 de cicli de scriere/tergere. PC-ul (Numrtorul de
program) de la ATmega 16 (PC) are o lungime de 13 bii, ceea ce permite adresarea unui spaiu de
memorie de 213 = 8Klocaii.

10
Memoria de date SRAM
Figura 12 arat cum este organizat memoria SRAM la MC AVR - ATmega 16.
Memoria de date SRAM este organizat pe octei. Primele 96 de locaii sunt rezervate fiierului
de registre, iar urmtoarele 1024 de locaii sunt dedicate memoriei SRAM interne. Din fiierul de
registre fac parte cele 32 registre de uz general, iar restul de 64 de locaii sunt rezervate registrelor
asociate dispozitivelor de I/O.
Memoria SRAM are o capacitate cuprins ntre 128B i 4KB n funcie de tipul particular al
microcontrolerului. Este accesat cu instruciuni de acces att direct, ct i indirect, folosind un registru
pointer. Este folosit, de asemenea, i pentru constituirea stivei. Accesul la memoria SRAM se face n
dou perioade de tact.
Observaie: La microcontrolerele AVR performante este posibil conectarea unei memorii SRAM
externe.

Figura 12 Memoria de date SRAM

Memoria de date EEPROM

ATmega 16 conine 512 octei de memorie de date EEPROM (Electrically Erasable


Programmable Read-Only Memory). Este organizat ca spaiu separat de date, n care pot fi citii i
scrii bii individual. EEPROM-ul are o durat de via de cel puin 10.000 de cicli scriere/tergere.
Scrierea/citirea n EEPROM se face cu ajutorul registrelor de acces la EEPROM.
Cnd se citete EEPROM-ul, UCP este oprit timp de patru perioade de ceas nainte ca
urmtoarea comand s fie executat. Cnd se scrie EEPROM-ul, UCP este oprit timp de dou
perioade de ceas nainte ca urmtoarea comand s fie executat.

Figura 13 Registrele de adresa EEPROM EEARH si EEARL

Biii 9 15 sunt bii rezervai n cazul MC ATmega 16 i vor lua ntotdeauna valoarea 0.

11
Biii 0 8 sunt bii de adresare (total 9 bii, deci se adreseaz 0.5 KB)
Registrele de adres de mai sus, EEARH i EEARL specific adresa datelor din EEPROM
pentru cele 512 locaii ale spaiului EEPROM. Locaiile de memorie se adreseaz liniar de la 0 la 511.
Pentru operaia de scriere a EEPROM, registrul EEDR conine date care s fie scrise n EEPROM la
adresa dat de registrul EEAR. Pentru operaia de citire a EEPROM, EEDR conine date citite de pe
EEPROM la adresa dat de EEAR.

Figura 14 Registrul de date EEPROM EEDR

Figura 15 Registrul de control EEPROM EECR

Biii 7 4 - sunt rezervati la ATmega 16 i au valoarea zero.


Bit 3 EERIE: Activarea EEPROM Ready Interrupt
Bit 2 EEMWE : EEPROM Master Write Enable (activarea funciei principale de scriere EEPROM)
Bitul 1 EEWE : EEPROM Write Enable (activarea scrierii EEPROM)
EEPROM nu poate fi programat n timp ce UCP scrie n memoria FLASH. Software-ul trebuie s
verifice dac programarea memoriei FLASH este complet nainte de a iniia o nou scriere a EEPROM.
Bit 0 EERE : Activarea citirii EEPROM
Cnd se seteaz adresa corect a registrului EEAR, bitul EERE trebuie s fie scris pe unu logic
ca s declaneze citirea EEPROM. Accesul la citirea EEPROM se face cu o singur comand i datele
cerute sunt disponibile imediat. Cnd EEPROM este citit, UCP este oprit timp de patru Cicli nainte ca
urmtoarea comand s fie executat.

Spaiul de memorie I/O

Toate I/O de la ATmega 16 i perifericele sunt plasate n spaiul registrelor I/O. Locaiile I/O
sunt accesate de ctre comenzile IN i OUT, transfernd datele dintre cele 32 de registre de lucru i
spaiul I/O. Registrele I/O cuprinse ntre valorile adreselor $00 $1F sunt direct accesabile folosind
comenzile SBI i CBI. La aceste registre valoarea biilor unici poate fi verificat utiliznd comenzile
SBIS i SBIC.
Cnd se utilizeaz instruciunile specifice IN i OUT, trebuie folosite adresele I/O din zona
$00 $3F. Cnd se adreseaz/acceseaz registrele I/O ca spaiu de date cu instruciunile LD i ST,
trebuie adugat, la aceste adrese, valoarea $20, adic un salt peste zona registrelor de uz general.

SISTEMUL DE I/O la MC AVR ATMEGA 16


1. Porturile de intrare/ieire

ATmega16 dispune de 32 de linii de I/O grupate n patru porturi de 8 bii. Porturile sunt denumite cu
literele A, B, C i D. Fiecare pin al oricrui port se poate seta individual ca intrare sau ieire fr s
afecteze ceilali pini. n plus, anumii pini se pot utiliza pentru funcii speciale ale microcontrolerului.
n figura urmtoare este prezentat structura general a unui pin. Toi cei 32 de pini au fiecare cte o
rezisten pull-up care poate fi activat sau dezactivat.

12
Observaie: n scopul realizrii performanei i flexibilitii cerute, porturile de I/O sunt implementate n
fiierul de registre.

Operaiile cu porturile se fac prin intermediul unui set de 3 registre alocate fiecrui port: PORTx,
PINx i DDRx; unde x poate fi A, B, C sau D. Aceste registre fac parte din categoria registrelor de
intrare/ieire i pot fi accesate cu instruciunile care pot lucra direct cu ele: CBI, SBI, IN i OUT.
Registrele DDRx stabilesc dac un pin este intrare sau ieire. Astfel, un bit cu valoarea 1 n
registrul DDRx face ca pinul corespunztor s fie considerat ieire; altfel pinul va fi intrare. Registrele
PORTx sunt utilizate pentru a scrie o valoare n portul corespunztor, iar registrele PINx se folosesc
pentru a citi valoarea prezent pe pinii unui port. Activarea sau dezactivarea rezistenelor pull-up este
determinat de bitul PUD din registrul SFIOR i de valorile registrelor PORTx i DDRx, aa cum se
poate observa n tabelul urmtor.

Toate porturile AVR au funcia Citete Modific Scrie atunci cnd sunt folosite ca porturi
I/O digitale generale. Asta nseamn c direcia unui pin poate fi schimbat fr a schimba n mod
intenionat direcia oricrui alt pin cu comenzile SBI i CBI. Aceeai regul se aplic cnd se schimb
valoarea drive-ului (dac este configurat ca ieire) sau a activrii/dezactivrii rezistorilor (dac sunt
configurai ca intrare). Fiecare buffer de intrare are caracteristici similare de drive att cu capacitatea
sursei ct i cu sincronizarea. Driver-ul pinului este ndeajuns de puternic ca s activeze displayul LED
direct. Toi pinii au rezistori care pot fi selectai individual cu o surs suplimentar de tensiune cu
rezisten invariabil. Toi pinii I/O au diode de protecie att la tensiunea de alimentare n curent
continuu (Vcc), ct i la mpmntare, aa cum este indicat n figura de mai jos :

13
Toate registrele i referinele de bit din aceast seciune sunt scrise n form general. Un x mic
reprezint litera care denumete portul i un n mic reprezint numrul bitului. Cnd se utilizeaz
registrul sau biii ntr-un program, trebuie s fie folosit forma exact. Adic, PORTB3 pentru bitul
numrul 3 n Portul B, prezentat general ca PORTxn. Trei locaii de adrese de memorie I/O sunt alocate
pentru fiecare port:
- una pentru fiecare registru de date - PORTx,
- registrul direciei datelor DDRx,
- port de intrare PINx.
Locaia pinilor de intrare este read-only, n timp ce registrul de date i DDR sunt read-write. n
plus, bitul PUD (dezactivare pull-up) din SFIOR dezactiveaz funcia pull-up pentru toi pinii din toate
porturile cnd este setat.
Majoritatea pinilor au funcii alternative pentru caracteristicile periferice ale dispozitivului.
Observaie: activarea funciilor alternative ale unor pini nu afecteaz utilizarea altor pini ca port de I/O
general digital.

2. Unitile timer/numrtor
ATMEGA 16 are dou uniti timer/numrtor de 8 bii i o unitate timer/numrtor de 16 bii.
Principalele caracteristici ale acestor module sunt:
- Posibilitatea de alegere a frecvenei de tact de la intrarea timerelor (circuit de prescalare);
- Posibilitatea de citire/scriere a strii numrtoarelor;
- Generarea de forme de und prin folosirea unui registru de comparare;
- Generarea de unde PWM cu posibilitatea de reglare a frecvenei;
- Generarea de cereri de ntrerupere la intervale regulate;
- Posibilitatea declanrii la un eveniment extern (captur a intrrii).
Principalele caracteristici ale unitii timer/numrtor de 16 bii sunt:
- PWM de 16 bii;
- Dou uniti independente de comparare a ieirilor;
- Unitate de captur a intrrii;
- Un atenuator de zgomot pe intrare;
- tergerea cronometrului la potrivirea comparrii (autorencrcare);
- Puls de corectare a fazelor cu modulator (PWM);
- Perioada PWM variabil;
- Generator de frecven;
- Numrtor extern de evenimente;
- Patru surse de ntrerupere independente.
Unitile timer/numrtor fac posibil cronometrarea precis a execuiei programului
(managementul evenimentelor), generarea de forme de und i msurarea intervalelor de timp.

3. Modulul UART/USART (Universal Synchronous Asynchronous Receiver/Transmitter)


Modulul UART/USART efectueaz recepia/transmisia datelor de la/ctre un dispozitiv periferic
cu acces serie. Principalele caracteristici ale acestui modul sunt:
- Funcionare full-duplex complet att n modul sincron, ct i n modul asincron;
- Are generator propriu de rezoluie mare;
- Detecteaz automat erorile de transmisie;
- Execut comunicaii de tip multiprocesor.
Modulul execut conversia serie/paralel a datelor la recepie, respectiv conversia paralel/serie la
transmisie. Transmiterea datelor este iniializat prin scrierea datelor care trebuie trasmise n registrul
UART I/O Data Register, UDR. Datele sunt transferate de la UDR la registrul Transmit Shift cnd:
1. Un nou caracter este scris n UDR i caracterul precedent a fost deja transferat. Registrul
de deplasare este ncrcat imediat n acest caz.
2. Un nou caracter este scris n UDR nainte ca un caracter precedent s fi fost transferat
complet. Registul de deplasare este ncrcat dup ce prima operaie a fost finalizat.

14
4. Interfaa SPI (Serial Peripheral Interface)
Interfaa de comunicaie SPI asigur transferul rapid sincron de date ntre microcontroler i
dispozitive periferice sau microcontroler i alte microcontrolere AVR.

5. Interfaa TWI (Two Wire Interface)


Interfaa TWI implementeaz un protocol de comunicaie pe dou fire permind interconectarea
a pn la 128 de dipozitive diferite. Interfaa folosete dou linii bidirecionale, una pentru tact i una
pentru date. Toate dispozitivele conectate la magistrala acestei interfee au propria adres.

6. Timer-ul Watchdog (WDT)


Timer-ul Watchdog este un timer controlat care este folosit pentru a activa un dispozitiv n caz
c programul software este blocat ntr-o bucl infinit sau n caz c execuia programului este
defectuoas. Timer-ul Watchdog are o ieire care poate reseta microcontrolerul. Timer-ul Watchdog este
alimentat de la un oscilator RC on-chip separat.

7. Convertorul analog digital (CAD)


MC ATMEGA 16 conine un convertor analog digital cu aproximaii succesive, cu 8 canale i cu
rezoluia de 10 bii. Convertorul este prevzut la intrare cu circuit de eantionare i memorare.

8. Comparatorul analogic compar dou mrimi analogice i genereaz o cerere de ntrerupere


cnd acestea sunt egale.

MODURILE DE LUCRU CU CONSUM REDUS DE ENERGIE


Mictrocontrolerul AVR are disponibile 6 moduri de lucru pentru reducerea consumului de
energie, care pot fi comandate prin intermediul registrului de control al unitii centrale a
microcontrolerului (MCUCR = MCU Control Register). Pentru aceasta seteaz bitul SE (Sleep Enable)
i biii SM2, SM1 i SM0 (Sleep Mode), din registrul MCUCR. Pentru a intra n modul SLEEP, bitul SE
din MCUCR trebuie setat pe 1 i intruciunea SLEEP trebuie executat. Dac o ntrerupere se
activeaz n timp ce unitatea central a microcontrolerului (MCU) este n modul SLEEP, MCU se
trezete, execut ntreruperea i reia execuia de la instruciunea urmtoare instruciunii SLEEP.
Coninutul fiierului de registre, memoriei SRAM i porturilor I/O sunt neafectate. Dac un RESET
apare n timpul modului SLEEP, MCU se trezete i execut vectorul corespunztor pentru RESET.
Cnd bitul SM este 0, instruciunea SLEEP foreaz MCU s intre n modul IDLE, oprind UCP,
dar lsnd timer/counter-ul, timer-ul watchdog i sistemul de ntreruperi s-i continue funcionarea.
Cnd bitul SM este 1, instruciunea SLEEP foreaz MCU s intre n modul POWER-DOWN. n acest
mod, oscilatorul extern este oprit, n timp ce ntreruperile externe i timer-ul watchdog continu s
funcioneze.
Modurile de lucru cu consum redus de energie la MC AVR sunt:
1. IDLE MODE UCP este oprit, dar interfeele UART/USART, SPI, TWI, CAD,
comparatorul analogic, timerele i sistemul de ntreruperi continu s funcioneze. O cerere
de ntrerupere readuce procesorul n stare de funcionare.
2. ADC NOISE REDUCTION MODE UCP este oprit, dar CAD, ntreruperile externe,
interfaa TWI, timerul 2 i timer-ul watchdog continu s funcioneze. Acest regim permite
CAD s funcioneze cu o rezoluie mai mare. O cerere de ntrerupere readuce procesorul n
stare de funcionare.
3. POWER-DOWN MODE oscilatorul extern este blocat, ns rmn active ntreruperile
externe, interfaa TWI i timer-ul watchdog.
4. POWER-SAVE MODE este similar cu modul Power-Down, cu diferena c i timer-ul 2
continu s funcioneze.
5. STANDBY MODE este identic cu modul Power-Down, cu deosebirea c oscilatorul
continu s funcioneze.
6. EXTENDED STANDBY MODE este disponibil atunci cnd este folosit un oscilator cu
cuar, n rest este identic cu modul Power-Down.

15
SETUL DE INSTRUCIUNI al MC AVR
MC AVR au un set de 131 instruciuni codate cu 16 sau cu 32 bii. Pentru accesarea datelor
instruciunile folosesc mai multe moduri de adresare. Diferitele instruciuni ale MC AVR pot fi
mprite n aproximativ 10 moduri de adresare diferite. Fiecare instruciune are un cod care indic
procesorului ce s fac. Cealalt parte a instruciunii este operandul, cu care lucreaz codul.

1. Instruciunile de lucru direct cu registrele de uz general

Instruciunile registru direct simplu pot lucra cu oricare dintre cele 32 de registre de uz
general. Acestea citesc coninutul unui registru, lucreaz cu coninutul acestuia i apoi stocheaz
rezultatul operaiei napoi n registru.
Formatul acestor instruciuni este: Registre Destinaie

Exemple de astfel de instruciuni pot fi cele de mai jos, unde RD poate fi orice registru,
considerat ca fiind att surs, ct i destinaie n cadrul instruciunii.

COM RD inverseaz toi biii din registrul RD


INC RD incrementeaz cu 1 coninutul registrului RD
DEC RD decrementeaz cu 1 coninutul registrului RD
TST RD verific dac registrul RD conine zerouri sau valori negative
CLR RD atribuie valoarea $00 registrului RD
SER RD atribuie valorea FF registrului RD
LSL RD mut coninutul registrului cu o poziie la stnga. Zerourile sunt mutate pe poziia 0, iar
coninutul bitului 7 este copiat n Carry Flag
LSR RD mut coninutul registrului cu o poziie la dreapta. Zerourile sunt mutate pe poziia 7, iar
coninutul bitului 0 este copiat n Carry Flag
ROR RD rotete coninutul registrului RD
ASR RD mut aritmetic la dreapta coninutul registrului RD, pstrnd bitul 7 constant.
SWAP RD schimb poziiile i coninutul registrului RD

n instructiunile registru direct dublu sunt implicate dou registre. Cele dou registre sunt
denumite registrul surs - RS i registru destinaie - RD. Instruciunea citete cele dou registre i
lucreaz cu coninutul lor, stocnd informaia n registrul destinaie.

Exemple de instruciuni:
ADD RD, RS
SUB RD, RS
AND RD, RS
MOV RD RS
OR RD, RS

2. Instruciunile I/O directe sunt folosite pentru a accesa spaiul de intrare-ieire. Registrele I/O
pot fi accesate doar utiliznd aceste instruciuni:
IN RD PORTADDRESS;
OUT PORTADDRESS RS;
unde RD i RS pot fi oricare dintre cele 32 de registre de uz general, iar registrele I/O pot fi oricare din
registrele din gama cuprins ntre 00 i 3F (un total de 64 de registre I/O).

3. Instruciuni de lucru direct cu datele - au mrimea de 2 cuvinte (32 bii). Un cuvnd este
ocupat de adresa spaiului de memorie. Aadar un maxim de date de memorie de 64 KB poate fi accesat
folosind unul dintre aceste tipuri de instruciuni.

Exemple de instruciuni:

16
LDS RD, K ; citete o dat din memoria SRAM de la adresa K
STS K, RS ; memoreaz direct valoarea din RS la adresa K n memoria SRAM

4. Instruciuni de lucru indirect cu datele - Aceste instruciuni sunt similare cu instruciunile de


tipul Data Direct, exceptnd faptul c acestea au un cuvnt fiecare i un registru pointer (X, Y sau Z)
care este folosit pentru memorarea bazei adresei datelor din memorie. La baza adresei n registrul
pointer poate fi adugat un offset sau operaii de incrementare-decrementare asupra coninutului
pointerului.

Exemple de instruciuni:
LD Rd, X ; ncarc n registrul Rd valoarea de la adresa indicat de pointerul X
LD Rd, X+ ; ncarc n registrul Rd valoarea de la adresa indicat de pointerul (X+1)
ST X, Rs ; memoreaz n registrul Rs valoarea de la adresa indicat de pointerul X
ST X+ ,Rs ; memoreaz n registrul Rs valoarea de la adresa indicat de pointerul (X+1)

5. Instruciuni aritmetice i logice

ADD Rd, Rs ; Adunare fr transport Rd = Rd + Rs;


Flag-urile afectate Z, C, N, V, S, H
Cicli de ceas 1

Exemplu: ADD R2, R3

ADC Rd Rs Adunare cu transport Rd = Rd + Rs + C


Flag-urile afectate Z, C, N, V, S, H
Cicli de ceas : 1

Exemplu : ADC R5, R3

SUB Rd, Rs ; Rd=Rd - RS


Flag-urile afectate: Z, C, N, V, S, H
Cicli de ceas: 1

Exexmplu: SUB R1, R3;

AND Rd, Rs ; Execut operaie I logic ntre Rd i Rs; Rd = Rd & Rs.


Flag-urile afectate: : Z, N, V, S
Cicli de ceas: 1

Exemplu: AND R26 , R2

OR Rd, Rs; Execut operaia SAU logic ntre Rd i Rs. Rd = Rd | Rs.


Flag-urile afectate: : Z, N, V, S
Cicli de ceas: 1

Exemplu: OR R1 , R2

NEG Rd. Rd = $00 Rd.


Flag-urile afectate: : Z, C, N, V, S, H
Cicli de ceas: 1

Exemplu: NEG R30

MUL Rd, Rs. nmulire fr semn ntre Rd i Rs. Rezultatul este memorat n R1:R0

17
R1:R0 = Rd x Rs
Flag-urile afectate: : Z, C
Cicli de ceas: 2

Exemplu: MUL R2 , R1

6. Instruciuni de salt

RJMP k; Salt relativ la o locaie de memorie.


Flag-urile afectate: Nici unul
Cicli de ceas: 2

Exemplu:
RJMP OK;
NOT_OK: ADD R1 , R5;
OK : INB R1;

IJMP k ; Salt indirect la o locaie de memorie artat de registrul Z.


Flag-urile afectate: Nici unul
Cicli de ceas: 2

Exemplu:
LDI R30, ADD_LOW
LDI R30, ADD_HIGH;
IJMP;

JMP k; Salt la o locaie de memorie.


Flag-urile afectate: Nici unul
Cicli de ceas: 3

Exemplu:
JMP go_far;
:
:
go_far;

RCALL k; Apel relativ a unei subrutine


Flag-urile afectate: Nici unul
Cicli de ceas:

Exemplu: RCALL SUBRUTINA

ICALL k; Apel indirect a unei subrutine


Flas-urile afectate: Nici unul
Cicli de ceas:

Exemplu:
LDI R30 FARSUB_LOW;
LDI R31 FARSUB_HIGH;
ICALL;

CALL k; Apel a unei subrutine


Flag-urile afectate: Nici unul

18
Cicli de ceas: 4/5

Exemplu: CALL SUBRUTINA

RET; Subrutina de ntoarcere.


Flag-urile afectate: Nici unul
Cicli de ceas: 4/5

Exemplu:
:
:
POP SREG;
RET;

RETI; Subrutina de ntoarcere din ntrerupere.


Flag-urile afectate: I
Cicli de ceas: 4/5

Exemplu:
:
:
POP SREG;
RETI;

7. Instruciuni pentru trasferul datelor

MOV Rd, Rs; Rd = Rs.


Flag-urile afectate: Niciunul
Cicli de ceas: 1

Exemplu: MOV R2, R17;

MOVW Rd, Rs; Rd = Rs + 1: Rs.


Flags-urile afectate: Niciunul
Cicli de ceas: 1

Exemplu: MOV R23, R17;

LDI Rdx, k; ncarc imediat. Rdx = k;


Flag-urile afectate: Niciunul
Cicli de ceas: 1

Exemplu: LDI R23, $53;

LDS Rdx, k; ncarc imediat. Rdx = memoria de date (k);


Flag-urile afectate: Niciunul
Cicli de ceas: 2

Exemplu: LDS R23, $5300;

LD Rd, X; ncarc indirect. Rd = memoria de date (X), unde X este registrul pointer pereche R26;
Flag-urile afectate: Niciunul
Cicli de ceas: 2

19
Exemplu: LD R2, X;

LD Rd, X+; ncarc indirect. Rd = memoria de date (X), unde X =X + 1 este registrul pointer pereche
R26:R27 ;
Flag-urile afectate: Niciunul
Cicli de ceas: 2

Exemplu: LD R21, X+;

LD Rd, -X; ncarc indirect. Rd = memoria de date (X), unde X =X - 1 este registrul pointer pereche
R26:R27 ;
Fag-urile afectate: Niciunul
Cicli de ceas: 2

Exemplu: LD R22, -X;

LD Rd, Y; ncarc indirect. Rd = memoria de date (Y), unde Y este registrul pointer pereche R28:R29 ;
Flag-urile afectate: Niciunul
Cicli de ceas: 2

Exemplu: LD R1, Y;

LD Rd, Y+; ncarc indirect. Rd = memoria de date (Y), unde Y =Y + 1 este registrul pointer pereche
R28:R29 ;
Flag-urile afectate: Niciunul
Cicli de ceas: 2

Exemplu: LD R21, Y+;

LD Rd, -Y; ncarc indirect. Rd = memoria de date (Y), unde Y =Y - 1 este registrul pointer pereche
R28:R29 ;
Fag-urile afectate: Niciunul
Cicli de ceas: 2

Exemplu: LD R22, -Y;

8. Instruciuni pe bii

LSL Rd; Deplasare logic la stnga. Rd(n+1) = Rd(n); Rd(0) = 0; C = Rd(7).


Flag-urile afectate: Z, C, N, V, H.
Cicli de ceas: 1

Exemplu: LSL R1;

LSR Rd; Deplasare logic la dreapta. Rd(n+1) = Rd(n); Rd(0) = 0; C = Rd(7).


Flag-urile afectate: Z, C, N, V
Cicli de ceas: 1

Exemplu: LSR R1;

ROL Rd; Rotire la stnga. Rd(0) = C; Rd(n+1) = Rd(n); C = Rd(7).


Flag-urile afectate: Z, C, N, V, H.
Cicli de ceas: 1

20
Exemplu: ROL R13;

ROL Rd; Rotire la dreapta. Rd(7) = C; Rd(n) = Rd(n+1); C = Rd(0).


Flag-urile afectate: Z, C, N, V
Cicli de ceas: 1

Exemplu: ROR R13;

ASR Rd; Deplasare aritmetic la dreapta. Rd(n) = Rd(n+1), for n = 0 to 6;


Flag-urile afectate: Z, C, N, V
Cicli de ceas: 1

Exemplu: ASR R13;

SWAP Rd; Schimb patru octei. De ex Rd(3,2,1,0) cu Rd(7,5,5,4)


Flag-urile afectate: niciunul.
Cicli de ceas: 1

Exemplu: SWAP R10;

BSET s; Seteaz Flag-ul. SREG(s) = 1;


Flag-urile afectate: SREG(s).
Cicli de ceas: 1

Exemplu: BSET 10;

BCLR s; Reseteaz Flag-ul. SREG(s) = 0;


Flag-urile afectate: SREG(s).
Cicli de ceas: 1

Exemplu: BCLR 10;

SBI A, s. Seteaz bitul s n registrele I/O.


Flag-urile afectate: niciunul.
Cicli de ceas: 1

Exemplu: SBI PORTD, 7;

CBI A, s. Golete bitul s n registrele I/O.


Flag-urile afectate: niciunul.
Cicli de ceas: 1

Exemplu: GBI PORTD, 7;

21

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