Upload
andreeanastase95
View
289
Download
0
Embed Size (px)
Citation preview
7/23/2019 Familia ATMEL AVR 8biti
http://slidepdf.com/reader/full/familia-atmel-avr-8biti 1/21
1
MICROCONTROLERE AVR ATMEL PE 8 BIŢI
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 nucleuRISC firma Atmel a dezvoltat mai multe familii de microcontrolere, cu diferite structuri de memorie şide interfeţe I/O, destinate diferitelor clase de aplicaţii.
Aceste microcontrolere sunt destinate aplicaţiilor simple cum ar fi: controlul motoarelor,controlul fluxului de informaţie pe portul USB, controlul accesului de la distanţă (Remote AccessControl), ş.a..
Familia de microcontrolere AVR pe 8 biţi prezintă următoarele 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 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 biţi fiecare (acest lucru este specific procesoarelorRISC). Numărul 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 pentruaccesare. În acest fel creşte viteza de execuţie a programului (deci va rula mai repede).3. Are memorie de date integrată de tip EEPROM (Electrically Erasable ProgrammableR ead-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 variabile, respectiv constante.4.
Are frecvenţa de lucru care poate fi controlată prin software de la 0 la 16 MHz. Cele mai
multe instrucţiuni sunt executate într-un singur ciclu de tact, ceea ce duce la îmbunătăţirea performanţei de 10 ori faţă de procesoarele convenţionale care operează la aceeaşi frecvenţă (deexemplu: Intel 8051).5. Realizează funcţia de RESET f ăr ă decuplarea circuitului.6. Are un timer programabil încorporat cu circuit de prescalare separat, care este folosit
pentru sincronizarea aplicaţiilor.7.
Surse interne şi externe de întrerupere.8. Are un timer watchdog cu oscilator independent, care este folosit pentru recuperareainformaţiilor în caz de apariţia unei erori software, dar mai poate fi folosit şi în alte aplicaţii.9. Are 6 moduri de operare pentru economisirea energiei. Poate lucra în modurile deoperare SLEEP şi POWER DOWN, moduri ce economisesc energie, atunci când procesorul nulucrează.10. Multe cipuri au oscilator integrat RC, care micşorează şi mai mult numărulcomponentelor în cazul microcontrolerelor care-l conţin.11. Sunt prevăzute cu o gamă largă de dispozitive de I/O şi de periferice încorporate. 12.
Beneficiază de existenţa unui set unitar de instrumente software pentru dezvoltareaaplicaţiilor.13.
Are o compatibilitate mare, pornind de la procesoare mici cu 8 pini şi ajungând la procesoare cu 68 de pini.
Microcontrolerele din familia AVR prezintă o organizare de tip RISC din punctul de vedere al
execuţiei unei instrucţiuni pe ciclu maşină. Prezenţa unor blocuri interne precum: oscilator intern,timere, unitate UART (Universal asynchronous receiver/transmitter ), interfaţă SPI, rezistoare pull-up,PWM (pulse width modulation), convertoare analog-digitale, comparatoare analogice determină utilizarea acestor microcontrolere într -o gamă foarte largă de aplicaţii.
7/23/2019 Familia ATMEL AVR 8biti
http://slidepdf.com/reader/full/familia-atmel-avr-8biti 2/21
2
Specific arhitecturii Harvard, microcontrolerele AVR folosesc spaţii de memorie şi magistrale deacces separate pentru coduri şi pentru date. Memoria de program care este de tip FLASH integrată,
poate fi programată fără scoaterea din sistem, ceea ce permie efectuarea rapidă de upgrade-uri în programe.
Instrucţiunile acestei familii de microcontrolere au fost proiectate pentru a reduce dimensiuneaunui program scris în limbaj C sau în limbaj de asamblare. Posibilitatea programării memoriei FLASHşi a memoriei EEPROM, determină ca aceste microcontrolere să aibă o largă utilizare datorată costului
mic de dezvoltare a unei aplicaţii (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 neasigură că aceste microcontrolere nu vor consuma energie decât atunci când este nevoie.
Controlul software al frecvenţei de tact garantează o viteză maximă de execuţie atunci când estenevoie, iar în restul timpului microcontrolerul poate trece în modul STANDBY, unde consumul deenergie este minim. Utilizarea acestor microcontrolere poate reduce semnificativ timpul de dezvoltare aunei aplicaţii datorită prezenţei unui bloc de depanare în timp real, circuitul aflându-se chiar pe placă.
Printre cele mai utilizate microcontrolere de uz general putem aminti: ATMEGA 8, ATMEGA16, ATMEGA 128, ATMEGA 162, etc..
Microcontrolerele din familia AVR pot fi atât microcontrolere de uz general, cât şi
microcontrolere cu funcţii specializate, împăr ţindu-se în următoarele categorii:1.
Familia TINY AVR – cuprinde microcontrolere destinate unor aplicaţii simple, cu 18 KBmemorie de program.
2. Familia MEGA AVR – cu un set dezvoltat de instrycţiuni şi cu 4256 KB memorie de
program.3.
Familia XMEGA AVR – destinată unor aplicaţii complexe. Acestea au unităţi DMA(Direct Access Memory), module pentru criptare, ş.a. şi folosesc un spaţiu de memorie de
program de 16 384 KB.4. Microcontrolere AVR destinate unor aplicaţii specifice, care se împart în mai multe
categorii:4.1. LI GTHI NG AVR : microcontrolere ce conţin un procesor de semnal, fiind special
conceput pentru controlul motoarelor de curent continuu.4.2. LCD AVR : microcontrolere ce conţin un controler pentru adresarea dispozitivelor LCD4.3. CAN AVR : microcontrolere ce conţin o interfaţă CAN implementată hardware.
Microcontrolerele din familia AVR de 8 biţi au un set de 131 instrucţiuni şi 32 de registre de uz general.Cele 32 de registre sunt direct adresabile de unitatea aritmetică şi logică (UAL), permiţând accesarea adouă registre independente într-o singură instrucţiune. Astfel se obţine o eficienţă spor ită în execuţie,fiind de până la zece ori mai rapide decât microcontrolerele convenţionale de tip CISC.
Microcontrolerul ATMEGA 16
Arhitectura AVR (firma ATMEL)ATMEGA 16 este un microcontroler realizat de firma Atmel, având o tehnologie CMOS de 8
biţi, de mică putere şi o arhitectur ă RISC AVR îmbunătăţită.Caracteristicile principale ale acestui microcontroler sunt:
- 16 KB de memorie FLASH reinscr iptibilă pentru stocarea programelor;- 1 KB de memorie RAM;- 512 B de memorie EEPROM;- două număr ătoare/temporizatoare de 8 biţi;- un numărător/temporizator de 16 biţi;- un convertor analog digital de 10 biţi, cu 8 intrăr i (intrări multiple);
- un comparator analogic;- 4 canale PWM;- conţine 3 interfeţe pentru comunicaţie: un modul USART pentru comunicaţie serială (port serial),interfaţă serială TWI şi interfaţă serială SPI;
7/23/2019 Familia ATMEL AVR 8biti
http://slidepdf.com/reader/full/familia-atmel-avr-8biti 3/21
3
- un cronometru cu oscilator intern;- ofer ă 32 de linii I/O organizate în patru porturi (PA, PB, PC, PD) cu 8 biţi fiecare;- are o magistrală generală de date la care sunt conectate mai multe module şi anume: unitateaaritmetică şi logică (UAL), registrele generale, memoria RAM şi memoria EEPROM, liniile de
intrare (adică porturile) şi celelalte blocuri de intrare/ieşire. Aceste ultime module sunt controlate deun set special de registre, fiecare modul având asociat un număr de registre specifice.- memoria FLASH de program împreună cu întreg blocul de extragere a instrucţiunilor, de decodare
şi de execuţie comunică printr-o magistrală proprie, separată de magistrala de date menţionată maisus. Acest tip de organizare este conform principiilor unei arhitecturi Harvard şi permitemicrocontrolerului să execute instrucţiunile foarte rapid.
În modul POWER DOWN se salvează conţinutul registrelor, dar se blochează oscilatorul,dezactivându-se toate celelalte funcţii ale chip-ului până la următoarea întrerupere externă sau laurmătorul RESET hardware. În modul POWER SAVE, timer-ul asincron continuă să meargă în timp cerestul dispozitivelor sunt oprite. În modul STANDBY, oscilatorul funcţionează, în timp ce restuldespozitivului este oprit. Acest lucru permite un start foarte rapid combinat cu un consum redus deenergie, iar în modul STANDBY EXTINS (Extended Standby Mode), atât oscilatorul principal cât şitimer-ul asincron continuă să funcţioneze.
ATMEGA 16 AVR este susţinut de o serie completă de instrumente de program şi de
dezvoltare a sistemului, care include: compilatoare C, macroasambloare, programe de debug/simulare,ş.a..
Descrierea pinilor la Microcontrolerul ATMEGA 16
Vcc – Sursa de curentGND – Masa
Port A (PA7 .. PA0) Portul A serveşte drept port de intrăr i analogice pentru convertorul A/D. Mai poate fi folosit, deasemenea, şi ca un port bidirecţional I/O de 8 biţi, în cazul în care convertorul A/D nu este folosit.Pinii de port pot fi conectaţi opţional la sursa de curent Vcc prin rezistori interni (selectaţi pentru fiecare
bit). Buffer-ele de ieşire ale portului A au şi caracteristici de amplificare .
Port B (PB7.. PB0) Portul B este un port I/O de 8 biţi bidirecţional cu rezistori interni (opţionali), dar poate îndeplini şi
functii speciale ale microcontrolerului ATMEGA 16. Buffer-ele de ieşire ale portului B au şi elecaracteristici de amplificare.
Port C (PC7…PC0)
7/23/2019 Familia ATMEL AVR 8biti
http://slidepdf.com/reader/full/familia-atmel-avr-8biti 4/21
4
Portul C este un port I/O de 8 biţi bidirecţional cu rezistori interni (opţionali), poate îndeplini şi functiiale interfeţei JTAG (de depanare), cât şi alte funcţii speciale ale microcontrolerului ATMEGA 16.Buffer-ele de ieşire ale portului C au caracteristici de amplificare. Dacă interfaţa JTAG (de depanare)este activată, rezistorii pinilor PC5(TDI), PC3(TMS) şi PC2(TCK) vor fi activaţi, chiar dacă are loc oresetare.
Port D (PD7…PD0)
Portul D este un port I/O de 8 bi ţi bidirecţional cu rezistori interni conectaţi opţional la sursa de curentVcc (selectaţi pentru fiecare bit), dar poate îndeplini şi functii speciale ale microcontroleruluiATMEGA 16. Buffer-ele de ieşire ale p ortului D au caracteristici de amplificare.
RESET - Un nivel scăzut la acest pin mai mare ca durată decât o valoare prestabilită, va genera oiniţializare.XTAL 1 - reprezintă intrare pentru amplificatorul inversor al oscilatorului.XTAL 2 - reprezintă ieşire 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
Funcţia principală a nucleului unităţii centrale de prelucrare (UCP) este aceea de a asiguraexecuţia corectă a programului. Din acest motiv, nucleul UCP este capabil să acceseze memoriile, săexecute calcule, să controleze perifericele şi întreruperile.
Figura 1 – Schema bloc a nucleului UCP la microcontrolere AVR
Pentru a maximiza performanţa, AVR foloseşte o arhitectur ă Harvard cu memorii şi magistrale
7/23/2019 Familia ATMEL AVR 8biti
http://slidepdf.com/reader/full/familia-atmel-avr-8biti 5/21
5
separate pentru program şi date. Instrucţiunile din memoria programului sunt executate într-un singurnivel în timp ce o instrucţiune este executată şi următoarea este adusă de la memoria de program. Acestconcept permite executarea instrucţiunilor la fiecare ciclu de ceas. Memoria de program este o memoriede tip FLASH reprogramabilă.
Registrele la AVR sunt în număr de 32×8 biţi fiecare, scopul acestor microcontrolere fiind acelade a accesa registrele într-un singur ciclu de ceas. Acest singur timp de acces se datorează unităţiiaritmetice şi logice (UAL=Unitatea Aritmetică şi Logică). Într-o unitate aritmetică şi logică operaţia are
loc astfel: operanzii sunt scoşi din registru, se efectuează operaţia şi rezultatul este intr odus în regiştri,toate acestea fiind executate într-un singur ciclu de ceas. Şase din cele 32 de registre pot fi folosite catrei registre de 16 biţi cu acces indirect la informaţii, permiţând astfel calcularea eficientă a adresei. Unadintre aceste adrese poate fi folosită pentru a căuta tabele în memoria de program.
Unitatea aritmetică şi logică efectuează (suportă) operaţii aritmetice şi logice între registre sauîntre o constantă şi un registru. După efectuarea unei operaţii aritmetice registrul afişează rezultatuloperaţiei.
Programul furnizează salturi condiţionate, necondiţionate şi apelări de instr ucţiuni capabile săacceseze tot spaţiul de adresă. Majoritatea instrucţiunilor AVR sunt formate dintr-un cuvânt de16 biţi.
Spaţiul memoriei de program (FLASH) este împăr ţit în două secţiuni, secţiunea BOOT şisecţiunea de aplicare a programelor. Secţiunea BOOT are biţi speciali pentru protecţia la scriere şi
citire/scriere. De exemplu instrucţiunea SPM cu ajutorul căreia se scrie în memoria FLASHaplicaţii trebuie să fie în secţiunea BOOT.
În timpul întreruperilor sau a apelăr ii subrutinelor, adresa de întoarcere este conţinută în stivă.Stiva este efectiv alocată în informaţiile generale SRAM şi în consecinţă măr imea ei este limitată doarde mărimea totală a SRAM şi de uzura ei. Toţi utilizatorii de program trebuie să iniţializezeindicatorul de stivă SP (Stack Pointer) înainte ca subrutina sau întreruperea să fie executată. SP se poateciti/scr ie în spaţiul de I/O. Informaţiile din SRAM pot fi accesate cu uşurinţă prin cele cinci moduridiferite de adresare suportate de arhitectura AVR.
Spaţiile de memorie în arhitectura AVR sunt liniare şi normale.Modulele întreruperilor au registrele de control în spaţiul I/O şi în Registrul STATUS se află
bitul de întreupere globală. Toate întreruperile au prioritate în funcţie de locul ocupat în tabelul de
vectori de întrerupere. Cu cât este mai jos situat în tabel vectorul de întrerupere cu atât acea întrerupereare prioritate mai mare. Prioritatea mai mare o ar e întreruperea cu vectorul cel mai slab plasat în tabel.
Spaţiul de memorie I/O conţine 64 de adrese pentru funcţiuni periferice ale UCP precum:controlul registrelor, indicatorul SPI sau alte funcţii de I/O. Memoria I/O poate fi accesată direct sauindirect.
Execuţia în timp a instrucţiunilor Această parte descrie în general timpul necesar executăr ii instructiunilor. UCP a MC
AVR este controlată de ceasul UCP generat direct de la sursă. Nu se foloseşte nici un ceas interior.
Figura 6 ne prezintă pipeline-ul de execuţie al unei instrucţiuni permisă în arhitectura Harvardşi accesul rapid la fişierul de registre. Acesta este conceptul de bază pentru a obţine mai mult de 1MIPS/MHz şi cele mai bune rezultate din punct de vedere funcţiuni/cost, funcţiuni/timp şifuncţiuni/unitate.
Figura 6 - Instrucţiuni paralele de execuţie
7/23/2019 Familia ATMEL AVR 8biti
http://slidepdf.com/reader/full/familia-atmel-avr-8biti 6/21
6
Figura 7 ne arată timpul de lucru cu registrele. Într -un singur ciclu de ceas o operaţie a UALfoloseşte 2 registre pentru a executa calculul respectiv, iar rezultatul este stocat îna poi în registrul dedestinaţie.
Figura 7 - Operaţii 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 toatemicrocontrolerele. În sistemele cu procesor care interacţionează cu alte componente, multe lucruri seîntâmplă asincron, de exemplu, utilizatorul poate apăsa un buton pentru face o acţiune, în timp ce pe
portul serial urmează să sosească un octet. Ar fi imposibil pentru procesor să poată urmări toateevenimentele doar prin interogarea acestor dispozitive. De aceea, ar fi mai bine dac ă aceste dispozitiveşi-ar putea anunţa sosirea unei date. Asta este ceea ce face mecanismul de întreruperi. Dispozitivele
periferice pot întrerupe execuţia programului principal, şi procesorul se opreşte din execuţia programului pentru a examina sursa întreruperii şi pentru a executa task-urile necesare. După ce acestetask-uri au fost finalizate, execuţia 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 capacităţi de întrerupere, de aceea programul principal nu trebuie să verifice periodic acestedispozitive.
O secvenţă de evenimente care se derulează când apare o întrerupere este următoarea:1. Dispozitivul periferic întrerupe procesorul2. Executia instrucţiunii curente este finalizată 3.
Adresa următoarei instrucţiuni este memorată în stivă (stiva poate fi hardware sausoftware)4.
Adresa ISR (Interrupt Subroutine) este încărcată în program.5. Procesorul execută ISR-ul.
6.
Terminarea execuţiei ISR este indicată de instrucţiunea RETI (Return from Interrupt)7. Procesorul reia execuţia programului normal de la valoarea memorată în stivă.
Deoarece întreruperile pot apare în orice moment, starea procesorului trebuie salvată pentru caexecuţia normală a programului să poată fi reluată după ce ISR este finalizat. Starea în care este
procesorul se află în registrul SREG. Instrucţiunea ISR trebuie să salveze registrul SREG înainte de aexecuta orice altă operaţie şi, înainte de a returna controlul către programul principal, SREG trebuierestaurat. Această operaţie poate fi făcută în două moduri:
1.
SREG este copiat într-un alt registru, de exemplu R1, care nu poate fi folosit pentru oricealta operaţie, şi înainte ca ISR să execute instrucţiunea RETI, R1 este copiat înapoi în SREG.2. SREG este salvat în stivă (folosind instrucţiunea PUSH SREG) şi înainte de execuţia
instrucţiunii RETI, SREG este copiat înapoi din stiv
ă (folosind instruc
ţiunea POP SREG).Această metodă este posibilă doar pentru procesoarele care au stivă software.Microcontrolerul AT90S1200, de exemplu, nu poate folosi aceasta metoda pentru salvareaSREG.
7/23/2019 Familia ATMEL AVR 8biti
http://slidepdf.com/reader/full/familia-atmel-avr-8biti 7/21
7
În mod normal, după ce a intervenit o întrerupere şi a fost executată prin adresa corespunzătoareISR, întreruperile globale sunt dezactivate automat (echivalent cu execuţia instrucţiunii CLI); oricum,este posibil să se activeze întreruperile în timp ce un ISR este executat, executând instrucţiunea SEI înISR. Dacă o altă întrerupere apare în timp ce un ISR este deja în execuţie, 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 înacelaşi moment de timp.Un factor important de luat în seamă când sunt folosite întreruperile este cât de repede poate
r ăspunde un procesor la o întrerupere. Aceasta depinde de arhitectura procesorului. Pentrumicrocontrolerele AVR, răspunsul la întreruperi se face în minim 4 cicli după ce flag-ul de întreruperi afost setat, iar rutina pentru întreruperi excutată. În timpul celor 4 cicli, Program Counter (este pe 2octeţi) 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 aucâte un vector de program fiecare aflat în spaţiul memoriei de program. Tutur or întreruperilor le suntalocate individual biţi care trebuie scrişi logic o dată cu bitul GIE (Global Interrupt Enable) în registrulde stare cu scopul de a per mite întreruperea. În funcţie de starea în care se af lă PC (Program Counter),
întreruperile pot fi invalidate, atunci când Boot Loader-ul este programat. Această tehnică îmbunatăteşte securitatea.
Cele mai joase adrese din memoria de program sunt definite ca vectori de resetare şi întrerupere.În funcţie de listă se determină şi nivelurile de prioritate ale diferitelor întreruperi. Cu cât întrerupereaare nivelul mai jos, cu atât 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 mutaţi la începutulsecţiunii 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 aceleiaşi secţiuni prin programareasecţiunii BOOTRST.
Când apare o întrerupere, bitul GIE (bitul I – de întrerupere) este şters şi toate întreruperile suntinvalidate. Utilizatorul de software poate scrie 1 logic în bitul I pentru a permite executarea
întreruperilor. Toate întreruperile permise pot, la r ândul lor, întrerupe întreruperile de rutină. Bitul I esteautomat corectat când instrucţiunea RETI este executată.
Practic sunt două tipuri de întreruperi:1. Primul tip este declanşat de evenimentele care setează indicatorul de întrerupere. Pentru
aceste întreruperi PC este trimis la vectorii de întreruper e în scopul executăr ii întreruperilor der utină şi hardware-ul şterge indicatorul de întrerupere corespunzător. Indicatorul de întrerupere poatefi şters şi prin scrierea cu 1 logic. Dacă se întâmplă o întrerupere în timpul în care bitul care permiteîntreruperea este şters, atunci indicatorul de întrerupere va fi setat să reţină întreruperea până cândaceasta va putea fi per misă sau indicatorul este şters de software. În caz similar se procedează atuncicând este vorba de ştergerea indicatorului GIE.
2. Cel de-al doilea tip de întreruperi este dat atâta timp cât condiţia de întrerupere este prezentă. Aceste întreruperi nu au neapărat indicator de întrerupere. Dacă condiţia de întreruperedispare înainte ca întreruperea să fie permisă, întreruperea nu va mai fi executată. Când AVR iese dintr-o întrerupere se întoarce la programul principal şi mai execută o dată instrucţiunile înainte de a intervenialtă întrerupere. Starea registrului nu este automat stocată când apare o întrerupere de rutină, nici cândrevine din întreruperea de rutină. Acesta trebuie susţinut de software.
Saltul execuţiei programului la rutina de întrerupere consumă doi cicli. Dacă o întrerupere apareîn timpul unei instrucţiuni multiciclu, această instrucţiune este finalizată înainte de a fi servită întreruperea. Întoarcerea de la o rutină de întârziere durează alţi 4 cicli. În timpul acestor 4 cicli,Program Counter (cuvânt - 16 biţi) este scos din stivă, Stack Pointer este incrementat cu 2, şi bitul I dinregistrul SREG este setat. Când microcontrolerele AVR ies dintr-o întrerupere, întotdeauna se vor
întoarce la execuţia programului principal şi va executa cel puţin o nouă instrucţiune înainte de a fiacceptată o nouă întrerupere.
7/23/2019 Familia ATMEL AVR 8biti
http://slidepdf.com/reader/full/familia-atmel-avr-8biti 8/21
8
De exemplu:1.
Când se foloseşte instrucţiunea CLI (Clear Interrupt) pentru invalidarea întreruperilor,întreruperea va fi invalidată imediat. Nici o întrerupere nu va mai fi executată după acţionarea instrucţiunii CLI, chiar dacă se întâmplă simultan cu instrucţiunea CLI.
2. Când se foloseşte instrucţiunea SEI (Set Interrupt) pentru a permite întreruperi,instrucţiunea SEI este rulată înaintea oricărei instrucţiuni aflate în aşteptare.
Unitatea aritmetică şi logică (UAL)
Cea mai mare performantă a UAL a MC AVR este aceea că lucrează direct cu cele 32 deregistre. În timpul unui singur ciclu de ceas se efectuează operaţii aritmetice între r egistre sau întreregistre şi o constantă, acestea fiind executate imediat. Operaţiile pe care le execută UAL suntîmpărţite în trei mari categorii: aritmetice, logice şi operaţii pe bit. Unele implementări ale arhitecturii
pot efectua şi multiplicări cu sau fară semn şi/sau în regim de fracţie. Mai multe detalii se găsesc însubcapitolul Setul de Instruc ţ iuni.
Registrul de stare (Status Register)
Registrul de stare conţine informaţii despre ultima operaţie aritmetică efectuată. Aceastăinformaţie poate fi folosită pentru a reveni (a alterna) de la program la executarea unei alte operaţii mai
prioritară. Situaţia registrului este actualizată după fiecare execuţie a unei operaţii aritmetice. Aceasta poate duce în multe cazuri la nefolosirea concretă a fiecărei instrucţiuni în parte, ci a unui cod maicompact de instrucţiuni care efectuează mai rapid operaţia.Valorile din registrul de stare nu sunt automat stocate când apare o întrerupere de r utină şi mai apoirestaurate când 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 dintr e întreruperile individuale nu sunt permise independent. Bitul I este şters dehard după ce s-a ivit o întrerupere şi este corectat de insttructiunea RETI (return from interrupt) pentrua permite accesul unei subsecvente la întreruperi. Bitul I poate deasemenea sa fie fixat şi şters de
aplicatie cu ajutorul instructiunilor SEI şi CLI aşa cum sunt descrise în Setul de InstructiuniBitul 6-T (Bit Copy Storage – BCS) (bitul copiere-depozitare stocare) – Instructiunile la nivel de bit pentru copiere BLD (Bit LoaD-bit de incăr care) ş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 cuajutorul 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ă transportulla jumatate în cazul unor operatii aritmetice. Jumatate de transport este f olosit î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 Nsi bitul de depăşire V.Bitul 3-V Two’s Complement Overflow Flag – Bitul indicator de depasire memorie
Bitul 2-N Negative Flag (indicatorul negativ) – Indicatorul negativ indică un rezultat negativ încadrul operatiilor aritmetice sau logiceBitul 1 – Z Zero Flag (indicator de zero) – Indicator de zero – este setat atuci cand rezultatul unei
operatii logice sau aritmetice este nul.
7/23/2019 Familia ATMEL AVR 8biti
http://slidepdf.com/reader/full/familia-atmel-avr-8biti 9/21
9
Bitul 0- Carry Flag (indicatorul de transport) – Indicatorul de transport indică transpor t în cadruloperaţiilor logice sau aritmetice.
Registrele de uz general
Fişierul de registre este optimizat pentru setul de instrucţiuni al arhitecturii AVR RISC. MC
AVR folosesc un set de 32 de registre de uz general de 8 biți fiecare (notate R0R31) care pot fi
accesate într -un singur ciclu de tact. Structura setului de registre de uz general este prezentată în figura9. Aşa cum se vede şi în figura 9, fiecăr ui registru i se atribuie şi o adresă de memorie,localizându-l direct în cele 32 de locaţii, adică fiecare registru are o adresă în spațiul memoriei de date
permițând astfel o adresare uniformă.Observație: Doar registrele R16R31 pot stoca operanzi imediați.
Figura 9 – Structura celor 32 de registre de uz general
Majoritatea instrucţiunilor care folosesc fişierul de registre au acces direct la toate registrele şimarea lor majoritate sunt instrucţiuni care se execută într -un singur ciclu de tact. Șase din cele 32 deregistre (R26R31) pot fi folosite ca trei registre de 16 biți pentru stocarea unor pointeri folosiți laadresarea indirectă a datelor. Cele trei registre pentru adresarea indirectă sunt denumite registrele X,Y,Z.
Registrele X, Y, Z
Registrele R26R31 au câteva funcţiuni adăugate pe lângă cele generale. Aceste registe au 16 biţi și se folosesc pentru accesarea indirectă a datelor. Cele trei registre pentru adresarea indirectă suntregitrele X, Y, Z care sunt descrise în figura 10 de mai jos.
Figura 10 – Registrele X, Y, Z
Registrele generale 26, 27, 28, 29, 30 şi 31 pot fi utilizate cu denumiri specifice şi anume:
7/23/2019 Familia ATMEL AVR 8biti
http://slidepdf.com/reader/full/familia-atmel-avr-8biti 10/21
10
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;
STIVA
Stiva este f olosită în principal pentu înmagazinarea temporar ă a datelor, dar şi pentruînmagazinarea variabilelor locale şi pentru redarea adreselor după efectuarea întreruperilor sau asubrutinelor. Informaţia care este pusă în stivă este pusă întotdeauna deasupra celorlalte deja existente.Stiva este implementată pentru a trece de la locaţii de memorie superioare la locaţii de memorieinferioare.
Indicatorul de stivă (SP) indică spatiul de date din memoria SRAM a stivei unde sunt localizateîntreruperile şi subrutinele. Acest spaţiu trebuie definit de program înainte de a se executa vreosubr utină sau întrerupere. Indicator ul de stivă (SP) este decrementat cu 1 când se introduc alte date înstivă cu ajutorul instrucţiunii PUSH, şi decrementat cu 2 când adresele de revenire la program suntintr oduse în stivă cu subrutinele sau cu instruţiunile CALL sau GOTO. Indicator ul de stivă este
incrementat cu 1 când datele sunt şter se din stivă cu instrucţiunea POP, şi incrementat cu 2 când datelesunt scoase din stivă şi se revine din subrutină cu instrucţiunea RET sau din întrerupere cu instrucţiuneaRETI.
Indicator ul de stivă la MC AVR este implementat ca f iind format din două registre de 8 biţi. Număr ul de biţi folosiţi depinde de necesitatea implementăr ii. Spaţiul de adrese la unele implementăr iale arhitecturii AVR sunt aşa de mici încât nu este necesar decât SPL-ul (SP Low). În acest caz registrulSPH (SP High) nu mai este utilizat.
Figura 11 – Indicatorul de stivă (SP)
ORGANIZAREA MEMORIEI LA MC AVR – ATMEGA 16
ATmega 16 AVR are două spaţii de memorie principală: spaţiul 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 programeATmega 16 conţine 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 biţi, memoria FLASH esteorganizată pe cuvinte în formatul 8Kx16. Pentru securitatea software-ului, spaţiul pentru memoria de
programe FLASH este împăr ţit în două secţiuni: secţiunea de program BOOT şi secţiunea pentru
programe de aplica ţ ie.Memoria FLASH suportă cel puţin 10.000 de cicli de scriere/ştergere. PC-ul (Numărătorul de
program) de la ATmega 16 (PC) are o lungime de 13 biţi, ceea ce permite adresarea unui spațiu dememorie de 213 = 8Klocaţii.
7/23/2019 Familia ATMEL AVR 8biti
http://slidepdf.com/reader/full/familia-atmel-avr-8biti 11/21
11
Memoria de date SRAMFigura 12 arată cum este organizată memoria SRAM la MC AVR - ATmega 16.Memoria de date SRAM este organizată pe octeţi. Primele 96 de locaţii sunt rezervate fişierului
de registre, iar următoarele 1024 de locaţii sunt dedicate memoriei SRAM interne. Din fişierul deregistre fac parte cele 32 registre de uz general, iar restul de 64 de locaţii sunt rezervate registrelorasociate dispozitivelor de I/O.
Memoria SRAM are o capacitate cuprinsă între 128B şi 4KB în funcţie de tipul particular al
microcontrolerului. Este accesată cu instrucţiuni de acces atât direct, cât şi indirect, folosind un registru pointer. Este folosită, de asemenea, şi pentru constituirea stivei. Accesul la memoria SRAM se face îndouă perioade de tact. Observaţie: La microcontrolerele AVR performante este posibilă conectarea unei memorii SRAMexterne.
Figura 12 – Memoria de date SRAM
Memoria de date EEPROM
ATmega 16 conţine 512 octeţi de memorie de date EEPROM (Electrically ErasableProgrammable R ead-Only Memory). Este organizată ca spaţiu separat de date, în care pot fi citiţi şiscrişi biţi individual. EEPROM-ul are o durată de viaţă de cel puţin 10.000 de cicli scriere/ştergere.Scrierea/citirea în EEPROM se face cu ajutorul registrelor de acces la EEPROM.
Când se citeşte EEPROM-ul, UCP este oprită timp de patru perioade de ceas înainte ca
următoarea comandă să fie executată. Când se scrie EEPROM-ul, UCP este oprită timp de două perioade de ceas înainte ca următoarea comandă să fie executată.
Figura 13 – Registrele de adresa EEPROM – EEARH si EEARL
Biţii 9 15 sunt biţi rezervaţi în cazul MC ATmega 16 şi vor lua întotdeauna valoarea 0.
7/23/2019 Familia ATMEL AVR 8biti
http://slidepdf.com/reader/full/familia-atmel-avr-8biti 12/21
12
Biţii 0 8 sunt biţi de adresare (total 9 biţi, deci se adresează 0.5 KB)Registrele de adresă de mai sus, EEARH şi EEARL – specifică adresa datelor din EEPROM
pentru cele 512 locaţii ale spaţiului EEPROM. Locaţiile de memorie se adresează liniar de la 0 la 511.Pentru operaţia de scriere a EEPROM, registrul EEDR conţine date care să fie scrise în EEPROM laadresa dată de registrul EEAR. Pentru operaţia de citire a EEPROM, EEDR conţine date citite de peEEPROM la adresa dată de EEAR.
Figura 14 – Registrul de date EEPROM – EEDR
Figura 15 – Registrul de control EEPROM – EECR
Biţii 74 - sunt rezervati la ATmega 16 şi au valoarea zero.Bit 3 – EERIE: Activarea EEPROM Ready InterruptBit 2 – EEMWE : EEPROM Master Write Enable (activarea funcţiei 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 iniţia o nouă scriere a EEPROM.Bit 0 – EERE : Activarea citirii EEPROM
Când se setează adresa corectă a registrului EEAR, bitul EERE trebuie să fie scris pe unu logic
ca să declanşeze citirea EEPROM. Accesul la citirea EEPROM se face cu o singură comandă şi datelecerute sunt disponibile imediat. Când EEPROM este citit, UCP este oprită timp de patru Cicli înainte caurmătoarea comandă să fie executată.
Spaţiul de memorie I/O
Toate I/O de la ATmega 16 şi perifericele sunt plasate în spaţiul registrelor I/O. Locaţiile I/Osunt accesate de către comenzile IN şi OUT, transfer ând datele dintre cele 32 de registre de lucru şi
spaţiul I/O. Registrele I/O cuprinse între valorile adreselor $00 $1F sunt direct accesabile folosindcomenzile SBI şi CBI. La aceste registre valoarea biţilor unici poate fi verificată utilizând comenzileSBIS şi SBIC.
Când se utilizează instrucţiunile specifice IN şi OUT, trebuie folosite adresele I/O din zona$00 $3F. Când se adresează/accesează registrele I/O ca spaţiu de date cu instrucţiunile LD şi ST,trebuie adăugat, 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/ieşire
ATmega16 dispune de 32 de linii de I/O grupate în patru porturi de 8 biți. Porturile sunt denumite culiterele A, B, C și D. Fiecare pin al oricărui port se poate seta individual ca intrare sau ieșire fără săafecteze ceilalți pini. În plus, anumiți pini se pot utiliza pentru funcții speciale ale microcontrolerului.
În f igura următoare este prezentată structura generală a unui pin. Toți cei 32 de pini au fiecare câte orezistență „pull-up” care poate fi activată sau dezactivată.
7/23/2019 Familia ATMEL AVR 8biti
http://slidepdf.com/reader/full/familia-atmel-avr-8biti 13/21
13
Observație: În scopul realizăr ii performanţei şi flexibilităţii cerute, porturile de I/O sunt implementate înfişierul de registre.
Operațiile cu porturile se fac prin intermediul unui set de 3 registre aloc ate fiecărui port: PORTx,PINx și DDRx; unde x poate fi A, B, C sau D. Aceste registre fac parte din categoria registrelor de
intrare/ieșire și pot fi accesate cu instrucțiunile care pot lucra direct cu ele: CBI, SBI, IN și OUT.Registrele DDRx stabilesc dacă un pin este intrare sau ieșire. Astfel, un bit cu valoarea „1” în
registrul DDRx face ca pinul corespunzător să fie considerat ieșire; altfel pinul va fi intrare. RegistrelePORTx sunt utilizate pentru a scrie o valoare în portul corespunzător , iar registrele PINx se folosesc
pentru a citi valoarea prezentă pe pinii unui port. Activarea sau dezactivarea rezistenţelor „pull-up” estedeterminată de bitul PUD din registrul SFIOR şi de valorile registr elor PORTx și DDRx, aşa cum se
poate observa în tabelul următor.
Toate porturile AVR au funcția „Citeşte – Modifică – Scrie” atunci când sunt folosite ca porturiI/O digitale generale. Asta înseamnă că direcţia unui pin poate fi schimbată f ăr ă a schimba în modintenționat direcția oricărui alt pin cu comenzile SBI și CBI. Aceeași regulă se aplică când se schimbă valoarea drive-ului (dacă este configurat ca ieșire) sau a activării/dezactivării rezistorilor (dacă suntconfigurați ca intrare). Fiecare buffer de intrare are caracteristici similare de drive atât cu capacitateasursei cât și cu sincronizarea. Driver-ul pinului este îndeajuns de puternic ca să activeze displayul LEDdirect. Toți pinii au rezistori care pot fi selectați individual cu o sursă suplimentar ă de tensiune cu
rezistență invariabilă. Toți pinii I/O au diode de protecție atât la tensiunea de alimentare în curentcontinuu (Vcc), cât și la împământare, așa cum este indicat în figura de mai jos :
7/23/2019 Familia ATMEL AVR 8biti
http://slidepdf.com/reader/full/familia-atmel-avr-8biti 14/21
14
Toate registr ele și referințele de bit din această secțiune sunt scrise în formă generală. Un „x” micreprezintă litera care denumește portul și un „n” mic reprezintă numărul bitului. Când se utilizează registrul sau biții într-un program, trebuie să fie folosită forma exactă. Adică, PORTB3 pentru bitulnumărul 3 în Portul B, prezentat general ca PORTxn. Trei loca ții de adrese de memorie I/O sunt alocate
pentru fiecare port:- una pentru fiecare registru de date - PORTx,- registrul direcției datelor – DDRx,
- port de intrare – PINx.Locația 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ă funcția pull-up pentru toți pinii din toate porturile când este setat.
Majoritatea pinilor au funcții alternative pentru caracteristicile periferice ale dispozitivului.Observație: activarea funcțiilor alternative ale unor pini nu afectează utilizarea altor pini ca port de I/Ogeneral digital.
2. Unitățile timer/numărător ATMEGA 16 are două unități timer/numărător de 8 biți și o unitate timer/numărător de 16 biți.
Principalele caracteristici ale acestor module sunt:
-
Posibilitatea de alegere a frecvenței de tact de la intr area timerelor (circuit de prescalare);- Posibilitatea de citire/scriere a stării numărătoarelor; - Generarea de forme de undă prin folosirea unui registru de comparare;
- Generarea de unde PWM cu posibilitatea de reglare a frecvenței; -
Generarea de cereri de întrerupere la intervale regulate; - Posibilitatea declanșării la un eveniment extern (captură a intrării).
Principalele caracteristici ale unităţii timer /numărător de 16 biţi sunt:- PWM de 16 biţi;- Două unităţi independente de comparare a ieşirilor;
- Unitate de captură a intrării;- Un atenuator de zgomot pe intrare;
-
Ştergerea cronometrului la potrivirea comparării (autoreîncărcare);- Puls de corectare a fazelor cu modulator (PWM);- Perioada PWM variabilă;
- Generator de frecvenţă;- Numărător extern de evenimente;
- Patru surse de întrerupere independente.Unitățile timer/numărător fac posibilă cronometrarea precisă a execuţiei programului
(managementul evenimentelor), generarea de forme de undă şi măsurarea intervalelor de timp.
3. Modulul UART/USART (Universal Synchronous Asynchronous Receiver/Transmitter)Modulul UART/USART efectuează recepția/transmisia datelor de la/către un dispozitiv periferic
cu acces serie. Principalele caracteristici ale acestui modul sunt:- Funcționare full-duplex completă atât în modul sincron, cât și în modul asincron; - Are generator propriu de rezoluție mare;
- Detectează automat erorile de transmisie; - Execută comunicații de tip multiprocesor. Modulul execută conversia serie/paralel a datelor la recepție, respectiv conversia paralel/serie la
transmisie. Transmiterea datelor este inițializată prin scrierea datelor care trebuie trasmise în registrulUART I/O Data Register, UDR. Datele sunt transferate de la UDR la registrul Transmit Shift când:
1. Un nou caracter este scris în UDR și caracterul precedent a fost deja transferat. Registrulde deplasare este încărcat imediat în acest caz.
2.
Un nou caracter este scris în UDR înainte ca un caracter precedent să fi fost transferatcomplet. Registul de deplasare este încărcat după ce prima operație a fost finalizată.
7/23/2019 Familia ATMEL AVR 8biti
http://slidepdf.com/reader/full/familia-atmel-avr-8biti 15/21
15
4. Interfaţa SPI (Serial Peripheral Interface)
Interfața de comunicație SPI asigură transferul rapid sincron de date între microcontroler șidispozitive periferice sau microcontroler și alte microcontrolere AVR.
5. Interfaţa TWI (Two Wire Interface)Interfața TWI implementează un protocol de comunicație pe două fire permițând interconectarea
a până la 128 de dipozitive diferite. Interfața folosește două linii bidirecționale, una pentru tact și una
pentru date. Toate dispozitivele conectate la magistrala acestei interfețe 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ă execuția programului estedefectuoasă. Timer-ul Watchdog are o ieșire care poate reseta microcontrolerul. Timer-ul Watchdog estealimentat de la un oscilator RC on-chip separat.
7. Convertorul analog digital (CAD)MC ATMEGA 16 conține un convertor analog digital cu aproximații succesive, cu 8 canale și cu
rezoluția de 10 biți. Convertorul este prevăzut la intrare cu circuit de eșantionare și memorare.
8. Comparatorul analogic – compară două mărimi analogice şi generează o cerere de întreruperecând acestea sunt egale.
MODURILE DE LUCRU CU CONSUM REDUS DE ENERGIE
Mictrocontrolerul AVR are disponibile 6 moduri de lucru pentru reducerea consumului deenergie, care pot fi comandate prin intermediul registrului de control al unității centrale amicrocontrolerului (MCUCR = MCU Control Register). Pentru aceasta setează bitul SE (Sleep Enable)și biții SM2, SM1 și SM0 (Sleep Mode), din registrul MCUCR. Pentru a intra în modul SLEEP, bitul SEdin MCUCR trebuie setat pe “1” și intrucțiunea SLEEP trebuie executată. Dacă o întrerupere seactivează în timp ce unitatea centrală a microcontrolerului (MCU) este în modul SLEEP, MCU se“trezește”, execută întreruperea și reia execuția de la instrucțiunea următoare instrucțiunii SLEEP.Conținutul fișierului de registre, memoriei SRAM și porturilor I/O sunt neafectate. Dacă un RESETapare în timpul modului SLEEP, MCU se “trezește” și execută vectorul corespunzător pentru RESET.
Când bitul SM este 0, instrucțiunea SLEEP for țează MCU să intre în modul IDLE, oprind UCP,dar lăsând timer/counter-ul, timer-ul watchdog și sistemul de întreruperi să-și continue funcționarea.Când bitul SM este 1, instrucțiunea SLEEP for țează MCU să intre în modul POWER-DOWN. În acestmod, oscilatorul extern este oprit, în timp ce întreruperile externe și timer-ul watchdog continuă să funcționeze.
Modurile de lucru cu consum redus de energie la MC AVR sunt:
1.
IDLE MODE – UCP este oprită, dar interfețele UART/USART, SPI, TWI, CAD,comparatorul analogic, timerele și sistemul de întreruperi continuă să funcționeze. O cererede întrerupere readuce procesorul în stare de funcționare.
2. ADC NOISE REDUCTION MODE – UCP este oprită, dar CAD, întreruperile externe,interfața TWI, timerul 2 și timer-ul watchdog continuă să funcționeze. Acest regim permiteCAD să funcționeze cu o rezoluție mai mare. O cerere de întrerupere readuce procesorul înstare de funcționare.
3. POWER-DOWN MODE – oscilatorul extern este blocat, însă rămân active întreruperileexterne, interfața TWI și timer -ul watchdog.
4. POWER-SAVE MODE – este similar cu modul Power-Down, cu diferența că și timer -ul 2continuă să funcționeze.
5.
STANDBY MODE – este identic cu modul Power-Down, cu deosebirea că oscilatorulcontinuă să funcționeze. 6. EXTENDED STANDBY MODE – este disponibil atunci când este folosit un oscilator cu
cuarț, în rest este identic cu modul Power -Down.
7/23/2019 Familia ATMEL AVR 8biti
http://slidepdf.com/reader/full/familia-atmel-avr-8biti 16/21
16
SETUL DE INSTRUCŢIUNI al MC AVR
MC AVR au un set de 131 instrucțiuni codate cu 16 sau cu 32 biți. Pentru accesarea datelorinstrucțiunile folosesc mai multe moduri de adresare. Diferitele instrucţiuni ale MC AVR pot fiîmpăr ţite în aproximativ 10 moduri de adresare diferite. Fiecare instrucţiune are un cod care indică
procesorului ce să facă. Cealaltă parte a instrucţiunii este operandul, cu care lucrează codul.
1.
Instrucțiunile de lucru direct cu registrele de uz general
Instrucţiunile registru direct simplu pot lucra cu oricare dintre cele 32 de registre de uzgeneral. Acestea citesc conţinutul unui registru, lucrează cu conţinutul acestuia și apoi stocheazărezultatul operaţiei înapoi în registru.
Formatul acestor instrucţiuni este: Registre Destina ț ie
Exemple de astfel de instrucțiuni pot fi cele de mai jos, unde RD poate fi orice registru,considerat ca fiind atât sursă, cât și destinaţie în cadrul instrucţiunii.
COM RD inversează toţi biții din registrul RD
INC RD incrementează cu 1 conţinutul registrului RDDEC RD decrementează cu 1 conţinutul registrului RDTST RD verifică dacă registrul RD conţine zerouri sau valori negativeCLR RD atribuie valoarea $00 registrului RDSER RD atribuie valorea FF registrului RDLSL RD mută conţinutul registrului cu o poziţie la stânga. Zerourile sunt mutate pe poziţia 0, iar
conţinutul bitului 7 este copiat în Carry FlagLSR RD mută conţinutul registrului cu o poziţie la dreapta. Zerourile sunt mutate pe poziţia 7, iar
conţinutul bitului 0 este copiat în Carry FlagROR RD roteşte conţinutul registrului RDASR RD mută aritmetic la dreapta conţinutul registrului RD, păstrând bitul 7 constant. SWAP RD schimbă pozițiile și conținutul registrului RD
În instructiunile registru direct dublu sunt implicate două registre. Cele două registre suntdenumite registrul sursă - RS și registru destinaţie - RD. Instrucţiunea citeşte cele două registre șilucrează cu conţinutul lor, stocând informaţia în registrul destinaţie.
Exemple de instrucţiuni:ADD RD, RSSUB RD, RSAND RD, RS
MOV RD RSOR RD, RS
2. Instrucțiunile I/O directe sunt folosite pentru a accesa spaţiul de intrare-ieşire. Registrele I/O pot fi accesate doar utilizând aceste instrucţiuni:
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 dinregistrele din gama cuprinsă între 00 şi 3F (un total de 64 de registre I/O).
3. Instrucțiuni de lucru direct cu datele - au mărimea de 2 cuvinte (32 biți). Un cuvând este
ocupat de adresa spațiului de memorie. Așadar un maxim de date de memorie de 64 KB poate fi accesatfolosind unul dintre aceste tipuri de instrucţiuni.
Exemple de instrucțiuni:
7/23/2019 Familia ATMEL AVR 8biti
http://slidepdf.com/reader/full/familia-atmel-avr-8biti 17/21
17
LDS RD, K ; citește o dată din memoria SRAM de la adresa KSTS K, RS ; memorează direct valoarea din RS la adresa K în memoria SRAM
4. Instrucțiuni de lucru indirect cu datele - Aceste instrucţiuni sunt similare cu instrucţiunile detipul Data Direct, exceptând faptul că acestea au un cuvânt 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 adăugat un offset sau operaţii de incrementare-decrementare asupr a conţinutului
pointerului.
Exemple de instrucţiuni:LD Rd, X ; încarcă în registrul Rd valoarea de la adresa indicată de pointerul XLD 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 XST X+ ,Rs ; memorează în registrul R s valoarea de la adresa indicată de pointerul (X+1)
5. Instrucțiuni aritmetice și logice
ADD Rd, Rs ; Adunare fără transport Rd = Rd + Rs;
Flag-urile afectate Z, C, N, V, S, HCicli de ceas 1
Exemplu: ADD R2, R3
ADC Rd Rs Adunare cu transport Rd = Rd + Rs + CFlag-urile afectate Z, C, N, V, S, HCicli de ceas : 1
Exemplu : ADC R5, R3
SUB Rd, Rs ; Rd=Rd - RSFlag-urile afectate: Z, C, N, V, S, HCicli de ceas: 1
Exexmplu: SUB R1, R3;
AND Rd, Rs ; Execută operație “ȘI logic” între Rd și Rs; Rd = Rd & Rs.Flag-urile afectate: : Z, N, V, SCicli de ceas: 1
Exemplu: AND R26 , R2
OR Rd, Rs; Execută operașia “SAU logic” între Rd și Rs. Rd = Rd | Rs.Flag-urile afectate: : Z, N, V, SCicli de ceas: 1
Exemplu: OR R1 , R2
NEG Rd. Rd = $00 – Rd.Flag-urile afectate: : Z, C, N, V, S, HCicli de ceas: 1
Exemplu: NEG R30
MUL Rd, Rs. Înmulțire f ăr ă semn între Rd și Rs. Rezultatul este memorat în R1:R0
7/23/2019 Familia ATMEL AVR 8biti
http://slidepdf.com/reader/full/familia-atmel-avr-8biti 18/21
18
R1:R0 = Rd x RsFlag-urile afectate: : Z, CCicli de ceas: 2
Exemplu: MUL R2 , R1
6.
Instrucțiuni de salt
RJMP k ; Salt relativ la o locație de memorie.Flag-urile afectate: Nici unulCicli de ceas: 2
Exemplu:RJMP OK;
NOT_OK: ADD R1 , R5;OK : INB R1;
IJMP k ; Salt indirect la o locație de memorie ar ătată de registrul Z.Flag-urile afectate: Nici unulCicli de ceas: 2
Exemplu:LDI R30, ADD_LOWLDI R30, ADD_HIGH;IJMP;
JMP k ; Salt la o locație de memorie.Flag-urile afectate: Nici unul
Cicli de ceas: 3
Exemplu:JMP go_far;::go_far;
RCALL k ; Apel relativ a unei subrutineFlag-urile afectate: Nici unulCicli de ceas: ¾
Exemplu: RCALL SUBRUTINA
ICALL k ; Apel indirect a unei subrutineFlas-urile afectate: Nici unulCicli de ceas: ¾
Exemplu:LDI R30 FARSUB_LOW;LDI R31 FARSUB_HIGH;
ICALL;
CALL k ; Apel a unei subrutineFlag-urile afectate: Nici unul
7/23/2019 Familia ATMEL AVR 8biti
http://slidepdf.com/reader/full/familia-atmel-avr-8biti 19/21
19
Cicli de ceas: 4/5
Exemplu: CALL SUBRUTINA
RET; Subrutina de întoarcere.Flag-urile afectate: Nici unulCicli de ceas: 4/5
Exemplu:::POP SREG;RET;
RETI; Subrutina de întoarcere din întrerupere.Flag-urile afectate: ICicli de ceas: 4/5
Exemplu:::POP SREG;RETI;
7. Instrucțiuni 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: NiciunulCicli de ceas: 1
Exemplu: MOV R23, R17;
LDI Rdx, k ; Încarcă imediat. Rdx = k;Flag-urile afectate: NiciunulCicli de ceas: 1
Exemplu: LDI R23, $53;
LDS Rdx, k ; Încarcă imediat. Rdx = memoria de date (k);Flag-urile afectate: NiciunulCicli 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: NiciunulCicli de ceas: 2
7/23/2019 Familia ATMEL AVR 8biti
http://slidepdf.com/reader/full/familia-atmel-avr-8biti 20/21
20
Exemplu: LD R2, X;
LD Rd, X+; Încarcă indirect. Rd = memoria de date (X), unde X =X + 1 este registrul pointer perecheR26:R27 ;
Flag-urile afectate: NiciunulCicli de ceas: 2
Exemplu: LD R21, X+;
LD Rd, -X; Încarcă indirect. Rd = memoria de date (X), unde X =X - 1 este registrul pointer perecheR26:R27 ;
Fag-urile afectate: NiciunulCicli 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 perecheR28:R29 ;
Flag-urile afectate: NiciunulCicli de ceas: 2
Exemplu: LD R21, Y+;
LD Rd, -Y; Încarcă indirect. Rd = memoria de date (Y), unde Y =Y - 1 este registrul pointer perecheR28:R29 ;
Fag-urile afectate: NiciunulCicli de ceas: 2
Exemplu: LD R22, -Y;
8. Instrucțiuni pe biți
LSL Rd; Deplasare logică la stânga. 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, VCicli de ceas: 1
Exemplu: LSR R1;
ROL Rd; Rotire la stânga. Rd(0) = C; Rd(n+1) = Rd(n); C = Rd(7).Flag-urile afectate: Z, C, N, V, H.Cicli de ceas: 1
7/23/2019 Familia ATMEL AVR 8biti
http://slidepdf.com/reader/full/familia-atmel-avr-8biti 21/21
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, VCicli 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, VCicli de ceas: 1
Exemplu: ASR R13;
SWAP Rd; Schimbă patru octeți. 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. Golește bitul s în registrele I/O.Flag-urile afectate: niciunul.Cicli de ceas: 1
Exemplu: GBI PORTD, 7;