Descărcați ca doc, pdf sau txt
Descărcați ca doc, pdf sau txt
Sunteți pe pagina 1din 138

Universitatea POLITEHICA din Bucuresti

Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

CAPITOLUL 1
ARHITECTURA MICROCONTROLERULUI ATmega16

1.1 Introducere
ATmega 16 este un microcontroler CMOS de 8 bii de mic putere bazat pe arhitectura
RISC AVR imbunataita.
Dispune de un set de 131 instruciuni i 32 de regitri de uz general. Cele 32 de registre sunt
direct adresabile de Unitatea Logica Aritmetica (ALU), permind accesarea a doua registre
independente intr-o singura instruciune. Se obine astfel o eficiena sporita in execuie (de pana la
zece ori mai rapide decat microcontrorelerele convenionale CISC).
ATmega16 este un microcontroler RISC pe 8 bii realizat de firma Atmel. Caracteristicile principale
ale acestuia sunt:
-16KB de memorie Flash reinscriptibil pentru stocarea programelor
-1KB de memorie RAM
-512B de memorie EEPROM
-dou numrtoare/temporizatoare de 8 bii
-un numrtor/temporizator de 16 bii
-conine un convertor analog digital de 10 biti, cu intrri multiple
-conine un comparator analogic
-conine un modul USART pentru comunicaie serial (port serial)
-dispune de un cronometru cu oscilator intern
-ofer 32 de linii I/O organizate n patru porturi (PA, PB, PC, PD).
Structura intern general a controlerului este prezentat n Figura 1. Se poate observa c exist o
magistral general de date la care sunt conectate mai multe module:
-unitatea aritmetic i logic (ALU)
-registrele generale
-memoria RAM i memoria EEPROM
5

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

-liniile de intrare (porturile I/O Lines) i celelalte blocuri de intrare/ieire. Aceste ultime module
sunt controlate de un set special de registre, fiecare modul avnd asociat un numr de registre
specifice.
Memoria Flash de program mpreun cu ntreg blocul de extragere a instruciunilor, decodare
i execuie comunic printr-o magistral proprie, separat de magistrala de date menionat mai sus.
Acest tip de organizare este conform principiilor unei arhitecturi Harvad i permite controlerului s
execute instruciunile foarte rapid.
Modul Power-down salveaza coninutul registrelor, dar blocheaza Oscilatorul, dezactivnd
toate celelalte funcii al chip-ului pan la urmatoarea Intrerupere Externa sau Reset hardware. In
modul Power-save, timer-ul asincron continua sa mearga, permiind user-ului sa menina o baza de
timp in timp ce restul dispozitivului este oprit.
In 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. In modul standby
extins(Extended Stanby Mode), atat Oscilatorul principal cat i timer-ul asincron continu s
funcioneze.
Memoria flash (On-chip) permite s fie reprogaramat printr-o interfa serial SPI , de
catre un programator de memorie nonvolatil convenional, sau de ctre un program de boot Onchip ce ruleaza pe baza AVR. Programul de boot poate folosi orice interfata pentru a incarca
programul de aplicaie in memoria Flash .
Combinnd un CPU RISC de 8 bii cu un Flash In-system auto programabil pe un chip
monolithic, ATmega 16 este un microcontroler puternic ce ofera o solutie extrem de flexibil i cu
un cost redus n comparaie cu multe altele de pe piaa.
ATmega 16 AVR este susinut de o serie completa de instrumente de program i de
dezvoltare a sistemului, care include: compilatoare C, macroasambloare, programe debug/ simulare
etc.

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Structura interna :

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Descrierea pinilor:

VCC Sursa de curent


GND Masa
Port A (PA7 .. PA0)
Port-ul A servete drept port de intrri analogice pentru Convertorul A/D.
Port-ul A serveste de asemenea i ca un port bidirecional I/O de 8 bii,n cazul n care
Convertorul A/D nu este folosit. Pinii de port pot fi conectai opional la VCC prin rezistori interni,
(selectai pentru fiecare bit). Buffer-ele de ieire ale Portului A au caracteristici de amplificare .
Port B (PB7.. PB0)
Portul B este un port I/O de 8 bii bidirecional cu rezistori interni (opionali).
Buffer-ele de ieire ale Port-ului B au caracteristici de amplificare.
Port-ul B indeplinete de asemenea funcii speciale ale microcontrolerului ATmega 16
Port C (PC7PC0)
Portul C este un port I/O de 8 bti bidirecional cu rezistori interni (opionali).
Buffer-ele de ieire ale Port-ului C au caracteristici de amplificare.
Daca interfaa JTAG (de depanare) este activat, rezistorii pinilor PC5(TDI), PC3(TMS) si
PC2(TCK) vor fi activai, chiar daca are loc o resetare.
Port-ul C indeplinete de asemenea funcii ale interfeei JTAG i alte funcii speciale ale
ATmega 16.
Port D (PD7PD0)
Portul D este un port I/O de 8 bii bidirecional cu rezistori interni conectai optional la VCC
(selectai pentru fiecare bit). Buffer-ele de output ale Port-ului D au caracteristici de amplificare.
Port-ul D indeplinete de asemenea funcii speciale ale ATmega 16.

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Reset
Un nivel sczut la acest pin mai mare ca durat decat o valoare prestabilit, va genera o
iniializare.
XTAL 1: Intrare pentru amplificatorul inversor al Oscilatorului;
XTAL 2: Ieire pentru amplificatorul inversor al Oscilatorului.
AVCC: AVCC este pin de alimentare pentru Port-ul A si Convertorului A/D. Trebuie conectat extern
la Vcc, chiar dac ADC nu este folosit. Daca ADC este folosit , ar trebui conectat la Vcc printr-un
filtru trece -jos.
AREF :AREF este pinul de referina analogica pentru Convertorul A/D

1.2 Nucleul CPU AVR


n aceasta parte se discut despre arhitectura, nucleului AVR, n general. Funcia principal a
nucleului CPU este aceea de a asigura execuia corect a programului. Din acest motiv , nucleul
CPU este capabil s acceseze memoriile, execute calcule, controleze perifericele i sa controleze
ntreruperile.

Fig.3.1 Diagrama bloc a nucleului CPU AVR

Pentru a maximiza performana ,AVR folosete o arhitectura Harvard:


9

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

-cu memorii separate i magistrale pentru program i informaii. Instruciunile din memoria
programului sunt executate ntr-un singur nivel n timp ce o instruciune este executat, urmatoarea
este preadusa de la memoria de program. Acest concept permite executarea instruciunilor la fiecare
ciclu de ceas. Memoria de program este o memorie flash reprogramabil.
Cel mai accesat registru conine 328 bii, scopul este de a accesa registrele ntr-un singur
ciclu de ceas .Acest singur timp de acces se datoreaz unitai ALU (Aithmetic Logic Unit). ntr-o
tipic unitate ALU operaia are loc astfel: operanzi sunt scoi din registru se efectueaz operaia si
rezultatul este introdus n regitri toate acestea ntr-un singur ciclu de ceas.
ase din cele 32 de registre pot fi folosite ca trei registre de 16 bii cu acess indirect la
informaii, permitnd astfel calcularea eficienta a adresei.Una dintre aceste adrese poate fi folosita
pentru (tabele de cautare ), a cauta tabele, n memoria flash. Aceste noi funcii adaugate registrelor
sunt la al 16 bit X, Y si Z descris mai tarziu in aceasta parte.
ALU efectueaz (suport) operaii aritmetice i logice ntre registre sau ntre o constant i
un registru. Dup efectuarea unei operaii aritmetice registrul afiseaz rezultatul operaiei.
Programul furnizeaz srituri condiionate, necondiionate i apelri de instriciuni capabile
s acceseze tot spaiul de adres. Majoritatea instruunilor AVR sunt formate dintr-un cuvant 16 biti).
Fiecare memorie de program conie o instrucine de 16 sau 32 de bii.
Spaiul memoriei flash de program este mparit n dou seciuni, seciunea BOOT i seciune
de aplicare a programelor. Seciunea BOOT are bii speciali pentru protecia la scriere i
citire/scriere. Instruciunea SPM cu ajutorul creia se scrie n memoria flash de aplicaii trebuie sa
fie n seciunea BOOT.
n timpul ntreruperileor sau a apelri subrutinelor, adresa de ntoarcere este coninuta pe
Stack. Stack-ul este evectiv alocat n nformaiile generale SRAM i n consecin mrimea Stackului este limitat doar de marimea total a SRAM i de uzura ei. Toi utilizatori de program trebuie
s iniializeze SP(Stack Pointer) nainte ca subrutina sau ntreruperea s fie executata. Stack Pointerul se poate citi/scrie n spaiul de I/O. Informaiile din SRAM pot fi accesate cu uurina 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 Status Register se afla
bitul de ntreupere global. Toate ntreruperile au prioritate n funcie de locul n tabelul de vectori
de ntrerupere ai ntreruperilor lor. Cu cat este mai jos situat n tabel vectorul ntreruperi cu att acea
ntrerupere are prioritate mai mare. Prioritatea mai mare o are ntreruperea cu vectorul cel mai slab
plasat in tabel.
Spaiul de memorie I/O conine 64 de arese pentru funciuni periferice ale CPU ca:
controlul registrelor, indicatorul SPI, sau alte funcii de I/O. Memoria I/O poate fi accesat direct sau
indirect .
1.2.1 ALU- Unitatea Aritmetica Logica
Cea mai inalt performan a AVR ALU este aceea c lucreaz direct cu cele 32 de registre.
In timpul unui singur ciclu de ceas se efectueaza operaii aritmetice ntre registre sau ntre registre i
o constanta , acestea sunt executate imediat. Operaiile pe care le executa unitatea ALU sunt
mparite n trei mari categorii: aritmetice, logice i funciuni de bit. Unele implementri ale
arhitecturi pot efectua i multiplicri cu sau far semn i/sau n regim de fracie. Mai multe detalii se
gsesc n Setul de Instruciuni.

10

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

1.2.2 Registrul de stare


Situaia registrului conine informaii despre ultima operaie aritmetica efectuat. Aceast
informaie poate fi folosit pentru a alterna de la program la executarea unei alte operaii mai
prioritar. Situaia registrului este actualizat dup fiecare execuie a unei operaii aritmetice, aa
cum se specific n Setul de Instructiuni. Aceasta poate duce n multe cazuri la nefolosirea concreta
a fiecrei instruciuni n parte ci a unui cod mai compact de instruciuni care efectueaz mai rapid
operaia.
Situaia registrului nu este automat stocat cnd apare o ntrerupere de rutin i mai apoi
restaurat cnd se ntoarce la program. Acest lucru trebuie manipulat de program.
AVR Status Register este definit ca:

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


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

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Indicatorul de zero indic zero atunci cand rezultatul operaiilor logice sau aritmetice este
zero.
Bitul 0- Carry Flag (indicatorul de transport)
Indicatorul de transport indic transport n cadrul operaiilor logice sau aritmetice.
1.2.3 Registrele de uz general
Registru fiier este optim pentru setul de instruciuni al arhitecturii AVR RISC. n scopul realizri
performanei i flexibilitai cerute, urmatoarele I/O sunt ndeplinite de registru fiier:
-8 bii actionai la intrare rezult 8 bii la intrare
-2 8 bii acionai la ieire rezult 8 bii la intrare
-28 bii actionai la ieire rezult 16 bii la intrare
-16 bii actionai la ieire rezult 16 bii la intrare.

Fig.3.2 Structura celor 32 de regitri i cadrul CPU


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

12

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Fig.3.3 Registrele X, Y, Z
1.2.5 Stack Poiter (Indicatorul de stiva)
Stiva este folosit n principal pentu magazinarea temorar a datelor. Pentru magazinarea
variabilelor locale i pentru redarea adreselor dup efectuarea ntreruperilor sau a subrutinelor.
Informatia 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 joase.
Indicatorul de stiv indic spatiul de date din memoria SRAM a stivei unde sunt localizate
ntreruperile i subrutinele. Acest spatiu trebuie definit de program nainte de a se executa vreo
subrutina sau ntrerupere. Indicatorul de stiv este decrementat de 1 cnd se introduce alte date n
siv prin instruciunea PUSH, i decrementat de 2 cnd adresele de revenire la program sunt
introduse n stiv cu subrutinele sau cu instrutiunile. Indicatorul de stiv este incrementat de 1 cnd
datele sunt terse din stiv cu instruciunea POP, i incrementat de 2 cnd datele sunt scoase din
stiv i se revine din subrutina RET sau din intreruperea RETI.
Indicatorul de stiv AVR este implementat ca fiind dou registre de 8 bti n spaiul alocat I/O.
Numrul de bii folosii sunt suboronai implementri. Spaiul de adrese la unele implamentri ale
arhitecturi AVR sunt aa de mici nct nu este necesar dect SPL-ul. n acest caz registrul SPH nu
mai este prezent figura 3.4

Fig.3.4 Indicatorul de stiv


1.2.6 Execuia n timp a instruciunilor
Aceast parte descrie n general timpul adresat executri instruciunilor. AVR CPU este
condus de ceasul CPU generat direct de la surs. Nu se folosete nici un ceas interor.
13

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Figura 3.5 ne prezint n paralel o instruciune provocat i instruciunea de execuie permis


de arhitectura Harward i accesul rapid la regitrele fiier. Acesta este conceptul de baz pentru a
obine mai mult de 1 MIPS /MHz i cele mai bune rezultate din punct de vedere funciuni/cost ,
funciuni/timp i funciuni/unitate.

Fig.3.5 Instruciuni paralele de executie


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

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


1.2.7 Manipularea ntreruperilor i resetrilor
AVR furnizeaz mai multe tipuri de ntreruperi. Aceste ntreruperi i vectorul de resetare au
cte un vector de proram fiecare aflat n spaiul memoriei de program. Tuturor ntreruperilor le sunt
alocate individual bii care trebuiesc scrii logic o dat cu bitul GIE n starea registrului n scopul de
permite ntreruperea. n funcie de starea n care se afl Program Counter-ul, ntreruperile pot fi
invalidate, atunci cnd BLB 02 sau BLB12 sunt programate .Aceast rubric mbunatete
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 intreruperea
are nivelul mai jos cu att prioritatea este mai mare. RESET are cea mai mare prioritate, iar dup
aceasta este INTO-cererea de ntrerupere externa 0. Vectori de ntrerupere pot fi mutai la nceputul
seciunii Boot Flash prin setarea bitului IVSEL din registrul global de control al ntreruperilor
(GICR). Vectorul de RESET poate fi deasemenea mutat la nceputul aceleiai sectiuni prin
programarea BOOTRST.
14

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Cnd se ntampla o ntrerupere GIE bitul I 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 randul lor, ntrerupe ntreruperile de rutina. Bitul I este automat corectat
cnd RETI este executat.
Sunt practic dou tipuri de ntreruperi . Primul tip este declanat (dat) de evenimentele care
seteaz indicatorul de ntrerupere. Pentru aceste ntreruperi Program Counter-ul este trimis la vectori
de ntrerupere n scopul executri ntreruperi de rutin i hardware-ul sterge indicatorul de
ntrerupere corespunzator. Indicatorul de ntrerupere poate fi ters i prin scrierea 1 logic. Dac se
ntampla o ntrerupere n timpul n care bitul care permite ntreruperea este ters, atunci indicatorul
de ntrerupere va fi setat s retin ntreruperea pan cnd aceasta va putea fi permis , sau
indicatorul este ters de software. n caz similar se procedeaz atunci cand este vorba de tergerea
indicatorului GIE (Global Interrupt Enable) .
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. Daca condiia de ntrerupere
dispare nainte ca ntreruperea s fie permis, ntreruperea nu va mai fi executat.
Cand AVR iese dintr-o ntrerupere se intoarce la programul principal i mai execut o data
instruciunile nainte de a interveni alta ntrerupere.
Starea registrului nu este automat stocat cand apare o ntrerupere de rutin, nici cand revine
din ntreruperea de rutin. Acesta trebuie susinut de software.
Cnd se folosete instruciunea CLI pentru invalidarea ntreruperilor, ntreruperea va fi
invalidat imediat. Nici o ntrerupere nu va mai fi executat dup acionarea instruciuni CLI, chiar
dac se ntampl simultan cu instruciunea CLI. n exemplu urmtor se arat cum aceasta poate fi
folosit pentru evitarea ntreruperilor n timpul scrieri memoriei EEPROM.

Cnd se folosete instruciunea SEI pentru a permite ntreruperi, instruciunea SEI este
rulat naintea oricarei instruciuni aflate n asteptare, aa cum se arat n exemplu.

15

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

1.2.8 Timpul de raspuns la ntreruperi


Raspunsul pentru executarea tuturor ntreruperilor permise de AVR este dat n minim patru
cicluri de ceas. Dupa patru cicluri de ceas adresa vectorului de program pentru ntreruperea actuala
este executat. n timpul celor patru cicluri de ceas , Program Counter-ul este n stiv. n mod
normal vectorul sare la ntreruperea de rutin i aceast saritur dureaz trei cicluri de ceas. Dac are
loc o ntrerupere n timpul executri unor instruciuni care dureaz mai multe cicluri de ceas aceasta
va fi terminata nainte de a executa ntreruperea. Dac are loc o ntrerupere n timp ce MCU este n
stand-by executarea ntreruperi dureaz patru cicluri de ceas. Aceast cretere a timpului se
datoreaz faptului c MCU este n stand-by i trebuie s ias din aceast stare pentru a se executa
ntreruperea.

1.3 Organizarea memoriei


ATmega 16 AVR are dou spaii de memorie principal, spaiul pentru Memoria de Date i
pentru Memoria de Program. n plus, ATmega16 are i o memorie nevolatil EEPROM pentru
memorarea datelor. Toate cele trei tipuri de memorie sunt cu adresare liniar.

Fig.3.7 Memoria de program


ATmega 16 conine o memorie flash reprogramabil (In-system On-chip) de 16 Ko pentru
programe. Deoarece toate comenzile pentru AVR sunt de 16 i 32 bii, Flash-ul este organizat ca
16

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

8Kx16. Pentru securitatea software-ului , spaiul pentru memoria de programe Flash este mparit n
doua seciuni: seciunea de program boot i seciunea pentru programe de aplicaie.
Memoria Flash suport cel putin 10000 de cicluri de scriere/ tergere. Counter-ul
programului de la ATmega 16 (PC) are o lungime de 13 bii, ceea ce permite adresarea unei memorii
de 8*1024 locaii de 16 bii.
1.3.1 Memoria de date SDRAM
Figura de mai jos arat cum este organizat memoria SDRAM ATmega 16. Primele 96 de
locaii se refer la Fiierul de Registre, i urmatoarele 1024 de locaii sunt dedicate datelor interne
SDRAM.
Registrele generale 26, 27, 28, 29, 30, 31 pot fi utilizate cu denumiri specifice:
R26: X octet inferior
R27: X octet superior
R28: Y octet inferior
R29: Y octet superior
R30: Z octet inferior
R31: Z octet superior

Fig.3.8 Memoria de date SDRAM

1.3.2 Memoria de date EEPROM


ATmega 16 conine 512 octei de memorie de date EEPROM. Este organizat ca spaiu
separat de date, n care pot fi citii i scrii bii individuali. EEPROM-ul are o durata de viaa de cel
putin 10,000 de cicluri scriere/tergere.
17

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Accesul citire/scriere EEPROM


Regitrii de acces EEPROM sunt n spaiul I/O.
Cnd se citete EEPROM, CPU este oprit timp de patru perioade de ceas nainte ca
urmtoarea comanda s fie executat. Cnd se scrie EEPROM, CPU este oprit timp de dou
perioade de ceas nainte ca urmtoarea comand s fie executat.
Regitrii de adresa EEPROM EEARH si EEAR

Fig.3.9 Ragitrii de adres EEARH i EEARL


Biii 9 15 sunt bii rezervai n Atmega 16 i vor lua ntotdeauna valoarea 0.
Biii 0 - 8 sunt bii de adresa (total 9 bti, deci se adreseaz 0.5 KB).
Regitrii de adres de mai sus, EEARH si EEARL specific adresa EEPROM pentru cele
512 locaii ale spiului EEPROM. Locaiile de memorie se adreseaz liniar de la 0 la 511.
Pentru operaia de scriere a EEPROM, registrul EEDR conine date care sa 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.
Registrul de date EEPROM EEDR

Fig.3.10 REgistrul de dete EEDR


Registrul de control EEPROM EECR

Fig.3.11 Registrul de date EECR


Bii 7..4 - aceti bii sunt bii rezervai la ATmega 16 i au valoarea zero.
Bitul 3 - EERIE: Activarea EEPROM Ready Interrupt

18

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Scrierea n EERIE a unui 1 logic, activeaza funcia lui EEPROM Ready Interrupt (pregatit
de ntrerupere). Scrierea n EERIE a unui 0 logic dezactiveaza ntreruperea . Funcia EEPROM
Ready Interrupt genereaz o ntrerupere constanta cnd EEWE este ters.
Bitul 2 EEMWE : EEPROM Master Write Enable (activarea funciei principale de scriere
EEPROM)
Bitul EEMWE determin dac setarea lui EEWE la unu genereaz scrierea lui EEPROM.
Cnd este setat EEMWE, setarea lui EEWE va produce scriere de date n EEPROM la adresa
selectat. Dac EEMWE este zero, atunci setarea lui EEWE nu va avea nici un efect.
Bitul 1 EEWE : EEPROM Write Enable (activarea scrierii EEPROM)
Semnalul de activare a scrierii EEPROM EEWE este semnalul de scriere a EEPROM. Cnd
adresa i datele sunt setate corect, bitul EEWE trebuie s fie scris la unu pentru ca valoarea s fie
scris pe EEPROM. Bitul EEMWE trebuie s fie scris la unu nainte ca unu logic s fie scris pe
EEWE, altfel nu va avea loc nici o scriere a EEPROM. Urmtoarea procedur trebuie urmat cnd
se scrie EEPROM (ordinea pasilor 3 si 4 nu este esenial):
1. Ateptai pn cnd EEWE devine zero
2. Ateptai pn cnd SPMEN din SPMCR devine zero
3. Scrieti noua adresa EEPROM pe/la EEAR (opional)
4. Scriei noile date EEPROM pe/ la EEDR(opional)
5. Scriei unu logic pe/la bitul EEMWE n timp ce se scrie EEWE n EECR
6. n patru cicluri de ceas dupa ce s-a setat EEMWE , scriei unu logic pe /la EEWE.
EEPROM nu poate fi programat n timp ce CPU scrie memoria flash. Software-ul trebuie s
verifice dac programarea memoriei flash este complet nainte de a iniia o nou scriere a
EEPROM. Pasul doi este relevant doar n cazul n care programul software conine un Boot Loader
(activator de boot) care permite CPU s programeze memoria flash. Dac memoria flash nu este
niciodat updatat de catre CPU, atunci pasul doi poate fi omis.
Atentie: o ntrerupere ntre pasii 5 si 6 va anula ciclul de scriere ,cci activarea Master a
EEPROM va fi anulat. Dac o rutin de accesare a EEPROM ntrerupe o alt accesare EEPROM,
atunci regitri EEAR i EEDR vor fi modificai, astfel cauznd anularea accesului ntrerupt al
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 comand i datele
cerute sunt disponibile imediat. Cnd EEPROM este citit, CPU este oprit timp de patru cicluri
nainte ca urmtoarea comand sa fie executat.
Oscilatorul calibrat este folosit la cronometrarea accesrilor EEPROM. Tabelul 1 arat timpii
normali de programare a accesarilor EEPROM din CPU.
Tabelul 1

19

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

1.3.3 Spatiul de memorie I/O


Toate I/O-urile de la ATmega 16 i perifericele sunt plasate n spaiul I/O. Locaiile I/O sunt
accesate de ctre comenzile IN i OUT , transfernd datele dintre cei 32 de regitrii de lucru i
spaiul I/O. Regitrii I/O cuprinsi ntre valorile adreselor $00 - $1F sunt direct accesate folosind
comenzile SBI i CBI. La aceti regitrii 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 regitrii I/O ca spaiu de date cu instruciunile LD i ST,
trebuie adaugat la aceste adrese, $20, adica salt peste zona regitrilor de uz general.

1.4 Controlul sistemului i reset -ul


1.4.1 Resetarea AVR
Pe durata resetarii, toi regitrii I/O sunt setai la valorile lor iniiale, i programul ncepe
execuia de la Reset Vector. Instruciunea amplasat la Reset Vector trebuie s fie o instruciune
JMP-salt absolut-la procedura de efectuare a resetrii .n cazul n care programul nu permite
niciodata o surs ntrerupt, nu sunt folosii n acest caz Interrupt Vectors, i codul de program
obinuit poate fi amplasat la aceste locaii. Acelai lucru se ntampl n cazul n care Reset Vector
este n seiunea Application n timp ce Interrupt Vectors sunt n sectiunea Boot sau invers. Diagrama
de circuit din figura 15 prezint logica de resetare. Tabelul 2 definete parametrii electrici ai
circuitului de resetare.
Porturile I/O ale AVR sunt imediat resetate la starea lor iniiala atunci cnd o surs de
resetare devine activa. Acest lucru nu necesit rularea nici unei surse de ceas.
Dupa ce toate sursele de resetare au devenit inactive, este invocat un numrtor de ntarzieri,
care extinde Internal Reset. Acest lucru permite puterii s ating un nivel stabil nainte s nceapa o
operaie normal. Sfaritul perioadei de timp de lucru al numaratorului de ntarzieri este definit de
catre utilizator prin CKSEL Fuses..
1.4.2 Surse de resetare
ATmega 16 are cinci surse de reset:
Power-on Reset. MCU este resetat atunci cnd tensiunea de alimentare este sub pragul Power-on
Reset.
External Reset. MCU este resetat atunci cnd un nivel sczut este present pe pinul RESET pentru
mai mult dect lungimea de impuls minim.
Watchdog Reset. MCU este resetat atunci cnd expir perioada Watchdog Timer i cnd Watchdog
este n funciune.
Brown-out Reset. MCU este resetat atunci cnd tensiunea de alimentare VCC este sub pragul
Brown-out Reset (VBOT) i atunci cnd este pus n funciune Brown-out Detector.
JTAG AVR Reset. MCU este resetat atta timp ct exist unu logic n Reset Register, unul dintre
lanurile de scanare ale sistemului JTAG.

20

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Fig.3.12 Schema logic a resetri


Tabelul 2

Not: 1.Power-on Reset nu va funciona dect dac tensiunea de alimentare a fost sub
valoarea VPOT (n scdere).
2. V BOT poate fi sub tensiunea minim nominal de operare n cazul anumitor
componente. Pentru componente de acest fel, componenta este testat pana la V CC=VBOT n timpul
procesului de producie. Acesta garanteaz faptul c Brown-out Reset se va produce nainte ca VCC
s scad la o tensiune cnd modul de funcionare al microcontrolerului nu mai este garantat. Testul
este realizat folosind BODLEVEL=1 pentru ATmega16L si BODLEVEL=0 pentru
ATmega16.BODLEVEL=1 nu este aplicabil pentru ATmega16.
21

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

1.4.3 Pornire Reset-Power-on Reset


Un impuls Power-on Reset este generat printr-un circuit de detecie On-chip Nivelul de
detecie este definit n tabelul 2. POR este activat de fiecare dat cnd V CC este sub nivelul de
detecie. Circuitul POR poate fi folosit pentru a declana Start-up Reset, ct i pentru a detecta
absena tensiunii de alimentare. Figura 3.13
Un circuit Power-on Reset(POR) asigur faptul c dispozitivul este resetat din Power-on.
Atingnd tensiunea de prag Power-on Reset invoca numrtorul de ntrzieri, care determin ct
timp dispozitivul este inut n RESET dup ce VCC urc. Semnalul de RESET este activat din nou,
far nici o ntarziere, atunci cnd VCC descrete sub nivelul de detecie.

Fig.3.13 MCU Start-up, RESET

Fig.3.14 MCU Start-up, RESET Extended Externally


1.4.4 Reset extern-External Reset
External Reset este generat de un nivel sczut pe pinul RESET. Impulsurile Reset mai mult
dect lungimea minim de impuls (tabelul 2) va genera un reset, chiar dac ceasul nu mai ruleaz.
Impulsurile mai scurte nu mai sunt garantate pentru a genera un reset. Atunci cnd semnalul aplicat
atinge tensiunea Reset Treshold-VRST-la vrful su pozitiv, numrtorul de ntrzieri pornete MCU
dup ce a expirat perioada de timp tTOUT.

22

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Fig.3.15 External Reset

1.4.5 Monitorizarea nuvelului tensiunii de alimentare


ATmega16 are ncorporate un circuit On-chip Brown-out Detection (BOD) pentru
monitorizarea nivelului tensiunii VCC pe durata funcionarii prin compararea acesteia cu un nivel fix
de declanare. Nivelul de declanare pentru BOD poate fi selectat prin contopirea BODLEVEL sa
fie 2.7V (BODLEVEL neprogramat), sau 4.0V(BODLEVEL programat). Nivelul de declanare are
un histerezis pentru a asigura o detecie Brown-out Detection liber. Histerezisul de pe nivelul de
detecie ar trebui s fie interpretat ca fiind
VBOT+= VBOT +VHYST/2 i VBOT- = VBOT VHYST/2
Circuitul BOD poate fi nchis/deschis prin fuziunea BODEN. Atunci cnd BOD este deschis
(BODEN programat), si VCC descrete la o valoarea sub nivelul de declanare (V BOT+ in figura 3.16),
Brown-out Reset este activat imediat. Atunci cnd VCC crete peste nivelul de declanare ( VBOT+ in
figura 3.16), numrtorul ntrzierilor pornete MCU dup ce perioada de timp tTOUT a expirat.
Circuitul BOD va detecta numai o cdere a V CC n cazul n care tensiunea rmne sub nivelul
de declanare pentru un timp mai mare tBOD prezentat in tabelul 2.

Fig.3.16 Detecie Brown-out

23

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

1.4.6 Watchdog Reset


Atunci cnd Watchdog expir, va genera un impuls de reset scurt pe durata unui ciclu CK. La
varful de cdere al acestui impuls, timerul de ntarziere ncepe s numere perioada de Time-out.

Fig.3.17 Watchdog reset


1.4.7 Registrul Control MCU i Stare-MCUCSR
MCUCSR furnizeaz informaie asupra careia sursa de reset a provocat un reset MCU.

Fig.3.18 Registrul MCUCSR


Bitul 4- JTRF Reset Flag
Acest bit este setat n cazul n care un reset este provocat de un unu logic n registrul JTAG
Reset selectat prin instruciunea JTAG AVR_RESET. Acest bit este resetat de ctre un reset Poweron, sau prin scrierea unui zero logic la indicator.
Bitul 3- WDRF: Watchdog Reset Flag
Acest bit este setat n cazul n care se produce o resetare a Watchdog. Bitul este resetat printrun Power-on Reset, sau prin scrierea unui zero logic la indicator.
Bitul 2- BORF: Brown-out Reset Flag
Acest bit este setat n cazul n care se produce Brown-out Reset. Bitul este resetat prin
Power-on Reset, sau prin scrierea unui zero logic la indicator.
Bitul 1- EXTRF: External Reset Flag
Acest bit este setat n cazul n care se produce External Reset. Acest bit este resetat prin
Power-on Reset, sau prin scrierea unui zero logic la indicator.
Bitul 0- PORF: Power-on Reset Flag

24

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Acest bit este setat n cazul n care se produce Power-on Reset. Bitul este resetat numai prin
scrierea unui zero logic la fanion.
Pentru a folosi Reset Flags pentru a identifica o condiie de reset, utilizatorul ar trebui s
citeasc i apoi s reseteze MCUCSR ct mai repede posibil n program. n cazul n care registrul
este ters nainte s se produc o alta resetare, sursa de resetare se poate gsi prin examinarea Reset
Flags.
1.4.8 Tensiunea intern de referin
ATmega 16 prezint un spaiu de referin intern. Aceast referin este folosit pentru
detecie Brown-out , i poate fi folosit ca i ieire la comparatorul analogic sau ADC. Referina de
2.56V la ADC este generat de ctre spaiul de referin.
Tensiunea de referin are un timp de declanare care poate influena modul n care ar trebui
folosit.Timpul de pornire este dat n tabelul 3. Pentru a economisi energie, referina nu este
ntotdeauna activat. Referina este activat pe durata urmtoarelor situaii:
1.Atunci cnd BOD este activat (prin programarea BODEN Fuse).
2.Atunci cnd referina este conectat la comparatorul analogic (prin setarea bitului ACBG n
ACSR).
3.Atunci cnd ADC este activat.
Cu toate acestea, atunci cnd BOD nu este activat, dup setarea bitului ACBG sau activarea
ADC, utilizatorul trebuie ntotdeauna s permit activarea referinei naintea folosirii ieirii
comparatorului analogic sau ADC-ului. Pentru a reduce consumul de energie n modul Power-down,
utilizatorul poate evita cele trei condiii de mai sus pentru a se asigura ca referina este inactiva
nainte de intrarea n modul Power-mode.
Tabelul 3.

1.4.9 Timerul Watchdog


Timerul Watchdog , figura 3.19, este sincronizat de la un oscillator on-chip separat care
ruleaz la 1Mhz. Aceasta este valoarea tipic la VCC = 5V. Vedei datele de caracterizare pentru
valori tipice la alte nivele aleV CC. Prin controlarea demultiplicatorului Watchdog Timer, intervalul
Watchdog Reset se poate ajusta aa cum se arata n tabelul 17. Instruciunea WDR-Watchdog Resetreseteaz timerul Watchdog. Timerul Watchdog este deasemenea resetat atunci cnd este dezactivat
i atunci cnd se produce Chip Reset. Opt perioade de ciclu diferite pot fi selectate pentru a
determina perioada de resetare. n cazul n care perioada de resetare expir far un alt Watchdog
Reset, ATmega 16 reseteaz i execut din Reset Vector.
Pentru a preveni dezactivarea neintentionata a Watchdog, o secventa speciala de oprire trebuie s fie
urmat atunci cnd Watchdog este dezactivat. Referire la descrierea registrului de control al timerului Watchdog pentru mai multe detalii.
25

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Fig.3.19 Timerul Watchdog


Registrul de control al timerului Watchdog

Fig.3.20 Registrul de control la Watchdog-ului


Bitul 7..5- Res: Reserved Bits
Aceti bii sunt bii rezervai n ATmega16 i vor fi ntotdeauna citii ca fiind zero.
Bitul 4-WDTOE :Watchdog Turn-off Enable
Acest bit trebuie sa fie setat atunci cnd bitul WDE este scris la zero logic. n alt situaie,
Watchdog nu va fi dezactivat. ndata scris la unu, hardware va terge acest bit dup patru cicluri de
ceas. Referire la descrierea bitului WDE pentru o procedura de dezactivare a Watchdog.
Bitul 3- WDE: Warchdog Enable
Atunci cnd WDE este scris la unu logic, timerul Watchdog este activat, i n cazul n care WDE
este scris la zero logic, funcia timerului Watchdog este dezactivat. WDE poate fi ters numai n
cazul n care bitul WDTOE are nivelul logic unu. Pentru a dezactiva i a activa timerul Watchdog ,
trebuie urmat urmtoarea procedura:
1. n cazul aceleiai operaii, scriei un unu logic la WDTOE i WDE. Un unu logic trebuie sa
fie scris la WDE chiar dac este setat la unu inainte s nceapa operatia de dezactivare.
2. n cadrul urmtoarelor patru cicluri de ceas, scriei un zero logic la WDE. Acest lucru
dezactiveaz Watchdog-ul.
Bii 2..0- WDP2, WDP1, WDP0: Watchdog Timer Prescaler 2, 1 i 0
Biii WDP2, WDP1, i WDP0 determin demultiplicarea timerului Watchdog atunci cnd
timer-ul Watchdog este activat. Valorile diferite de demultiplicare i perioadele lor de timeout
corespunztoare sunt prezentate n tabelul 4.
Tabelul 4.

26

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Urmtorul exemplu de cod arat o funcie de asamblare i o funcie C pentru oprirea WDT.
Exemplul presupune c ntreruperile sunt controlate (de exemplu prin dezactivarea global a
ntreruperilor) astfel ncat nici o ntrerupere s nu se produc pe perioada executiei acestor funcii.

1.5 ntreruperi
27

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Aceast seciune descrie mecanismul ntreruperilor ndeplinite de ATmega 16.


1.5.1 Vectorii ntrerupere ai Atmega 16
Tabelul 5

Note: 1. Atunci cnd fuzibilul BOOTRST este programat,mecanismul trece la adresa Boot Loader
pe Reset.
2. Atunci cnd bitul IVSL din GICR este setat,vectorul ntrerupere va fi mutat la nceputul
seciunii Boot
Flash.Adresa fiecrui vector ntrerupere va fi adresa din tabelul de mai
sus,adaugat la nceputul adresei din seciunea Boot Flash.

28

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Tabelul de mai jos exemplific Reset and Interrupt Vectors identificai n combinaii variate ale
setrilor BOOTRST i
IVSEL.Dac programul nu ofer o surs de ntrerupere , vectorii ntrerupere nu vor fi utilizai i
codurile de program uzuale pot fi amplasate n aceste locaii. Acesta este i cazul n care vectorul
Reset este n seciunea Aplicaie, n timp ce vectorii ntrerupere se afl n seciunea Boot sau vice
versa.
Tabelul 6

Not : Sigurana BOOTRST pentru 1 logic este neprogramat iar pentru 0 logic este
programat.
Forma general a programrii adreselor pentru vectorii Reset i Intrerupere n cazul Atmega 16 este :

29

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Atunci cnd sigurana BOOTRST este neprogramat lungimea seciunii Boot este setat la
2k bii iar bitul IVSEL din registrul GICR este setat naintea oricrei posibiliti de apariie a unei
ntreruperi. n acest caz forma general a programrii adreselor vectorilor Reset i Intrerupere este :

Atunci cnd sigurana BOOTRST este programat i seciunea Boot are lungimea setat la
2k bii forma general a programrii adreselor vectorilor Reset i ntrerupere este :

Atunci cnd sigurana BOOTRST este programat seciunea Boot este setat la lungimea de
2k bii i bitul IVSEL din registrul GICR este setat naintea oricrei posibiliti de apariie a unei
ntreruperi , forma general a programrii adreselor vectorilor Reset i ntrerupere este :

30

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

1.6 Transferul ntreruperilor ntre aplicaie i spaiul Boot


Registrul general de control al ntreruperilor supravegheaz identificarea vectorului
ntrerupere este:

Fig.21 Registrul GICR


1.6.1 Registrul general de control al intreruperilor
Bit 1 IVSEL: Interrupt Vector Select
Atunci cnd bitul IVSEL este 0 , vectorul ntrerupere este amplasat la nceputul memoriei
Flash.Cnd acest bit este setat (pornit), vectorul ntrerupere trece la nceputul seciunii Boot Loader
a memoriei Flash.Adresa nou a nceputului seciunii Boot Loader este determinat de siguranele
BOOTSZ. Pentru a se evita modificri nedorite ale vectorilor ntrerupere , pentru schimbarea bitului
IVSEL trebuie urmat procedura urmtoare:
1.Programarea bitului Interrupt Vector Change Enable (IVCE) n unu.
2.Pe parcursul a patru cicluri , se scrie valorea dorit pentru IVSEL pe durata trecerii n
zero a bitului IVCE.
ntreruperile vor fi automat dezactivate atunci cnd aceast seciune se execut.ntreruperile
sunt dezactivate n ciclul n care IVCE este setat,rmnnd dezactivate pn cnd instruciunea de
scriere a bitului IVSEL este executat.n cazul n care bitul IVSEL nu este programat , ntreruperile
vor rmne dezactivate pe durata celor 4 cicluri. Bitul I din Status Register nu va fi afectat de
dezactivarea automat a ntreruperilor.
Not : Dac vectorii ntrerupere se gsesc n seciunea Boot Loader i Boot Lock bit BLB02 este
programat ntreruperile sunt dezactivate pe durata execuiei aplicaiei.Dac vectorii ntrerupere se
gsesc n seciunea aplicaiei i Boot Lock bit BLB02 este programat , ntreruperile sunt dezactivate
pe durata execuiei seciunii Boot Loader.
.Bit 0 IVCE: Interrupt Vector Change Enable
31

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Bitul IVCE trebuie programat 1 logic pentru a mpiedica schimbarea bitului IVSEL.Bitul IVCE
este decodat hardware pe durata a patru cicluri dup programarea sa ,sau dup programarea bitului
IVSEL.Setarea bitului IVCE va dezactiva ntreruperile,vezi descrierea detaliat a IVSEL de mai sus.

1.7 Porturile I/O


1.7.1 Introducere
Toate porturile AVR , utilizate ca porturi digitale I/O ndeplinesc funciile de citire/scriere i
pot fi modificate.Cu instruciunile SBI i CBS direcia unui port-pin poate fi schimbat fr ca acest
lucru s afecteze ceilali pini.Aceste caracteristici se pstreaz i n cazul modificrii valorii de
driver(dac este configurat ca o ieire) sau de activare/dezactivare dac rezistorii sunt
dezactivai(dac este configurat ca o intrare).Fiecare buffer de ieire are caracteristici de drive
simetrice cu ambele capaciti ale sursei.Pinul driver-ului are suficient putere pentru o afiare
direct.Toi pinii porturilor au fiecare rezistori de pull-up selectabili cu rezerve de putere.Toi pinii
I/O au diode de protecie la ambele surse de curent digitale si mpmntare.

Fig.3.22 Schema echivalent a pinilor I/O


32

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Toi regitrii i biii la care se face referire n aceast seciune sunt prezentai la forma
general.Un nivel sczut x reprezint numrul literei portului i un nivel sczut n reprezint
numrul de bit.La utilizarea regitrilor i biilor n program, forma precis trebuie s fie PORTB3
pentru bitul numrul 3 al portului B, iar forma general este PORTxn. Pentru fiecare port I/O sunt
alocai trei regitrii,cte unul pentru Registrul de Date-PORTx,Registrul Fluxului de Date-Data
Direction Register DDRx,i portul de intrare al pinilor-Port Input Pins PINx. Port Input Pins I/O
este read only iar Data Register i Data Direction Register sunt read/write.Adiional bitul Pull-up
Disable PUD n SFIOR cnd este setat ,dezactiveaz rezistenele pull-up pentru toi pinii n toate
porturile.
Majoritatea pinilor porturilor sunt multiplexai cu funcii alternative pentru caracteristicile
mecanismelor de la periferie.Interacionarea fiecrei funcii alternative cu fiecare port este
prezentat n Funcii alternative ale porturilor.
Not:imposibilitatea de accesare a uneia dintre funciile alternative ale unuia dintre porturi nu
afecteaz utilizarea celorlai pini n portul respectiv ca general digital I/O.
1.7.2 Porturi I/O
Porturile sunt bi-direcionale cu pull-up opional intern.Figura 3.23 prezint funcionarea
unui port I/O, a pinului Pxn:

Fig 3.23 Geleral digital I/O


33

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Not : WPx, WDx, RRx, RPx, i RDx sunt comuni tuturor pinilor n interiorul aceluiasi
port.clkI/O,SLEEP, i PUD sunt comuni tuturor porturilor.
1.7.3 Configurarea pinilor
Fiecare port este alctuit din trei regitrii : DDxn, PORTxn,i PINxn.iii DDxn sunt adresai
de DDRx I/O , biii PORTxn sunt adresai de PORTx I/O , biii PINxn sunt adresai de PINx I/O.
Bitul DDxn din registrul DDRx selecteaz direcia acestui pin.Dac DDxn este setat 1 logic
atunci Pxn este configurat ca pin de ieire.Daca DDx este setat 0 logic Pxn este configurat ca pin
de intrare.
Daca PORTxn este configurat 1 logic atunci cnd pinul este setat ca pin de intrare ,
rezistorul pull-up este activat.Pentru ca rezistorul pull-up sa treac n poziia off , PORT xn trebuie
s fie setat n 0 logic sau pinul trebuie s fie configurat ca un pin de ieire.Atunci cnd funcia
Reset devine activ,portul pinilor are trei stri,chiar dac ceasul nu funcioneaz.
Dac PORTxn este configurat 1 logic atunci cnd pinul este setat ca pin de ieire portul
pinilor este unu. Dac PORTxn este setat 0 logic atunci cnd pinul este configurat ca pin de ieire
portul pinilor este zero.
La schimbarea ntre cele trei stri ({DDxn, PORTxn} = 0b00) i ieirea pe nivel nalt
({DDxn,PORTxn} = 0b11), o stare intermediar cu posibilitatea pull-up ({DDxn, PORTxn}
=0b01)sau ieirea la nivel sczut ({DDxn, PORTxn} = 0b10) trebuie sa apar.n mod normal
posibilitatea strii de pull-up este total acceptat,la fel cum o impedan nalt nu va sesiza diferena
ntre un driver puternic i un pull-up.Dac nu se ntmpl acest lucru bitul PUD n registrul SFIOR
poate fi setat pentru dezactivarea tuturor pull-ups din toate porturile.
Schimbul dintre o intrare cu pull-up i o ieire cu nivel sczut va genera aceeai
problem.Utilizatorul trebuie s foloseasc oricare din cele trei stri ({DDxn, PORTxn} = 0b00) sau
ieirea de nivel nalt ({DDxn, PORTxn} = 0b11)
ca o etap intermediar.
Tabelul 7 rezum controalele semnalelor pentru valorile pinilor :

1.7.4 Citirea valorilor pinilor


Independent de setrile bitului DDxn Data Direction portul pinului poate fi citit prin PINxn
Register bit.
n figura 3.24 se arat c PINxn Register bit i precedentul declic constituie un sincronizator. Acesta
introduce o ntrziere dac pinul fizic i schimb valoarea aproape de maximul ceasului intern
34

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

.Figura 24 prezint o diagram de timp a sincronizrii atunci cnd se citete o solicitare extern a
valorii unui pin.Maximul i minimul propagrii unei ntrzieri sunt indicate de tpd,max i tpd,min.

Fig.3.24
Se consider perioada ceasului ncepnd de la prima cdere a sistemului.Declicul este nchis
atunci cnd ceasul este la un nivel sczut i funcioneaz normal la un nivel ridicat aa cum se indic
n partea haurat a regiunii SYNC LATCH a semnalului.Valoarea semnalului este schimbat
atunci cnd mecanismul ceasului funcioneaz la un nivel sczut.Fiecare succesiune pozitiv a
ceasului se contorizeaz n PINxn Register.
Cele dou sgei tpd,max i tpd,min,indic o singur tranziie a semnalului asupra pinului
ce va fi ntrziat ntre i 1 din perioada timpului impus.La citirea valorii pinului trebuie
executat instruciunea nop aa cum se arat n Figura 3.25.Instruciunea out seteaz SYNC
LATCH pe partea pozitiv a ceasului.n acest caz ntrzierea tpd ce trece prin sincronizator este de
o perioad.

Fig.3.25
35

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Urmtorul exemplu de codare prezint modul de setare pentru Port B pin 0 i nivelul 1
ridicat, nivelul 2 i 3 sczut ; de asemenea definete pinii portului de la 4 la 7 ca intrare cu pull-ups
asociate pinilor 6 i 7 ai portului.
Valorile pinilor rezultate sunt citite din nou,ns pentru pstrarea valorilor precedente este necesar
instruciunea nop.

Not : n programare sunt folosite dou registre temporare pentru minimizarea duratei de timp de la
setrile pinilor 0,1,6 si 7 cu pull-up i definirea biilor 2 i 3 la nivel sczut precum i redefinirea
bitilor 0 i 1 ca driver la nivel nalt.
1.7.5 Modul sleep i intrarea digital
Conform prezentrii din Figura 3.23 ,intrarea digital a semnalului poate fi la mas cu o
intrare cu trigger schmitt.
Semnalul denumit SLEEP n figur , este comandat de unitatea MCU Sleep Controller n
modul Power-Down, modul Power-save ,modul Standby, i modul Extended Standby pentru
evitarea consumului mare de putere n cazul n care unele semnale de intrare prezint fluctuaii la
stnga sau se gsesc pe un nivel aproape de VCC/2.

36

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

SLEEP este suprascris de pinii portului i comunic cu pinii ntreruperilor externe.Dac o


cerere de ntrerupere extern nu este activ, SLEEP este activ pentru aceti pini.SLEEP este de
asemenea suprascris de o varietate de funcii alternative.Daca pinul unei ntreruperi externe
asicrone,prezent pe un nivel logic nalt(1), configurat ca ntrerupere asupra oricrei schimbri
logice asupra pinului , nu este disponibil, atunci corespondena External Interrupt Flag va fi setat
cnd n modul sleep apare o cerere logic de schimbare.
1.7.6 Funcii alternative ale porturilor
Majoritatea pinilor porturilor au funcii alternative associate cu General Digital I/O.Figura
3.23 prezint modul n care pinul portului semnalului de control pornind de la Figura 3.26
simplificat poate fi suprascris de funciile alternative.Exist cazuri n care suprascrierea semnalului
s nu se realizeze pentru toi pinii portului dar figura de mai jos ofer o descriere general care poate
fi aplicat tuturor pinilor porturilor ai microcontrolerelor din familia AVR.

Figura 3.26 Funcii alternative ale porturilor


37

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Not: WPx, WDx, RRx, RPx, i RDx sunt comune tuturor pinilor aceluiai port.. clkI/O
SLEEP, i PUD sunt comune tuturor porturilor.Toate celelalte semnale sunt unice pentru fiecare pin.
Tabelul 8 rezum toate funciile de suprascriere a semnalului.Pinii i porturile prezentate n Figura
3.24 nu sunt prezeni n tabelul urmator .Semnalele de suprascriere sunt generate n modulele interne
cu funciile alternative.
Tabelul 8. Semnalele suprascrise pentru funciile alternative
Numele semnalului
Numele complet
Descriere
Dac semnalul este setat,pullup enable este controlat de
semnalul PUOV .Dac acest
PUOE
Pull-up Override Enable
semnal este nul,pull-up este
activ cnd {DDxn, PORTxn,
PUD} = 0b010.

PUOV

DDOE

DDOV

PVOE

PVOV

Dac PUOE este activ,pull-up


este activat/dezactivat atunci
cnd PUOV este
pornit/oprit,indiferent de
setrile DDxn, PORTxn, i
registrul de bii PUD .

oprit

Dac semnalul este


activ,ieirea Driver Enable
este controlat de semnalul
Data Direction Override
DDOV.Dac acest semnal
Enable
este nul ieirea driver-ului
este activ prin Registrul de
bit DDxn.
Dac DDOE este activ,ieirea
driver-ului este
Data Direction Override activat/dezactivat cnd
Value
DDOV este pornit/oprit
indiferent de setrile
registrului de bit DDxn.
Dac acest semnal este activ
i ieirea driver-ului este
activat valoarea portului este
activat de semnalul
Port Value Override Enable
PVOV.Dac semnalul PVOE
este pornit i iesirea driverului este activ Port Value
este controlat Registrul de bit
PORTxn.
Port Value Override Value
Dac PVOE este activ
38

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

DIEOE

DIEOV

DI

AIO

PROIECT DE DIPLOM
2007

valoarea portului este


comandat de PVOV ,
indiferent de setrile
Registrului de bit PORTxn.
Dac acest bit este activ
Intrarea Digitala Activ este
controlat de semnalul
Digital Input Enable Override DIEOV.Dac acest semnal
Enable
este oprit,Intrarea Digital
Activ este determinat de
strile MCU - Normal
Mode ,Slee Modes.
Dac DIEOE este activ
Intrarea Digital este
Digital Input Enable Override activat/dezactivat cnd
Value
DIEOV este pornit/oprit
indiferent de strile MCU
Normal Mode ,Slee Modes.
Aceasta este intrarea digital
pentru funciile alternative.n
figur semnalul este conectat
la ieirea cu mecanism de
declanare,ns naintea
Digital Input
sincronizatorului.Intrarea
digital este utilizat ca ceas
modulul cu funciile
alternative folosindu-se de
propriul sincronizator.
Aceasta este Intrarea/Ieirea
analogic la/de la funciile
Analog Input/ output
alternative.Semnalul este
conectat direct la pad i poate
fi folosit bidirecional.

Urmatoarele seciuni descriu funciile alternative pentru fiecare port,corelate cu suprascrierea


semnalelor pentru funciile alternative.Vezi descrierea funciilor alternative pentru mai multe detalii.
Special Function I/O Register SFIOR :

Fig.3.27 Registrul SFIOR

39

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Cnd acest bit este setat 1 porturile I/O sunt dezactivate chiar dac registrele PORTxn i
DDxn sunt configurate pentru a le activa ({DDxn, PORTxn} = 0b01).Vezi configurarea pinilor
pentru mai multe detalii despre aceste caracteristici.

1.7.7 Funcii alternative ale portului A


Portul A are asociate funcii alternative la fel ca intrarea analogic ADC.Aceste funcii sunt
prezentate n Tabelul 9. Dac unul din pinii portului A este configurat ca o ieire este esenial s nu
comute pe durata unei operaii. Acest lucru ar putea afecta rezultatul final al operaiei.
Tabelul 9

Tabelul 10 i Tabelul 11 prezin funciile alternative ale Portului A la suprascrierea semnalului


descris n Figura 3. 24
Tabelul 10

40

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Tabelul 11

1.7.8 Funcii alternative ale portului B


Tabelul 12

Configuraia pinilor alternani este dup cum urmeaz :


SCK Port B, Bit 7
SCK: Master Clock output, Slave Clock input pin pentru canalul SPI .Dac SPI este setat ca
slave atunci pinul este configurat ca o intrare indiferent de setrile lui DDB7.n cazul n care este
conectat ca master direcia datelor ale acestui pin este controlat de DDB7.Atunci cndpnul ste
comandat d pI s fie o intrare, pull-up poate fi n continuare controlat de bitul PORTB7.
MISO Port B, Bit 6
MISO: Master Data input, Slave Data output pin pentru canalul SPI. Atunci cnd SPI este
setat ca master pinul este configurat ca o intrare indiferent de setrile lui DDB6.Cnd este setat ca
41

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

slave,direcia datelor acestui pin este comandat de DDB6.Cnd pinul este comandat de SPI s fie o
intrare,pull-up poate fi n continuare comandat de bitul PORTB6.
MOSI Port B, Bit 5
MOSI: SPI Master Data output, Slave Data input pentru canalul SPI.Atunci cnd SPI este
activat ca slave,pinul este configurat ca o intrare indiferent de setrile lui DDB5.Atunci cnd este
activat ca master direcia datelor acestui pin este controlat de DDB5.n cazul n care acest pin este
forat de SPI s fie o intrare,pull-up poate fi controlat n continuare de bitul PORTB5.
SS Port B, Bit 4
SS: Slave Select input.Cand SPI este conectat ca slave,pinul este configurat ca o intrare
indiferent de setrile lui DDB4.Ca slave SPI este activat atunci cnd acest pin conduce slab.Atunci
cnd SPI este activat ca master, direcia datelor acestui pin este controlat de DDB4.Cnd acest pin
este comandat de SPI s fie o intrare,pull-up poate fi n continuare controlat de PORTB4.
AIN1/OC0 Port B, Bit 3
AIN1, Analog Comparator Negative Input.Seteaza pinul portului ca pe o intrare, cu pull-up
intern cu transfer oprit pentru a se evita ca portul digital s interacioneze cu funciile
comparatorului.
OC0, Output Compare Match output Pinul PB3 poate fi configurat ca intrare extern pentru
Timer/Counter0 Compare Match.Pentru a ndeplini aceast funcie pinul PB3 trebuie configurat ca o
ieire (DDB3 set (one)).
Pinul OC0 este de asemenea o ieire pentru PWM modul de funcionare al timer-ului.
AIN0/INT2 Port B, Bit 2
AIN0, Analog Comparator Positive input.Se configureaz pinul portului ca o intrare cu pullup intern cu transfer oprit pentru evitarea interferenelor dintre funcionarea portului digital cu
funcionarea unui Comparator.
INT2, External Interrupt Source 2: pinul PB2 poate fi configurat ca o surs de ntrereperi
extern pentru MCU.
T1 Port B, Bit 1
T1, Timer/Counter1 Counter Source.
T0/XCK Port B, Bit 0
T0, Timer/Counter0 Counter Source.
XCK, USART External Clock.Registrul Data Direction (DDB0) verific dac ceasul este
setat la ieire (DDB0 este activ) sau la ieire (DDB0 inactiv).Pinul XCK este activ doar atunci cnd
USART opereaz n modul sincron.
Tabelul 13 i Tabelul 14 prezint funciile alternative ale portului B la suprascrierea
semnalelor.
SPI MSTR INPUT i SLAVE OUTPUT constituie semnalul MISO,n timp ce MOSI este
mprit n SPI MSTR OUTPUT i SPI SLAVE INPUT.

42

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Tabelul 13

Tabelul 14

1.7.9 Funcii alternative pentru Port C


Pinii portului C cu funciile lor alternative sunt prezentai n Tabelul 15.Dac interfaa JTAG
este activ rezistorii pull-up ai pinilor PC5(TDI), PC3(TMS) i PC2(TCK) vor fi activai chiar dac
o resetare va avea loc.

43

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Tabelul 15

Configuraia pinilor alternani este urmatoarea:


TOSC2 Port C, Bit 7
TOSC2, Timer Oscillator pin 2: Cnd bitul AS2 n ASSR este activ pentru pornirea ceasului
Timer/Counter2,n modul asincron pinul PC7 este deconectat de la port i devine ieire pentru
oscilator.n acest mod Crystal Oscillator este conectat la acest pin i pinul nu poate fi folosit ca I/O.
TOSC1 Port C, Bit 6
TOSC1, Timer Oscillator pin 1: Cnd bitul AS2 n ASSr este activ pentru pornirea ceasului
n modul asincron,pinul PC6 este deconectat de la port i devine intrare pentru oscilator.n acest mod
Crystal Oscillator este conectat la acest pin iar pinul nu mai poate fi folosit ca I/O.
TDI Port C, Bit 5
TDI, JTAG Test Data In: intrarea serial transfer datele n Instruction Register sau n Data
Register.Cnd interfaa JTAG este activ pinul nu mai poate fi folosit ca I/O.
TDO Port C, Bit 4
TDO, JTAG Test Data Out: Ieirea serial din Instruction register sau Data Register.Cnd
interfaa JTAG este activ pinul nu mai poate fi folosit ca I/O.
TMS Port C, Bit 3
TMS, JTAG Test Mode Select:Acest pin este folosit pentru controlul fluxului prin
mecanismul TAP.Cnd interfaa JTAG este activ pinul nu mai poate fi folosit ca I/O.
TCK Port C, Bit 2
TCK, JTAG Test Clock: JTAG comunic sincron cu TCK.Cnd interfaa JTAG este activ
pinul nu mai poate fi folosit ca I/O.
SDA Port C, Bit 1
SDA, Two-wire Serial Interface Data: Cnd bitul TWEN n TCR este activ pentru Two-wire
Serial Interface,

44

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Pinul PC1 este deconectat de la port i devine pin Serial Data I/O pentru interfaa serial Two-wire
Serial.n acest mod un flitru limiteaz semnalul la intrare la 50 ns pinul funcionnd pe un canal
deschis cu aceast rat de limitare.Cnd acest pin este comanadat de interfaa Two-wire Serial
Interface,pull-up poate fi controlat n continuare de bitul PORTC1.
SCL Port C, Bit 0
SCL, Two-wire Serial Interface Clock: Cnd bitul TWEN n TWCR este setat pentru
activarea interfeei Two-wire Serial pinul PC0 se deconecteaz de la port i devine pinul Serial
Clock I/O pentru interfaa Two-wire Serial. n acest mod un filtru limiteaz la intrare semnalul la 50
ns pinul funcionnd pe un canal deschis cu aceast rat de limitare.Cnd acest pin este comandat de
interfaa Two-wire Serial , pull-up poate fi comandat n continuare de PORTC0.
Tabelul 16 prezint funciile alternative ale Portului C pentru suprascrierea semnalului.
Tabelul 16

Not : n modul activ interfaa Two-wire Serial dezactiveaz pinii PC0 i PC1.Acest lucru
nu este prezentat n figur.Filtrele sunt conectate ntre ieire i AIO modulul logic al TWI.
1.7.10 Funcii alternative ale portului D
Pinii Portului D sunt prezentai n Tabelul 17.
Tabelul 17

45

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Configuraia pinilor este urmtoarea :


OC2 Port D, Bit 7
OC2, Timer/Counter2 Output Compare Match output:pinul PD7 poate fi folosit ca ieire
extern pentru Timer/Counter2 Output Compare.Pentru a ndeplini aceast funcie pinul trebuie
configurat ca ieire (DDD7 activ (one)).OC2 este de asemenea ieire pentru timer-ul PWM.
ICP Port D, Bit 6
ICP Input Capture Pin: Pentru Timer/Counter1 pinul PD6 poate fi i pin Input Capture.
OC1A Port D, Bit 5
OC1A, Output Compare Match A output: Pinul PD5 poate fi ieire extern pentru
Timer/Counter1 Output Compare A.Pinul trebuie s fie configurat ca o ieire (DDD5 activ (one)).
Pinul OC1A este de asemenea ieire pentru timer-ul PWM.
OC1B Port D, Bit 4
OC1B, Output Compare Match B output: Pinul PD4 poate fi ieire extern pentru
Timer/Counter1 Output Compare B.Pinul trebuie s fie configurat (DDD4 activ (one)).Pinul OC1B
este de asemenea ieire pentru timer-ul PWM.
INT1 Port D, Bit 3
INT1, External Interrupt Source 1: Pinul PD3 poate fi sursa de ntrerupere extern.
INT0 Port D, Bit 2
INT0, External Interrupt Source 0: Pinul PD2 poate fi surs de ntrerupere extern.
TXD Port D, Bit 1
TXD, Transmit Data (Data output pin for the USART).Atunci cnd USART Transmitter este
activ pinul este configurat ca o ieire indiferent de valoarea DD1.
RXD Port D, Bit 0
RXD, Receive Data (Data input pin for the USART).Atunci cnd USART Receiver este activ
pinul este configurat ca o intrare indiferent de valoarea DD0.Pull-up poate fi n continuare comandat
de bitul PORTD0.
Tabelul 18 i Tabelul 19 prezint funciile alternative ale Portului D pentru suprascrierea
semnalului.
Tabelul 18

46

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Tabelul 19

1.7.10 Descrierea registrelor pentru Porturile I/O

47

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

1.8 ntreruperi externe


ntreruperile externe sunt comandate de pinii INT0, INT1, i INT2.ntreruperile externe vor
fi active chiar dac pinii INT0, INT1, i INT2 sunt configurai ca ieiri.Aceast caracteristic ofer
posibilitatea rulrii unui software al ntreruperilor.ntreruperile externe pot fi declanate de un front
sczut sau nalt (nivel). INT2 este accesat doar la nivel nalt.Aceste caracteristici se gsesc n
specificaiile pentru MCU Control Register MCUCR i MCU Control i Status Register
MCUCSR.Cnd o ntrerupere extern este activ i configurat ca nivel declanator (doar
INT0/INT1),ntreruperea se va menine n stare activ ct timp pinul se afl pe un nivel sczut.A se
48

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

nota c recunoaterea scderii sau creterii propagrii ntreruperii asupra pinilor INT0 sau INT1
necesit existena unui ceas I/O.ntreruperile de nivel sczut asupra pinilor INT0/INT1 i cel
superior pe INT1 sunt detectate asincron.Acest lucru implic faptul c ntreruperile pot funciona
att ca parte din modul sleep ct i ca parte din modul idle.I/O nu funcioneaz n modurile sleep
excepie facnd modul idle.
Dac un nivel declanator de ntreruperi este utilizat pentru a porni modul Power-down
acesta trebuie meninut astfel pentru pornirea MCU.Acest lucru face ca MCU s fie mai puin
sensibil la zgomot.Nivelul modificat trebuie meninut astfel pentru ceasul Watchdog
Oscillator.Perioada Watchdog Oscillator este de 1 s (nominal) la 5.0V la 25C.MCU va porni dac
intrarea este pe nivelul dorit pe perioada testrii sau este confirmat pn la sfaritul perioadei de
timp.nceputul timpului respectiv este definit de siguranele SUT .n cazul n care nivelul este
chestionat de dou ori de ceasul Watchdog Oscillator dar dispare naintea terminrii timpului,MCU
ramne activ,dar nici o ntrerupere nu se va genera.Cererea de nivel trebuie meninut un timp
suficient s finalizeze procedura de declanare a nivelului de ntreruperi.
1.8.1 MCU Control Register MCUCR :
MCU Control Register conine bii de control pentru controlul sensului ntreruperilor i
funcii generale ale MCU.

Fig.3.28 Registrul MCUCR


Bit 3, 2 ISC11, ISC10: Interrupt Sense Control 1 Bit 1 and Bit 0
ntreruperea extern 1 este activat de pinul extern INT1 daca SREG I-bit i corespondena
cu magistrala de ntreruperi GICR este setat.Nivelul i fronturile pinului extern INT1 care
activeaz ntreruperea sunt prezentate n Tabelul 34.naintea atingerii vrfurilor, valoarea pinului
INT1 este de dou ori testat. Dac frontul superior al ntreruperii este activ pulsurile care vor dura
mai mult de o perioad vor genera ntreruperi. n cazul n care nivelul inferior este activ,pentru a
genera o ntrerupere se execut mai nti instruciunea curent.
Tabelul 20

Bit 1, 0 ISC01, ISC00: Interrupt Sense Control 0 Bit 1 and Bit 0


ntreruperea extern 0 este activat de pinul extern INT0 dac SREG I-flag i corespondena
cu magistrala ntreruperilor este setat.Nivelurile i fronturile pinului extern INT0 care comand
ntreruperea sunt definite n Tabelul 35.Valoarea pinului INT0 este testat naintea detectrii
49

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

vrfurilor.Dac nivelul superior al ntreruperii este activ,pulsurile a cror durat este mai mare de o
perioad vor genera o ntrerupere.Dac nivelul inferior al ntreruperilor este activ, pentru a genera o
ntrerupere se execut mai nti instruciunea curent.
Tabelul 21

1.8.2 MCU Control i Status Register MCUCSR

Fig.3.29 Registrul MCUCSR


Bit 6 ISC2: Interrupt Sense Control 2
Asynchronous External Interrupt 2 este activat de pinul extern INT2 SREG I-bit i
corespondena cu magistrala GICR este setat.Dac ISC2 este setat 0 logic nivelul superior al
INT2 activeaz ntreruperea.Nivelurile lui INT2 lucreaz n modul asincron.Pulsurile INT2 mai mici
decat minimul stabilit vor genera o ntrerupere.La schimbarea logic a bitului ISC2 poate s apar o
ntrerupere. Pentru aceasta este recomandat s se dezactiveze INT2 prin trecerea n starea off n
registrul GICR a bitului Interrupt Enable.Dup aceea bitul ISC2 poate fi modificat.n final bitul
INT2 Interrupt Flag trebuie dezactivat prin trecerea n 1 logic n registrul GIFR nainte de
producerea unei noi ntreruperi.
Tabelul. 22

1.8.3 General Interrupt Control Register GICR

Fig.3.30 Registrul GICR

50

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Bit 7 INT1: External Interrupt Request 1 Enable


Cnd biii INT1 i I-bit n Status Register (SREG) sunt activi pinul extern de ntrerupere este
disponibil.
Bitul Interrupt Sense Control1 1/0 (ISC11 si ISC10) n MCU General Control Register (MCUCR)
activeaz orice ntrerupere extern indiferent de nivelul superior sau inferior al INT1.Aciunea
asupra acestui pin va genera o cerere de ntrerupere chiar dac INT1 este configurat ca o
ieire.Legtura cu External Interrupt Request 1 este realizat cu vectorul ntrerupere INT1.
Bit 6 INT0: External Interrupt Request 0 Enable
Cnd biii INT0 i I-bit n Status Register (SREG) sunt activi pinul extern de ntrerupere este
disponibil. Biii Interrupt Sense Control0 1/0 (ISC01 i ISC00) n MCU General Control Register
(MCUCR) activeaz orice ntrerupere extern indiferent de nivelul superior sau inferior al INT1.
Aciunea asupra acestui pin va genera o cerere de ntrerupere chiar dac INT0 este configurat ca o
ieire. Legtura cu External Interrupt Request 0 este realizat cu vectorul ntrerupere INT0.
Bit 5 INT2: External Interrupt Request 2 Enable
Cnd INT2 i I-bit n Status Register (SREG) sunt activi pinul extern de ntrerupere este
disponibil. Bitul Interrupt Sense Control2 ISC2) n MCU Control Status Register (MCUCSR)
activeaz orice ntrerupere extern indiferent de nivelul superior sau inferior al INT2. Aciunea
asupra acestui pin va genera o cerere de ntrerupere chiar dac INT2 este configurat ca o
ieire.Legtura cu External Interrupt Request 2 este realizat cu vectorul ntrerupere INT2.
3.8.4 General Interrupt Flag Register GIFR

Fig.3.31 Registrul GIFR


Bit 7 INTF1: External Interrupt Flag 1
Cnd un nivel sau o schimbare logic asupra pinului INT1 declaneaz o cerere de
ntrerupere INTF0 devine activ.Daca biii I-bit n SREG i the INT0 bit n GICR sunt activi MCU va
face un salt la corespondena cu vectorul ntrerupere. Flag-ul este inactiv atunci cnd se execut
rutina de ntreruperi.De asemenea flag-ul poate fi inactiv prin atribuirea valorii logice 1.Acest flag
este ntotdeauna activ atunci cnd pinul INT0 este configurat ca nivel de ntrerupere.
Bit 5 INTF2: External Interrupt Flag 2
Cnd un eveniment asupra pinului INT2 declaneaz o cerere de ntrerupere INTF2 va fi
activat. Daca biii I-bit n SREG i INT2 bit n GICR sunt activi MCU va face un salt la
corespondena cu vectorul ntrerupere.
Flag-ul este inactiv atunci cnd se execut rutina de ntreruperi. De asemenea flag-ul poate fi
inactiv prin atribuirea valorii logice 1.A se nota c atunci cnd n modul sleep ntreruperea pinului
INT2 este dezactivat intrarea buffer-ului asupra acestui pin va fi dezactivat.Aceasta va duce la
activarea flag-ului INTF2.
51

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

1.9 16-bit Timer/Counter


-blocul principal este unitatea de numrare bidirecionala programat pe 16 bii. n figura 3.32 este
prezentat diagrama bloc a unitii de numrare.

Fig. 3.32
Semnalele:
Count incrementeaz/decrementeaz TCNT1 cu 1.
Direction selecteaz intervalul pentru incrementare sau decrementare..
Clear dezactiveaz TCNT1 (trece toi biii n zero.).
clkT1 ceasul Timer/Counter
TOP semnalizeaz cnd TCNT1 a atins valoarea maxim.
BOTTOM semnalizeaz cnd TCNT1 a atins valoarea minim.
Numrtorul pe 16 bii este integrat n doua locaii de memorie I/O pe 8 bii: Counter High
(TCNT1H)
conine cei opt bii de pe nivelul cel mai nalt al numrtorului, i Counter Low (TCNT1L)
coninnd cei opt bii de pe nivelul inferior.Registrul TCNT1H este acionat indirect de CPU.Cnd
CPU elibereaz o locaie TCNT1H I/O
se acceseaz bitul registrului temporar (TEMP).Acest registru este actualizat de TCNT1H atunci
cnd TCNT1L
este citit,i TCNT1H este actualizat cu valoarea din registrul temporar cnd TCNT1L este scris.
Aceasta permite ca CPU s execute operaiile de citire i scriere pe durata unui singur ciclu
al ceasului. Scrierea n registrul TCNT1 cnd numrtorul este pornit poate duce la rezultate
neateptate.Aceste cazuri sunt prezentate pe parcursul seciunilor unde acestea sunt mai
importante.n funcie de operaia care se dorete a fi executat contorul este
dezactivat,incrementat,decrementat pentru fiecare tact (clkT1). clkT1 poate fi accesat de la o surs
de ceas intern sau extern selectat de Clock Select bits (CS12:0).Atunci cnd (CS12:0 = 0) nu este
selectat timer-ul este oprit. TCNT1 poate fi comandat de CPU indiferent dac clkT1 este activ sau
nu.Cnd CPU suprascrie toate contoarele sunt dezactivate i toate operaiile de contorizare sunt
oprite.
Secvena de numrare este comandat de Waveform Generation Mode biii (WGM13:0)
amplasat n Registrul A i Registrul B Timer/Counter Control Registers A i B (TCCR1A si
TCCR1B).Conexiunile sunt nchise ntre pornirea contorului i generarea formelor de und de ctre
Output Compare outputs OC1x.
Timer/Counter Overflow (TOV1) flag este activat n funcie de
modul de operare selectat de biii WGM13:0.
TOV1 poate fi utilizat pentru a genera o ntrerupere ctre CPU.
52

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

1.9.1 Input Capture Unit


Timer/Counter deine o unitate numit Input Capture Unit care poate prelua eventualele
evenimente externe,dndu-le un nume de identificare a timpului la care s-au produs.Semnalul extern
care indic producerea unui eveniment extern sau a mai multor,poate fi accesat de pinii ICP1 sau
alternativ de unitatea Analog Comparator.Identificatorul de timp poate fi utilizat pentru calcularea
frecvenei,duty-cycle,i alte caracteristici ale semnalului aplicat.n plus,identificatorul de timp poate
fi utilizat pentru a crea un jurnal al ntreruperilor.
Diagrama bloc a Input Capture Unit este prezentat n Figura 3.33.Elementele care nu fac
parte n mod direct din diagrama bloc sunt descrise de culoarea gri.Litera n ; utilizat lng registre
sau bii indic numrul Timer/Counter

Fig. 3.33
Cnd o schimbare are loc asupra nivelului logic al pinului Input Capture pin (ICP1) sau
asupra Analog Comparator output (ACO),i aceast schimbare este confirmat de detectorul de
vrf,atunci o captare va fi declanat.Cnd aceast captare este declanat cei 16 bii ai valorilor
counter-ului (TCNT1) sunt transmii ctre Input Capture Register (ICR1). Input Capture Flag
(ICF1) este setat de acelai ceas care copiaz valoarea TCNT1
n registrul ICR1.Daca TICIE1 =1 genereaz input capture interrupt. ICF1 flag este automat
dezactivat atunci cnd ntreruperea este executat.Alternativ, ICF1 flag poate fi dezactivat prin
trecerea bitului I/O n 1 logic.
Citind valorile celor 16 bii din Input Capture Register (ICR1) se realizeaza prin citirea
nivelului low i citirea nivelului high (ICR1L si ICR1H).Cnd nivelul low este citit nivelul high este
copiat n registrul temporar TEMP.Cnd CPU citete ICR1H ,locaia I/O va accesa registrul TEMP.
Registrul ICR1 poate fi scris doar de Waveform Generation care l utilizeaz pentru
definirea valorii TOP a contorului.Biii Waveform Generation mode (WGM13:0) trebuie setai

53

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

nainte ca n registrul ICR1 s fie scris valoarea TOP.La scrierea n registrul ICR1 bitul high trebuie
scris n locaia ICR1H I/O nainte ca bitul low s fie scris n ICR1L.
1.9.2 Input Capture Trigger Source
Corpul principal al sursei declanatoare pentru input capture unit este Input Capture pin
(ICP1). Timer/Counter1 poate folosi ieirea Analog Comparator ca surs declanatoare pentru input
capture unit. Analog Comparator este setat ca surs declanatoare prin activarea bitului Analog
Comparator Input Capture (ACIC) n registrul Analog Comparator Control and Status Register
(ACSR).La schimbarea sursei declanatoare se poate declana o captur. Input capture flag trebuie
dezactivat naintea schimbrii.
Ambele intrri Input Capture pin (ICP1) si Analog Comparator output (ACO) sunt ale
aceluiai pin T1. Detectorul de nivel este identic.Atunci cnd noise canceler este activ,un nivel logic
este inserat naintea detectorului de vrf,prin introducerea unei ntrzieri pe durata a patru
cicluri.Intrarea pentru noise canceler i detectorul de vrf este ntotdeauna disponibil ,doar dac
Timer/Counter nu este setat ntr-un mod de generare a undelor utilizat de registrul ICR1 pentru a
defini valoarea TOP.
O intrare de captur poate fi declanata de pinul portului ICP1.
1.9.3 Noise Canceler
Noise canceler introduce imunitatea la zgomot utiliznd un filtru digital.
Intrarea noise canceler este monitorizat n patru etape i toate patru trebuie s fie egale
pentru a modifica ieirea utilizat de detectorul de nivel.Noise canceler devine activ prin setarea
bitului Input Capture Noise Canceler (ICNC1) n Registrul B Timer/Counter Control
(TCCR1B).Atunci cnd noise canceler este activ se introduce o ntrziere egal cu patru cicluri de
ceas la schimbarea ieirii pentru actualizarea registrului ICR1.Noise canceler utilizeaz sistemul de
ceas i nu este afectat de prescalare.
1.9.4 Folosirea Input Capture Unit
Principala sarcin a unitii de capturare la intrare este de a pune la dispoziie suficient
memorie din cea a procesorului pentru apariia de eventuale evenimente.Timpul dintre dou
evenimente este critic.Dac procesorul nu a citit valoarea asociat capturii n Registrul ICR1,nainte
de apariia unui nou eveniment ICR1 va fi suprascris cu o nou valoare.n acest caz valoarea
asociat capturii va fi incorect.
Utiliznd input capture interrupt,registrul ICR1 poate fi citit naintea producerii rutinei
ntreruperilor.Chiar dac input capture interrupt are prioritate ridicat,timpul maxim de rspuns la
ntrerupere depinde de numrul maxim de cicluri necesare tratrii unei cereri de
ntrerupere.Utilizarea unitii input capture n orice mod de operare atunci cnd valoarea
TOP(rezoluia) este activ pe durata operrii,nu este recomandat.
Durata unui ciclu pentru un semnal extern impune ca declanatorul de nivel s fie schimbat
dup fiecare captur. Schimbarea de nivel trebuie s se realizeze nainte de citirea registrului
ICR1.La schimbarea de nivel input capture flag (ICF1) trebuie dezactivat prin trecerea bitului I/O n
1 logic.Pentru msurarea frecvenei,dezactivarea flag-ului ICF1 nu este recomandat (dac o
ntrerupere este n curs).

54

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

1.9.5 Output Compare Units


Comparatorul pe 16 bii compar TCNT1 cu ieirea registrului Output Compare Register
(OCR1x).Dac TCNT este egal cu OCR1x comparatorul semnalizeaz o potrivire.Aceasta seteaz
Output Compare Flag (OCF1x)
pentru urmatorul ciclu de ceas. Dac OCIE1x =1, Output Compare flag genereaz o ieire output
compare interrupt.
OCF1x flag este dezactivat automat atunci cnd se execut o ntrerupere. OCF1x flag poate fi de
asemenea dezactivat prin trecerea n 1 logic a bitului I/O.Generatorul de und utilizeaz potrivirea
de semnale pentru a genera o ieire n concordana cu biii Waveform Generation mode (WGM13:0)
i Compare Output mode (COM1x1:0).Semnalele TOP i BOTTOM sunt utilizate de generatorul de
und pentru tratarea cazurilor speciale cu valori extreme n unele moduri de operare.O caracteristic
special a ieirii unitii de comparare permite definirea valorii TOP pentru Timer/Counter.Aceast
valoare definete perioada de timp necesar generatorului de und pentru executare.
Figura 3.34 prezint diagrama bloc a unitii output compare unit.Litera n asociat numelui
registrului i numelui bitului indic numrul asociat n = 1 pentru Timer/Counter1,i litera x indic
output compare unit (A/B).
Elementele care nu fac parte din blocul principal al unitii output compare unit sunt reprezentate n
culoarea gri.

Fig. 3.34
Registrul OCR1x are buffer dublu la utilizarea unuia din cele doisprezece moduri Pulse
Width Modulation (PWM).n modul de operare Clear Timer on Compare (CTC) buferr-ul dublu este
dezactivat.Buffer-ul dublu sincronizeaz actualizarea registrului OCR1x Compare Register cu cea a
fronturilor TOP i BOTTOM din secvena de numrare.Aceast sincronizare previne propagarea
pulsurilor nesimetrice,cu lungimi diferite,privind cderile libere la ieire.
55

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Accesarea registrului OCR1x poate fi complex ns nu n acest caz.Atunci cnd buffer-ul


dublu este activ CPU are acces la registrul OCR1x Buffer Register,iar n cazul n care este
dezactivat,CPU are acces direct la registrul OCR1x.Coninutul registrului OCR1x poate fi modificat
doar prin scriere(Timer/Counter nu actualizeaz automat acest registru ca n cazul registrelor
TCNT1 i ICR1.Din acest motiv OCR1x nu este citit de bitul frontului nalt al registrului temporar
TEMP.naintea manipulrii celor 16 bii este de preferat s se citeasc bitul de pe frontul inferior.
Scrierea n registrul OCR1x trebuie s se realizeze prin registrul TEMP n cazul n care compararea
celor 16 bii decurge n mod continuu.Bitul de pe frontul superior trebuie s fie primul scris.Atunci
cnd adresa bitului I/O de pe frontul superior este scris de ctre CPU,registrul TEMP se va
actualiza cu valoarea care a fost scrisa.Cnd bitul de pe frontul inferior (OCR1xL) este scris de cei
opt bii inferiori,bitul superior va fi copiat lnga cei opt bii de pe frontul superior sau n buffer-ul
OCR1x ,sau n registrul OCR1x Compare,totul n acelai ciclu de ceas.
1.9.6 Force Output Compare
n modul PWM de generare a formelor de und asignarea ieirii comparatorului poate fi
scris prin trecerea n 1 a bitului Force Output Compare (FOC1x).Acest lucru nu va activa steagul
OCF1x sau nu va activa/dezactiva timer-ul,ns pinul OC1x va fi actualizat n cazul n care biii
COM11:0 stabilesc dac pinii OC1x sunt activai sau dezactivai.
1.9.7 Compare Match Blocking by TCNT1 Write
Orice scriere a CPU n registrul TCNT1 va bloca orice potrivire gsit n urmtorul ciclu al
timer-ului chiar dac timer-ul este oprit.Acest lucru permite OCR1x s fie iniializat cu aceeai
valoare ca TCNT1 fr declanarea unei ntreruperi atunci cnd Timer/Counter este activ.
1.9.8 Folosirea Output Compare Unit
innd cont c scrierea lui TCNT1 n orice mod de operare va bloca orice comparare pentru
un singur ciclu de ceas,exist riscuri la schimbarea unuia din canalele output compare ale lui TCNT1
indiferent dac Timer/Counter este pornit sau oprit.Dac TCNT1 este egal cu OCR1x rezultatul
comparrii va fi pierdut.generndu-se o form de und greit. TCNT1 nu este egal cu TOP n
modul PWM.Rezultatul asignrii pentru TOP va fi ignorat i contorul va continua cu
0xFFFF.TCNT1 nu este egal cu BOTTOM atunci cnd contorul descrete.Setrile pentru OC1x
trebuie realizate nainte ca datele s fie direcionate ctre ieire.Pentru setarea lui OC1x cel mai uor
mod este prin utilizarea biilor (FOC1x) n Normal mode.Valoarea OC1x se pstreaz i la
schimbarea ntre modurile de generare a undelor.
Observaie :biii COM1x1:0 nu funcioneaz mpreun cu valoarea de comparat.Schimbarea
COM1x1:0 va avea efect imediat.
1.9.9 Compare Match Output Unit
Biii Compare Output mode (COM1x1:0) au dou funcii.Generatorul de und utilizeaz biii
COM1x1:0
pentru a defini starea Output Compare (OC1x) la urmatoarea comparare.Biii COM1x1:0
controleaz ieirea pinului OC1x.Figura 3.35 exemplific efectul pe care l au setrile biilor
COM1x1:0.
56

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Registrele I/O,biii I/O,pinii I/O sunt descrii cu negru nchis.Doar porturile I/O Registrele
de control (DDR i PORT) sunt afectai de COM1x1:0.Atunci cnd se face referire la starea lui
OC1x este vorba de registrul intern OC1x i nu despre pinul OC1x.n cazul n care sistemul este
resetat,registrul OC1x este trecut n 0 logic.

Fig.3.35

Biii USART Character SiZe (UCSZ2:0) selecteaz numarul biilor de date din cadru.
Biii USART Parity mode (UPM1:0) activeaz i seteaz paritatea bitului.Selecia ntre unul-doi bii
de stop este realizat de bitul USART Stop Bit Select (USBS).Receptorul ignora cel de-al doilea bit
de stop. Frame Error-eroarea de cadru va fi detectat n cazurile n care primul bit de stop va fi zero.

1.10 USART Iniializare


USART trebuie iniializata naintea de pornirea oricrei alte comunicaii.Procesul normal de
iniializare const n : stabilirea ratei baud,cadrului i activarea Transmitorului i Receptorului n
funcie de opiuni.Pe durata iniializarii steagul de ntrerupere trebuie dezactivat (la fel i orice fel de
ntreruperi).
Pentru o reiniializare,orice transmisie trebuie s fie ncheiat naintea modificrii
registrelor.Steagul TXC verific dac toate transmisiile au fost ncheiate, iar steagul RXC verific
dac sunt date necitie n buffer-ul receptorului.Steagul TXC trebuie dezactivat naintea oricrei
transmisii (nainte ca UDR s fie scris).
Urmtorul exemplu prezint modul de iniializare a USART.Exemplul de cod stabilete
operaiile asincrone (nici o ntrerupere nu este activ) i un anumit format de cadru.Rata baud este
utilizat ca funcie de parametri,stocat n registrele r16 :r17.Cnd aceast funcie realizeaz operaia
de scriere n Registrul UCSRC,bitul URSEL - (MSB) trebuie setat potrivit utilizrii n locaiile I/O
de ctre UBRRH i UCSRC.
57

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Nota : Exemplul de cod prezentat include si fisierele header.


O rutin de iniializare avansat include formate de cadre ca parametri,ntreruperi dezactivate
etc.Multe aplicaii utilizeaz setari fixe pentru baud, i registre de control, n acest caz,programul de
iniializare fiind amplasat direct n cadrul rutinei,sau combinat cu alte programe de iniializare
pentru alte module I/O.
1.10.1 Data Transmission The USART Transmitter
Transmitorul USART este activat de bitul Transmit Enable (TXEN) n registrul UCSRB.Cnd
transmitorul este activat,portul pinului TxD este suprascris de USART transmisia realizndu-se
ctre ieirea serial. Rata baud,modul de operare,formatul de cadru trebuie setate naintea nceperii
transmisiei.n modul sincron ceasul pinului XCK va fi suprascris i utilizat ca ceas de transmisie..
1.10.2 Sending Frames with 5 to 8 Data Bit
O transmisie de date ncepe prin trecerea datelor de transmis n buffer-ul de transmisie.CPU poate
ncarca buffer-ul de transmisie prin scrierea n locaiile UDR I/O.Bufferul de date va fi mutat n
58

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

registrul Shift atunci cnd acesta este pregtit pentru a transmite un nou cadru.Registrul Shift preia
datele dac se afl n modul idle sau imediat dup ultimul bit de stop al cadrului transmis
anterior.Cnd registrul Shift este ncrcat cu noile date v transmite un cadru complet cu rata
stabilit de registrul baud,bitul U2X sau de XCK, n funcie de modul de operare.
Urmtorul exemplu de codare prezint o transmisie USART bazat pe testarea steagului
Data Register Empty (UDRE).Atunci cnd se folosesc cadre cu lungimea mai mic de opt bii, bitul
cu semnificaia cea mai mare scris de UDR este ignorat.nainte ca funcia s poat fi folosit
USART trebuie iniializat.Datele ce urmeaz a fi transmise sunt memorate n Registrul R16.

Not : Fiierele header sunt incluse.


Funcia ateapt ca buffer-ul de transmisie s fie liber prin verificarea steagului UDRE
nainte de a fi ncrcat cu datele ce urmeaz a fi transmise.Dac este utilizat registrul liber de
ntreruperi ntrerupeile vor fi scrise n buffer.
1.10.3 Transmiterea cadrelor cu Bitul 9 de Date
Dac sunt utilizate caractere de 9 bii UCSZ = 7, al 9-lea bit TXB8 trebuie scris n UCSRB
nainte ca bitul de pe frontul inferior s fie scris n UDR.Urmtorul exemplu de cod descrie funcia
de transmisie pentru caractere de 9 bii.Datele de transmis sunt memorate n registrele r16 : r17.

59

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Not : Funciile de transmisie sunt scrise ca funcii generale.Ele pot fi optimizate dac coninutul
UCSRB este ix.Bitul TXB8 al registrului UCSRB este utilizat dupa iniializare.
Cel de-al 9-lea bit poate fi utilizat pentru a indica adresa cadrului atunci cnd se utilizeaz
un multi procesor sau un alt protocol de manipulare, la fel ca n exemplele de sincronizare.
1.10.4 Indicatorii de transmisie si intreruperi
Transmitorul USART are dou steaguri care indic cele dou stri: USART Data Register
Empty (UDRE) i Transmit Complete (TXC)-registrul de date liber i transmisie complet.Ambele
steaguri pot fi folosite pentru a genera ntreruperi.
Steagul Data Register Empty (UDRE) indic atunci cnd receptorul este gata s primeasc
date.Acest bit este activ atunci cnd buffer-ul de transmisie este liber,i dezactivat atunci cnd
buffer-ul de transmisie deine date care nc nu au fost mutate n registrul Shift.Pentru
compatibilitate cu alte mecanisme acest bit trebuie s fie ntotdeauna 0 la scrierea n registrul
UCSRA.
Atunci cnd bitul Data Register empty Interrupt Enable (UDRIE) n UCSRB este 1 USART
Data Register Empty Interrupt se va executa ct timp UDRE este activ (se presupune ca ntreruperile
sunt active) . UDRE este dezactivat prin scrierea n UDR.Atunci cnd se transmit
ntreruperi,Registrul de ntreruperi trebuie s scrie datele n ordine n UDR, pentru a dezactiva
UDRE i Registrul de date trebuie s fie liber,altfel imediat dup terminarea rutinei de ntreruperi o
nou ntrrupere se va activa.
60

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Steagul Transmit Complete (TXC) Transmisie Completa, este 1 ntreg cadrul n Registrul
Shift este transferat la ieire i buffer-ul de transmisie este liber.Steagul TXC este eliberat automat la
executarea unei ntreruperi, sau prin scrierea de 1 logic n adresa bitului.Steagul TXC este util
pentru comunicaia cu interfaa duplex (la fel ca standardul RS485) unde o aplicaie pentru a fi
transmis activeaz receptorul i elibereaz magistrala de comunicaie imediat dup terminarea
transmisiei.
Cnd bitul Transmit Compete Interrupt Enable (TXCIE) n UCSRB este activ, USART
Transmit Complete Interrupt va fi executat atunci cnd steagul TXC devine activ (ntreruperile se
presupun active).n timpul execuiei acestei instruciuni,n rutina de ntreruperi nu se elibereaz
steagul TXC,acest lucru realizndu-se automat cnd se execut o ntrerupere
Generatorul de Paritate
Generatorul de paritate decide paritatea biilor pentru cadrul serial de date.Atunci cnd
UPM1 = 1, transmitorul insereaz paritatea biilor ntre primul bit de date i primul bit de stop din
cadrul serial care a fost transmis.
Dezactivarea Transmitorului
Dezactivarea transmitorului(trecerea lui TXN in zero) se realizeaz dup terminarea
transmisiei,cnd registrele Shift i Buffer sunt libere.
1.10.5 Receptorul The USART Receiver
Receptorul USART este activ prin trecerea bitului Receive Enable (RXEN) n registrul
UCSRB n 1 logic. Cnd receptorul este activ, pinul RxD este suprascris de USART i receptorul
devenind intrare serial de date.Rata baud,modul de operare,formatul de cadru trebuie setat nainte
de orice recepie serial de date.Dac operaia de sincronizare este n execuie,pinul XCK va fi
utilizat ca ceas de transfer.
Receiving Frames with 5 to 8 Data Bits
Receptorul primete date la detectarea unui bit de start.Fiecare bit care urmeaz bitului de
start va fi folosit ca exemplu pentru rata baud a ceasului XCK i transmis registrului Shift,nainte ca
primul stop de bit al cadrului s fie recepionat.Un bit de stop de o secund va fi ignorat.Atunci cnd
primul bit de stop este recepionat, un cadru serial complet va fi n registrul Shift,coninutul acestui
registru va fi mutat n buffer-ul receptor.Buffer-ul receptor poate fi citit odat cu citirea adreselor
UDR I/O.
Urmtorul exemplu de cod descrie funcia de recepie bazat pe verificarea steagului
Receive Complete (RXC). La utilizarea cadrelor mai mici de opt bii cel mai semnificant bit al
datelor citite de UDR trebuie trecut n zero.USART trebuie iniializat nainte ca aceast funcie s
fie utilizat.

61

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Not : Exemplul de cod conine i fisierele header.


Aceast funcie ateapt ca buffer-ul receptor s conin date prin verificarea steagului RXC,
naintea citirii buffer-ului i returnrii valorii.
Recepia cadrelor de 9 bii
Dac sunt utilizate caractere de 9 bii (UCSZ=7) cl de-al 9-lea bit trebuie citit de la RXB8
UCSRB naintea citirii bitului de pe frontul inferior de ctre UDR.Aceeai regul se aplic i
steagurilor FE, DOR si PE.Citirea strii se realizeaz de la UCSRA i citirea datelor de la UDR.La
citirea adreselor UDR I/O starea buffer-ului receptor FIFO precum i a biilor TXB8, FE, DOR ,PE
stocai n FIFO,vor fi modificate.
Urmtorul exemplu de cod descrie recepionarea de ctre USART a funciei care
manipuleaz caracterele de 9 bii i starea acestora.

62

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Not : Programul conine fisierele header.


Funcia de recepie realizeaz citirea tuturor registrelor I/O naintea oricrei evaluri.Aceasta duce la
o utilizare optim a buffer-ului innd cont c adresa buffer-ului citit va fi liber s accepte date
curnd.
Receive Compete Flag and Interrupt
Receptorul USART are doar un steag pentru a indica starea.
Steagul Receive Complete (RXC) recepie complet indic dac mai sunt date necitite n
buffer-ul de receptie. Acest steag este 1 unu cnd buffer-ul receptor este liber(nu conine date
63

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

necitite).Dac receptorul este dezactivat (RXEN=0) buffer-ul de recepie va fi ters i bitul RXC
trece n zero.
Atunci cnd Receive Complete Interrupt Enable (RXCIE) n UCSRB este setat USART
Receive Complete Interrupt se va executa pn cnd steagul RXC devine activ (toate ntreruperile se
presupun active). Cnd ntreruperea generat de receptia datelor este n execuie, receptorul trebuie
s citeasc datele din UDR n ordine,pentru a dezactiva steagul RXC,altfel o noua ntrerupere va fi
generat la terminarea secvenei.
1.10. 6 Indicatorul receptorului pentru erori
Receptorul USART are trei steaguri pentru indicarea erorilor : Frame Error (FE) eroarea de
cadru, Data OverRun (DOR) i Parity Error (PE) eroarea de paritate.Toate pot fi accesate de
UCSRA. Comun celor trei steaguri este c toate se afl n buffer-ul de recepie cu cadrele la care se
refer fiecare. UCSRA trebuie citit naintea buffer-ului de recepie (UDR) n condiiile n care citirea
adreselor UDR I/O schimb adresa buffer-ului citit.O alt caracteristic a steagurilor de erori este
aceea c nu pot fi schimbate prin software prin scrierea n adresele respective. Toate steagurile
trebuie setate n zero atunci cnd UCSRA este scris pentru actualizare cu viitoarele implementri
ale USART.Nici unul din cele trei steaguri nu poate genera ntreruperi.
Steagul Frame Error indic starea primului bit de stop pentru urmtorul cadru stocat n
buffer-el receptor. Cnd bitul de stop este citit corect(unu) steagul FE este zero i va fi unu atunci
cnd bitul de stop este citit incorect(zero).Acest steag poate fi folosit pentru a detecta condiiile de
manipulare,de ieire,de sincronizare.Steagul FE nu este afectat de setrile bitului USBS n
UCSRC,receptorul ignorndu-le pe toate,cu excepia primului bit de stop.Pentru asigurarea
compatibilitii cu alte mecansime,este de preferat ca acest bit s fie setat zero la scrierea n
UCSRA.
Steagul Data OverRun (DOR) indic condiiile n care buffer-ul receptor a pierdut date.Acest
lucru se ntmpl atunci cnd receptorul este suprasolicitat,atunci cnd un caracter ateapt n
registrul Shift,cnd un nou bit de start este detectat.Dac steagul DOR este activ acest lucru
nseamn c unul sau mai multe cadre au fost pierdute ntre ultimul cadru citit de la UDR i
urmtorul cadru citit de la UDR.Pentru compatibilitate cu viitoare mecanisme acest bit trebuie
totdeauna scris zero la scrierea n UCSRA.Steagul DOR este dezactivat la recepionarea unui cadru
complet,mutat apoi n registrul shift la buffer-ul receptor.
Steagul Parity Error (PE) indic eroarea de paritate a cadrului recepionat n buffer-ul
receptor Dac verificarea paritii nu este posibil steagul PE este setat ntotdeauna zero.Pentru
asigurarea compatibilitii cu viitoarele mecanisme,la scrierea n UCSRA acest steag trebuie setat
zero.
Verificarea paritaii
Tester-ul de paritate este activ atunci cnd bitul USART Parity mode (UPM1) este setat.Tipul
de paritate(impar sau par) este selectat de bitul UPM0.Atunci cnd este activ,parity checker
stabilete paritatea cadrelor sosite i compar rezultatele cu paritatea bitului din cadrul
serial.Rezultatele sunt stocate n buffer-ul receptor mpreuna cu datele recepionate i biii de
stop.Steagul PE poate fi citit prin software pentru a verifica dac un cadru are erori.
64

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

PC este activ dac urmtorul caracter care poate fi citit de ctre buffer-ul receptor are o
eroare de paritate i verificarea paritii nu a fost posibil (UPM1 = 1).Acest bit este valabil nainte
ca buffer-ul receptor s fie citit.
Dezactivarea receptorului
n opoziie cu transmitorul, dezactivarea receptorului se realizeaz imediat.Datele care se
aflau n curs de recepie vor fi pierdute.La dezactivare (RXEN este zero) receptorul nu va mai
suprascrie funcia pinului RxD.Buffer-ul receptorului FIFO va fi ters dac receptorul va fi
dezactivat.Datele rmase n receptor se vor pierde.
Flushing the Receive Buffer
Buffer-ul receptorul FIFO va fi ters atunci cnd receptorul va fi dezactivat,a.. buffer-ul va fi
liber.Datele necitite se vor pierde.Dac buffer-ul trebuie ters pe durata unei operaii datorit,spre
exemplu n caz de eroare, adresele UDR I/O trebuie citite nainte ca steagul RXC s fie
dezactivat.Urmtorul program prezint tergerea buffer-ului receptorului.

Not : Programul presupune faptul c partea specific antetului este inclus.


Recepia asincron a datelor
USART deine uniti de ceas i de date de recuperare pentru recepia asincron a
datelor.Ceasul de recuperare este utilizat pentru sincronizarea ratei baud generat de ceasul intern cu
recepionarea asincron a cadrelor seriale la pinul RxD.Eantioanele de date recuperate i filtrele de
tipul trece jos pentru fiecare bit recepionat,duc la mbuntirea imunitii receptorului la
zgomot.Recepia asincron a seriei de operaii depinde de precizia ratei de baud a ceasului,de rata de
recepie a cadrelor,precum i de lungimea cadrelor(numarul de bii).
65

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

1.10.7 Recuperarea asincron a ceasului


Recuperarea ceasului sincronizeaz ceasul intern cu recepia cadrelor seriale.Figura 3.36
prezint un exemplu al evoluiei bitului de start al unui cadru recepionat.Eantionul de rat este de
16 ori rata baud n Normal Mode,i de 8 ori rata baud pentru modul Double Speed Dublu
Vitez.Sgeile orizontale indic variaia sincronizrii potrivit cazului n evoluie.A se observa
variaia mare n timp la utilizarea modului dubl vitez U2X = 1.Eantioanele notate cu zero sunt
eantioane finale atunci cnd linia RXD este n modul idle(nu exist nici o comunicaie activ).

Fig.3.36
Atunci cnd ceasul de recuperare detecteaz o tranziie de pe frontul superior(idle) pe frontul
inferior(start) pe linia lui RxD,bitul de start de detecie a secvenei este iniializat.Eantionul 1 indic
primul eantion zero.Ceasul de recuperare utilizeaz eantioanele 8,9 i 10 n Normal Mode,i
eantioanele 4,5,6 pentru modul dubl vitez(indicate cu numerele ncadrate n chenare) pentru a
decide dac un bit de start a fost recepionat.Dac dou sau mai multe din aceste trei eantioane se
gsesc pe frontul superior (majoritatea decide) atunci bitul de start este respins ca un zgomot i
receptorul pornete s caute o tranziie pe frontul inferior.
1.10.8 Recuperarea asincron a datelor
Atunci cnd ceasul receptorului este sincronizat cu bitul de start, recepia datelor
ncepe.Unitatea de recuperare a datelor utilizeaz un dispozitiv cu 16 stri pentru fiecare bit n
modul normal de funcionare i 8 stri pentru modul dubl vitez.Figura 3.37 arat un exemplu de
bii de date i paritate.

Fig.3.37
66

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Decizia de pe nivelul de bit al receptorului este luat de majoritate,de cele trei eantioane
din centrul bitului recepionat.Numerele ncadrate n chenar arat centrul eantionului.Logica de
decidere : dac dou din cele trei eantioane sunt pe frontul superior,bitul recepionat este nregistrat
ca 1 logic ;dac dou din cele trei eantioane sunt pe frontul inferior atunci bitul recepionat este
nregistrat ca zero 0 logic.Pentru semnalele recepionate la pinul RxD este montat un filtru trece
jos.Procesul de recuperare este repetat pn cnd un cadru complet este recepionat,inclusiv bitul de
stop.Observaie :receptorul folosete doar primul bit de stop al cadrului recepionat.
Figura 3.38 prezint o mostra a bitului de stop i al celui mai apropiat nceput al bitului de
start pentru urmtorul cadru.

Figura 3.38
O nou tranziie de la frontul superior la frontul inferior ce indic bitul de start al unui nou
cadru poate fi recepionat dup ultimul bit ales de majoritate.n modul normal primul eantion de pe
frontul superior poate fi n punctul A.Pentru modul dubl vitez poate fi ntrziat la B.C indic bitul
de stop pentru o lungime maxim.Primul bit de start detecteaz efectul seriei de operaii asupra
receptorului.
1.10.9 Seria de operaii asincron
Seria de operaii ale receptorului este dependent de nepotrivirile dintre rata biilor
recepionai i rata baud generat intern.Dac transmitorul transmite cadre cu o rat de transfer
prea ridicat sau prea joas,sau rata baud generat intern de receptor cu aceeai frecven receptorul
nu va fi capabil s sincronizeze cadrele cu bitul de start.
Urmatoarea ecuaie poate fi folosit pentru calcularea ratei de recepie datelor i ratei baud a
recepiei interne.

D suma caracterelor i paritilor.


S eantioane pe bit.n Normal Mode S = 16 i n modul Double Speed S = 8
SF primul numr utilizat pentru eantioane. SF = 8 n Normal Mode i SF = 4 n modul Double
Speed
67

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

SM numrul utilizat pentru a indica mijlocul eantionului. SM = 9 pentru Normal Mode i SM = 5


n modul Double
Speed
Rslow este raportul cel mai mic pentru datele recepionate care poate fi acceptat n relaie cu rata
baud de recepie.
Rfast este raportul cel mai ridicat pentru recepia datelor care poate fi aceptat n relaie cu rata
baud de recepie.

1.11 Programarea paralel


1.11.1 Modul de programare
Urmtorul algoritm seteaz dispozitivul n Modul de Programare Paralel.
1. Se aplic 4.5 5.5 V ntre Vcc i GND,cu ateptare de cel puin 100 s.
2. RESET trece n 0 toogle XTAL1 de cel puin 6 ori.
3. Seteaz pinii Prog_enable n 0000 i ateapt cel puin 100 ns.
4. Trece 11.5 - 12.5V to RESET. Orice activitate asupra pinilor Prog_enable pe durata a 100
ns
dup +12V ce a fost trecut pe RESET, va cauza un eec al programului la trecerea n
modul Programare.
Observaie : dac configuraiile External Crystal i External RC sunt selectate este posibil
aplicarea
pulsurilor XTAL1.n acest caz trebuie urmrit urmtorul algoritm:
1. Setarea pinilor Prog_enable prezentai n Tabelul 107 la pagina 258 n 0000.
2. Aplicarea 4.5 - 5.5V ntre VCC i GND simultan cu 11.5 - 12.5V aplicate la RESET.
3. Se ateapt 100 s.
4. Reprogramarea siguranelor pentru ca Ceasul Extern s fie selectat ca o surs de ceas
(CKSEL3:0 = 0b0000) Dac biii Lock sunt programai,o comand Chip Erase trebuie schimbat
naintea schimbrii siguranelor..
5. Ieirea din program prin oprirea dispozitivului sau aducnd pinul RESET la 0b0.
6. Introducerea modului Programare dup algoritmul prezentat.
Consideraii pentru o programare eficient :
Sarcinile comenzilor i adreselor sunt reinute n dispozitiv pe durata programrii.Pentru o
programare eficient a se ine seama de urmtoarele :
Comenzile necesit activare doar pentru scrieri sau citiri multiple din locaiile de memorie.
Este interzis scrierea valorii $FF, care este coninutul pentru EEPROM (doar dac
sigurana EESAVE este programat i tears dupa Chip Erase.
Adresarea bitului de pe nivelul superior trebuie realizat naintea programrii sau citirii
unei ferestre de 256 de cuvinte sau 256 byte EEPROM. Aceasta se aplic tot pentru citirea biilor
de transpunere.

68

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

1.11.2 Chip Erase


Chip Erase va terge memoriile Flash i EEPROM(1) plus biii Lock.Biii Lock nu sunt
resetai nainte ca memoria s fie complet tears. Biii siguranelor nu se modific. Chip Erase
trebuie activat nainte ca Flash i/sau
EEPROM sa fie programate..
Note: 1.Memoria EEPRPOM este rezervat pe durata chip erase dac sigurana EESAVE
este programat.
Activarea comenzii Chip Erase :
1. Setarea XA1, XA0 n 10. Acest lucru face posibil activarea comenzii.
2. Setarea BS1n 0.
3. Searea DATA n 1000 0000. Aceasta este comanda pentru Chip Erase.
4. Transmite ctre XTAL1 un puls pozitiv. Aceasta activeaz comanda.
5.Transmite ctre WR un puls negativ. Aceasta pornete Chip Erase. RDY/BSY
funcioneaza pe frontul
inferior..
6. Se ateapta nainte ca RDY/BSY s treac pe frontul superior nainte de a se activa o nou
comand.
1.11.3 Programarea memoriei Flash
La programarea Flash programul de date este inclus ntr-un buffer de pagin.Aceasta permite
programarea simultan a paginilor unui program.Programarea memoriei Flash:
A. Activarea comenzii de scriere Write Flash
1. Setarea XA1, XA0 n 10. Aceasta activeaz comanda.
2. Seteaz BS1 n 0.
3. Seteaz DATA n 0001 0000. Aceast comand este pentru scriere n Flash - Write
Flash.
4. Se transmite ctre XTAL1 un puls pozitiv. Se activeaz comanda.
B. Se activeaz adresa low byte - Address Low byte
1. Seteaz XA1, XA0 n 00. Aceasta activeaz adresele..
2. Seteaz BS1 n 0. Se selecteaz adresele low
3. Seteaz DATA = Address low byte ($00 - $FF).
4. Se transmite ctre XTAL1 un puls pozitiv. Aceasta activeaz adresele lowe byte.
C. Activarea Data Low Byte
1. Seteaz XA1, XA0 n 01. Se activeaz datele.
2. Seteaz DATA = Data low byte ($00 - $FF).
3.Se transmite ctre XTAL1 un puls pozitiv. Se activeaz datele.
D. Activarea Data High Byte
1. Seteaz BS1n 1. Se selecteaz high data.
2. Seteaz XA1, XA0 n 01. Se activeaz datele.
3. Seteaz DATA = Data high byte ($00 - $FF).
4. Se transmite ctre XTAL1 un puls pozitiv. Aceasta activeaz data low..
E. Latch Data
1. Seteaz BS1 n1. Selecteaz data high.
2. Se transmite ctre PAGEL un puls pozitiv. Se elibereaz datele.
69

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

F. Se repet B prin intermediul E ca ntregul buffer s fie umplut sau nainte ca datele din
pagini s fie activate.
n timp ce adresele biilor de pe frontul superior adreseaz cuvintele din pagin,adresele
biilor de pe frontul superior adreseaz paginile din Flash.Dac n pagin se gsesc cuvinte cu adrese
pe mai puin de 8 bii, adresa bitului cel mai semnificant de frontul inferior este utilizat la scrierea
n pagina.
G. Adresarea bitului de pe frontul nalt.
1. Setarea XA1, XA0 n 00. Se activeaz adresele.
2. Seteaz BS1 n 1. Se selecteaz adresa superioar..
3. Seteaz DATA = Address high byte ($00 - $FF).
4. Se transmite ctre XTAL1 un puls pozitiv. Se activeaz adresa bitului de pe frontul superior.
H. Programarea paginii
1. Se seteaz BS1 = 0
2. Se transmite ctre WR un puls negativ. Se pornete programarea datelor n pagin. RDY/BSY
trece sus.
3. Se ateapt pn cnd RDY/BSY trece sus .I. Se repet B peste H nainte ca ntreaga memorie
Flash s fie programat sau nainte ca toate datele s fie programate.
J. Final de program.
1. 1. Seteaz XA1, XA0 n 10. Se activeaz comanda.
2. Seteaz DATA n 0000 0000. Se activeaz comanda Nici o Operaie.
3. Se transmite ctre XTAL1 un puls pozitiv. Se activeaz comanda, i se reseteaz scrierea intern
a semnalelor.
Fig. 3.39

Not: PCPAGEsi PCWORD

70

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Fig. 3.40
Not: XX se ignor. Notaia este referitoare la programul de mai sus.
Citirea memoriei Flash
Algoritmul pentru citirea memoriei Flash este :
1. A: Se execut comanda 0000 0010.
2. G: Adresarea bitului de pe frontul superior ($00 - $FF)
3. B: Adresarea bitului de pe frontul inferior ($00 - $FF)
4. Seteaz OE n0, si BS1 in 0. Memoria Flash poate fi acum citit din DATA.
5. Seteaz BS1 n 1. Memoria flash poate fi citit acum din DATA.
6. Seteaz OE n 1.
1.11.4 Programarea EPROM
Memoria EPROM este organizat n secvene. Pentru programarea EPROM datele sunt
transferate ntr-un buffer.Aceasta permite programarea simultan a secvenelor de date.Algoritmul
de programare pentru memoria EPROM este :
1. A: Executarea comenzii 0001 0001.
2. G: Adresarea bitului de pe frontul superior ($00 - $FF)
3. B: Adresarea bitului de pe frontul inferior ($00 - $FF)
4. C: ncrcarea datelor ($00 - $FF)
5. E: Transferul datelor (se transmite ctre PAGEL un puls pozitiv)
K: Se repet 3 peste 5 nainte ca bufferul s fie plin.
L: Programarea memoriei EPROM
1. Setarea BS1 n 0.
2. Se transmite ctre WR un puls negativ.Aceasta pornete programarea.
RDY/BSY trec jos.
71

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

3. Se ateapt nainte ca RDY/BSY s treac sus naintea programrii urmtoarei secvene.

Fig. 3.41
Citirea memoriei EPROM
Algoritmul pentru citirea memoriei EPROM este :
1. A: Se execut comanda 0000 0011.
2. G: Adresarea bitului de pe frontul superior ($00 - $FF)
3. B: Adresarea bitului de pe frontul inferior ($00 - $FF)
4. Seteaz OE n 0, i BS1 n 0. Memoria EPROM poate fi acum citit din DATA.
5. Seteaz OE n 1.
1.11.5 Programarea siguranelor biilor de pe frontul inferior
Algoritmul pentru programarea siguranelor biilor de pe frontul inferior este :
1. A: Se execut comanda 0100 0000.
2. C: Se activeaz bitul de date de pe frontul inferior. Bitul n = 0 programeaz i bitul n = 1
terge bitul siguranei
3. Seteaz BS1 n 0 si BS2 in 0.
4. Se transmite ctre WR un puls negative i se ateapt ca RDY/BSY s treac sus.

72

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Fig.3.42
Programarea biilor de siguran
Algoritmul pentru programarea biilor de siguran este :
1. A: Se excut comanda 0010 0000.
2. C: Se activeaz bitul de date de pe frontul inferior. Bitul n = 0 programeaz bitul de siguran.
3. Se transmite ctre WR un puls negativ i se ateapt pn cnd RDY/BSY trece sus.
Biii de siguran pot fi teri numai de ctre Chip Erase.
Citirea siguranelor i biilor de siguran
Algoritmul pentru citirea siguranelor i biilor de siguran este (pentru detalii privind
comenzile i adresarea vezi Programarea memoriei Flash la pagina 260):
1. A: Se execut comanda 0000 0100.
2. Seteaz OE n 0, BS2 n 0 i BS1 n 0. Starea biilor de siguran de pe frontul inferior
poate fi acum citit de ctre DATA(0 indic programare).
3. Seteaz OE n 0, BS2 n 1 i BS1 n 1. Starea biilor de siguran de pe frontul superior
poate fi acum citit de ctre DATA(0 indic programare).
4. Seteaz OE n 0, BS2 n 0 i BS1 n 1. Starea biilor de siguran poate fi acum citit de
ctre DATA(0 indic programare).
5. Seteaz OE n 1.

73

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Fig.3.43
Citirea biilor de transpunere
Algoritmul pentru citirea biilor de transpunere este:
1. A: Se execut comanda 0000 1000.
2. B: Adresarea bitului de pe frontul inferior ($00 - $02).
3. Seteaz OE n 0, i BS1 n 0. Bitul de transpunere pote fi acum citit..
4. Seteaz OE n 1.
Citirea biilor de calibrare
Algoritmul pentru citirea biilor de calibrare este urmtorul:
1. A: se execut comanda 0000 1000.
2. B: se adreseaz bitul de pe frontul inferior $00.
3. Seteaz OE n 0,i BS1 n 1. Biii de calibrare pot fi citii acum n DATA.
4. Seteaz OE n 1.

74

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

b = adresa bitului de pe frontul inferior


H = 0 Low byte, 1 High Byte
o = ieirea pentru date
i = intrarea pentru date
x = se ignor.

75

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

1.13 Setul de instruiuni Atmega16


ADD - Add without Carry
Descriere:
Adun 2 registre fr indicatorul Carry i pune rezultatul n registrul destinaie Rd.
Operation:
Rd Rd + Rr

(i)

(i)

Syntax:

Operands:

Program Counter:

ADD Rd,Rr

0 d 31, 0 r 31

PC PC + 1

16-bit Opcode:
0000

11rd

dddd

rrrr

Status Register (SREG) and Boolean Formulae:


I

Exemplu:
add r1,r2
add r28,r28

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

ADC - Add with Carry


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

(i)

(i)

Syntax:

Operands:

Program Counter:

ADC Rd,Rr

0 d 31, 0 r 31

PC PC + 1

16-bit Opcode:
0001

11rd

dddd

rrrr

Status Register (SREG) Boolean Formulae:


I

76

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Exemplu:
; Add R1:R0 to R3:R2
Add r2,r0 ; Add low byte
Adc r3,r1 ; Add with carry high byte
ADIW - Add Immediate to Word
Descriere:
Adun o valoare imediata (specificat n instrunciune) (0-63) la o pereche de registre i
pune rezultatul n perechea de registre..
Operation:
(i)

Rd+1:Rd Rd+1:Rd + K

Syntax:

Operands:

Program Counter:

(i)

ADIW Rd,K

d {24,26,28,30}, 0 K 63

PC PC + 1

16-bit Opcode:
1001

0110

KKdd

KKKK

Status Register (SREG) and Boolean Formulae:


I

Exemplu:
adiw r24,1 ; Add 1 to r25:r24
adiw r30,63 ; Add 63 to the Z pointer (r31:r30)
SUB - Subtract without Carry
Descriere:
Scade dou registre i pune rezultatul n registrul destinaie Rd.
Operation:
Rd Rd - Rr

(i)

(i)

Syntax:

Operands:

Program Counter:

SUB Rd,Rr

0 d 31, 0 r 31

PC PC + 1

16-bit Opcode:
0001

10rd

dddd

rrrr

Status Register and Boolean Formula:


77

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Exemplu:
sub
brne

noteq: nop

r13,r12
noteq

; Subtract r12 from r13


; Branch if r12<>r13
; Branch destination (do nothing)

SUBI - Subtract Immediate


Descriere:
Scade un registru i o constat i plaseaz rezultatul n registrul destinaie Rd.
Operation:
Rd Rd - K

(i)

(i)

Syntax:

Operands:

Program Counter:

SUBI Rd,K

16 d 31, 0 K 255

PC PC + 1

16-bit Opcode:
0101

KKKK

dddd

KKKK

Status Register and Boolean Formula:


I
-

T
-

Exemplu:
subi
brne
noteq: nop

r22,$11
noteq

; Subtract $11 from r22


; Branch if r22<>$11
; Branch destination (do nothing)

SBC - Subtract with Carry


Descriere:
Scade 2 registre i pe Carry i pune rezultatul n registrul destinaie Rd.
Operation:
(i)

Rd Rd - Rr - C

Syntax:

Operands:

Program Counter:

(i)

SBC Rd,Rr

0 d 31, 0 r 31

PC PC + 1

78

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

16-bit Opcode:
0000

10rd

dddd

rrrr

Status Register and Boolean Formula:


I
-

T
-

Exemplu:
sub
sbc

; Subtract r1:r0 from r3:r2


; Subtract low byte
; Subtract with carry high byte

r2,r0
r3,r1

SBCI - Subtract Immediate with Carry


Descriere:
Scade o constant i pe Carry din registru i pune rezultatul n registrul destinaie Rd.
Operation:
Rd Rd - K - C

(i)
(i)

Syntax:

Operands:

Program Counter:

SBCI Rd,K

16 d 31, 0 K 255

PC PC + 1

16-bit Opcode:
0100

KKKK

dddd

KKKK

Status Register and Boolean Formula:


I
-

T
-

Exemplu:
subi r16,$23
sbci r17, $4F

;
;
;

Substract $4F23 from r17 :r16


Substract low byte
Substract with carry hight byte

SBIW - Subtract Immediate from Word


Descriere:
Scade o valoare imediat din intervalul 0-63 (specificat n instruciune) dintr-o pereche de
registre i pune rezultatul n registrul pereche.
Operation:
(i)

Rd+1:Rd Rd+1:Rd - K

Syntax:

Operands:

Program Counter:

(i)

SBIW Rd,K

d {24,26,28,30}, 0 K 63

PC PC + 1

79

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

16-bit Opcode:
1001

0111

KKdd

KKKK

Status Register (SREG) and Boolean Formula:


I
-

T
-

Exemplu:
sbiw
sbiw

H
-

r24 ,1
; Substract 1 from r25:r24
r28 , 63 ; Substract 63 from Y pointer (r29:r28)

AND - Logical AND


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

Rd Rd Rr

Syntax:

Operands:

Program Counter:

(i)

AND Rd,Rr

0 d 31, 0 r 31

PC PC + 1

16-bit Opcode:
0010

00rd

dddd

rrrr

Status Register (SREG) and Boolean Formulae:


I

Exemplu:
An r2,r3
d r16,1
Ldi
An r2,r16
d

; Bitwise and r2 and r3, result in r2


; Set bitmask 0000 0001 in r16
; Isolate bit 0 in r2

ANDI - Logical AND with Immediate


Descriere:
Face I logic ntre coninutul registrului Rd i o constant i pune rezultatul n registrul
final Rd.
Operation:
80

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi
(i)

Rd Rd K

(i)

ANDI Rd,K

Syntax:

PROIECT DE DIPLOM
2007

Operands:

Program Counter:

16 d 31, 0 K 255

PC PC + 1

16-bit Opcode:
0111

KKKK

dddd

KKKK

Status Register (SREG) and Boolean Formulae:


I

Exemplu:
andi r17,$0F ; Clear upper nibble of r17
andi r18,$10 ; Isolate bit 4 in r18
andi r19,$AA ; Clear odd bits of r19
OR - Logical OR
Descriere:
Face SAU logic ntre coninutul registrelor Rd i Rr i plaseaz rezultatul n registrul
destinaie Rd.
Operation:
(i)

Rd Rd v Rr

Syntax:

Operands:

Program Counter:

(i)

OR Rd,Rr

0 d 31, 0 r 31

PC PC + 1

16-bit Opcode:
0010

10rd

dddd

rrrr

Status Register (SREG) and Boolean Formula:


I
-

Exemplu:
or
bst
brts

ok:
nop

T
-

H
-

V
0

r15,r16 ; Do bitwise or between registers


r15,6
; Store bit 6 of r15 in T flag
ok
; Branch if T flag set
; Branch destination (do nothing)

ORI - Logical OR with Immediate


81

C
-

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Descriere:
Face SAU logic ntre coninutul registrului Rd i o constant i plaseaz rezultatul n
registrul destinaie Rd.
Operation:
(i)

Rd Rd v K

(i)

ORI Rd,K

Syntax:

Operands:
k 255

Program Counter:

16 d 31, 0

PC PC +1

16-bit Opcode:
0110

KKKK

dddd

KKKK

Status Register (SREG) and Boolean Formula:


I
-

T
-

Exemplu:
ori r16 ,$F0
ori r17, 1

H
-

;
;

V
0

C
-

Set hight nibble of r16


Set bit 0 of r17

EOR Exclusive OR
Descriere:
Face SAU Exclusiv ntre coninutul registrelor Rd i Rr i pune rezultatul n registrul final Rd.
Operation:
Rd Rd Rr

(i)

(i)

Syntax:

Operands:

Program Counter:

EOR Rd,Rr

0 d 31, 0 r 31

PC PC + 1

16-bit Opcode:
0010

01rd

dddd

rrrr

Status Register (SREG) and Boolean Formula:


I
-

T
-

H
-

V
0

C
-

Exemplu:
eor r4,r4 ; Clear r4
eor r0,r22 ; Bitwise exclusive or between r0 and r22
COM - Ones Complement
Descriere:
Aceast instruciune face complement fa de 1 al registrului Rd.
82

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Operation:
(i)

Rd $FF - Rd

Syntax:

Operands:

Program Counter:

(i)

COM Rd

0 d 31

PC PC + 1

16-bit Opcode:
1001

010d

dddd

0000

Status Register (SREG) and Boolean Formulae:


I
-

T
-

H
-

Exemplu:
com
breq

zero: nop

r4
zero

V
0

C
1

; Take ones complement of r4


; Branch if zero
; Branch destination (do nothing)

NEG - Twos Complement


Descriere:
Inlocuiete coninutul registrului Rd cu complementul lui fa de 2.
Operation:
(i)

Rd $00 - Rd

Syntax:

Operands:

Program Counter:

(i)

NEG Rd

0 d 31

PC PC + 1

16-bit Opcode:
1001

010d

dddd

0001

Status Register (SREG) and Boolean Formula:


I
-

T
-

Exemplu:
sub
brpl
neg
positive: nop

r11,r0
positive
r11

; Subtract r0 from r11


; Branch if result positive
; Take twos complement of r11
; Branch destination (do nothing)
83

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

SBR - Set Bits in Register


Descriere:
Pune biii specificai n registrul Rd. Face operaia SAU logic ntre coninutul registrului
Rd i o constant K i pune rezultatul n registrul destinaie Rd.
Operation:
(i)

Rd Rd v K

Syntax:

Operands:

Program Counter:

(i)

SBR Rd,K

16 d 31, 0 K 255

PC PC + 1

16-bit Opcode:
0110

KKKK

dddd

KKKK

Status Register (SREG) and Boolean Formula:


I
-

T
-

Exemplu:
sbr
sbr

H
-

V
0

C
-

r16, 3
; Set bits 0 and 1 in r16
r17, $F0 ; Set 4 MSB in r17

CBR - Clear Bits in Register


Descriere:
terge biii specificai n registrul Rd. Face (de fapt) un I logic ntre coninutul registrului
Rd i complementul fa de 1 al lui K. Rezultatul va fi pus n registrul Rd.
Operation:
Rd Rd ($FF - K)

(i)

Syntax:
CBR Rd,K

(i)

Operands:
16 d 31, 0 K 255

Program Counter:
PC PC+1

Status Register (SREG) and Boolean Formula:


I
-

Exemplu:
cbr
cbr

T
-

H
-

V
0

r16,$F0 ; Clear upper nibble of r16


r18,1
; Clear bit 0 in r18

INC - Increment
84

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Descriere:
Adaug 1 la coninutul registrului Rd i pune rezultatul n registrul destinaie Rd.
Operation:
(i)

Rd Rd + 1

Syntax:

Operands:

Program Counter:

(i)

INC Rd

0 d 31

PC PC + 1

16-bit Opcode:
1001

010d

dddd

0011

Status Register and Boolean Formula:


I
-

T
-

Exemplu:
clr
loop inc

cpi
brne
nop

H
-

r22
r22

; clear r22
; increment r22

r22,$4F
loop

; Compare r22 to $4F


; Branch if not equal
; Continue (do nothing)

C
-

DEC-Decrement
Descriere:
Scade 1 din coninutul registrului Rd i pune rezultatul n registrul Rd. Indicatorul C din
SREG nu este afectat de aceasta operaie fcnd posibil ca instruciunea DEC sa fie folosit ntr-o
bucla de numrare a secvenelor multiple.
Operation:
(i)

Rd Rd 1

Syntax:

Operands:

Program Counter:

(i)

DEC Rd

0 d 31

PC PC + 1

16-bit Opcode:
1001

010d

dddd

Status Register and Boolean Formula:


I
-

Exemplu:
ldi

T
-

H
-

r17,$10

1010

; Load constant in r17


85

C
-

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

loop:

add
r1,r2
dec
r17
brne loop
nop

PROIECT DE DIPLOM
2007

; Add r2 to r1
; Decrement r17
; Branch if r17<>0
; Continue (do nothing)

TST - Test for Zero or Minus


Descriere:
Testeaz dac un registru este 0 sau negativ. Face I logic ntre registru i el insui.
Registrul va rmne neschimbat.
Operation:
(i) Rd Rd Rd

Syntax:
(i)

Operands:

TST Rd

Program Counter:
PC PC + 1

0 d 31

16-bit Opcode:
0010

00dd

dddd

dddd

Status Register and Boolean Formula:


I
-

T
-

Exemplu:
tst
r0
breq zero
zero: nop

H
-

V
0

C
-

; Test r0
; Branch if r0=0
; Branch destination (do nothing)

CLR - Clear Register


Descriere:
erge un registru. Aceast instruciune face SAU Exclusiv ntre registu i el insui.
Aceasta va terge toi biii din registru. Rezultatul este 0.
Operation:
(i)

(i)

Rd Rd Rd

Syntax:
CLR Rd

Operands:
0 d 31

Program Counter:
PC PC+1

16-bit Opcode:
0010

01dd

dddd

dddd

Status Register (SREG) and Boolean Formula:


86

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi
I
-

T
-

H
-

S
0

V
0

PROIECT DE DIPLOM
2007

N
0

Z
1

C
-

Exemlpu:
clr
r18
; clear r18
loop inc
r18
; increase r18

cpi
r18,$50
; Compare r18 to $50
brne loop
SER - Set all bits in Register
Descriere:
ncarc $FF direct n registrul Rd (toi biii vor fi setai n 1).
Operation:
(i)

Rd $FF

Syntax:

Operands:

Program Counter:

(i)

SER Rd

16 d 31

PC PC + 1

16-bit Opcode:
1110

1111

dddd

1111

Status Register (SREG) and Boolean Formula:


I

Exemplu:
clr
ser
out
nop
out

r16
; Clear r16
r17
; Set r17
$18, r16 ; Write zeros to Port B
; Delay (do nothing)
$18, r17 ; Write ones to Port B

MUL - Multiply Unsigned


Descriere:
Aceast instruciune face nmulirea fr semn 8-bit 8-bit 16-bit. Registrele Rd i Rr
conin numere fr semn. Cei 16 bii ai produsului fr semn se plaseaza in R1 (octet sup.) si R0
(octet inf.).
Rd

Rr

R1

87

R0

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

Multiplicand

2007

Multiplier

PROIECT DE DIPLOM

Product High

Product Low

16

Operation:
(i)

(i)

R1:R0 Rd Rr

(unsigned unsigned unsigned)

Syntax:

Operands:

Program Counter:

MUL Rd,Rr

0 d 31, 0 r 31

PC PC + 1

16-bit Opcode:
1001

11rd

dddd

rrrr

Status Register (SREG) and Boolean Formulae:


I
-

T
-

H
-

Exemplu:
mul
movw

S
-

V
-

N
-

r5,r4 ; Multiply unsigned r5 and r4


r4,r0 ; Copy result back in r5:r4

MULS - Multiply Signed


Descriere:
Aceast instruciune face nmulirea cu semn 8-bit 8-bit 16-bit. Registrele Rd i Rr
conin numere cu semn.
Rd

Rr

Multiplicand

Multiplier

R1

R0

Product High

Product Low

16

Operation:
(i)

(i)

R1:R0 Rd Rr

(signed signed signed)

Syntax:

Operands:

Program Counter:

MULS Rd,Rr

16 d 31, 16 r 31

PC PC + 1

16-bit Opcode:
0000

0010

dddd

rrrr

Status Register (SREG) and Boolean Formula:


I
-

T
-

H
-

S
-

V
-

N
-

Exemplu:
88

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

muls r21,r20
movw r20,r0

PROIECT DE DIPLOM
2007

; Multiply signed r21 and r20


; Copy result back in r21:r20

MULSU - Multiply Signed with Unsigned


Descriere:
Aceast instruciune face nmultirea ntre 2 numere- unul cu semn iar celalalt fr semn
8-bit 8-bit 16-bit. Registrul Rd conine numere cu semn iar registrul Rr conine numere fr
semn.
Rd

Rr

Multiplicand

Multiplier

R1

R0

Product High

Product Low

16

Operation:
(i)

(i)

R1:R0 Rd Rr

(signed signed unsigned)

Syntax:

Operands:

Program Counter:

MULSU Rd,Rr

16 d 23, 16 r 23

PC PC + 1

16-bit Opcode:
0000

0011

0ddd

0rrr

Status Register (SREG) and Boolean Formula:


I
-

T
-

H
-

Exemplu:
mulsu r21,r20 ;
movw r20,r0 ;

S
-

V
-

N
-

Multiply signed r21 with unsigned r20, signed result


Copy result back in r21:r20

FMUL - Fractional Multiply Unsigned


Descriere:
Aceast instruciune face nmulirea fr semn 8-bit 8-bit 16-bit i execut o operaie de
deplasare cu 1 bit la stanga.
Rd
Multiplicand
8

Rr

Multiplier

R1

R0

Product High

Product Low
16

Att denmulitul Rd ct i nmulitorul Rr sunt dou registre care conin numere fracionare
fr semn.
Operation:
89

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

(i)

R1:R0 Rd Rr

(unsigned (1.15) unsigned (1.7) unsigned (1.7))

Syntax:

Operands:

Program Counter:

(i)

FMUL Rd,Rr

16 d 23, 16 r 23

PC PC + 1

16-bit Opcode:
0000

0011

0ddd

1rrr

Status Register (SREG) and Boolean Formula:


I
-

T
-

H
-

Exemplu:
fmul r23,r22
movw r22,r0

S
-

V
-

N
-

; Multiply unsigned r23 and r22 in (1.7) format, result in (1.15) format
; Copy result back in r23:r22

FMULS - Fractional Multiply Signed


Descriere:
Aceast instruciune face nmulirea cu semn 8-bit 8-bit 16-bit i execut o operaie de
deplasare cu 1 bit la stanga.
Rd

Rr

Multiplicand

Multiplier

R1

R0

Product High

Product Low

16

Att denmulitul Rd ct i nmulitorul Rr sunt dou registre care conin numere fracionare
cu semn.
Operation:
(i)

(i)

R1:R0 Rd Rr

(signed (1.15) signed (1.7) signed (1.7))

Syntax:

Operands:

Program Counter:

FMUL Rd,Rr

16 d 23, 16 r 23

PC PC + 1

16-bit Opcode:
0000

0011

1ddd

0rrr

Status Register (SREG) and Boolean Formulae:


I
-

T
-

Exemplu:
fmuls r23,r22
movw r22,r0

H
-

S
-

V
-

N
-

; Multiply signed r23 and r22 in (1.7) format, result in (1.15) format
; Copy result back in r23:r22

FMULSU - Fractional Multiply Signed with Unsigned


90

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Descriere:
Aceast instruciune face nmulirea ntre un numr cu semn i un numr fr semn 8-bit 8bit 16-bit i execut o operaie de deplasare cu 1 bit la stanga. Denmulitul Rd este un numr
fracionar cu semn iar nmulitorul Rr este un numr fracionar far semn.
Rd

Rr

Multiplicand

Multiplier

R1

R0

Product High

Product Low

16

Operation:
(i)
(i)

R1:R0 Rd Rr

(signed (1.15) signed (1.7) unsigned (1.7))

Syntax:

Operands:

Program Counter:

FMULSU Rd,Rr

16 d 23, 16 r 23

PC PC + 1

16-bit Opcode:
0000

0011

1ddd

1rrr

Status Register (SREG) and Boolean Formulae:


I
-

T
-

H
-

S
-

V
-

N
-

Exemplu:
fmulSU r23,r22 ; Multiply signed r23 with unsigned r22 in (1.7) format, signed result in
(1.15) format
movw r22,r0
; Copy result back in r23:r22

RJMP - Relative Jump


Descriere:
Salt relativ la o adresa din intervalul [PC - 2K + 1 , PC + 2K]. Pentru microcrocontrolere
AVR cu memoria program de pn la 4K cuvinte (8kb) aceast instruciune poate adresa ntreaga
memorie.
Operation:
(i)

PC PC + k + 1

Syntax:

Operands:

(i)

RJMP k

-2K k 2K

Program Counter:
PC PC + k + 1

91

Stack
Unchanged

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

16-bit Opcode:
1100

kkkk

kkkk

kkkk

Status Register (SREG) and Boolean Formula:


I
-

T
-

Exemplu:
cpi
brne
rjmp
error: add
inc
ok:
nop

H
-

S
-

r16,$42
error
ok
r16,r17
r16

V
-

N
-

Z
-

C
-

; Compare r16 to $42


; Branch if r16 <> $42
; Unconditional branch
; Add r17 to r16
; Increment r16
; Destination for rjmp (do nothing)

IJMP - Indirect Jump


Descriere:
Salt indirect la adresa indicat de ctre registrul pointer Z n registrul fiier. Registrul
pointer Z este de 16 bii i permite apelarea unei subrutine inclus n primele 64k cuvinte din
memoria programului.
Operation:
(i)
(ii)

PC Z(15:0)
Devices with 16 bits PC, 128k bytes program memory maximum
PC(15:0) Z(15:0)
Devices with 22 bits PC, 8M bytes program memory maximum
PC(21:16)0

Syntax:
(i),(ii)

Operands:

IJMP

Program Counter:

None

Stack:

See Operation

Not Affected

16-bit Opcode:
1001

0100

0000

1001

Status Register (SREG) and Boolean Formula:


I
-

T
-

Exemplu:
mov r30,r0
ijmp

H
-

S
-

V
-

N
-

Z
-

; Set offset to jump table


; Jump to routine pointed to by r31:r30

JMP Jump
92

C
-

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Descriere:
Sare la o adres din zona memoriei program de 4M.
Operation:
(i)

PC k

Syntax:

Operands:

(i)

JMP k

0 k 4M

Program Counter:

Stack:

PC k

Unchanged

32-bit Opcode:
1001
kkkk

010k
kkkk

kkkk
kkkk

110k
kkkk

Status Register (SREG) and Boolean Formula:


I

Exemplu:
mov
jmp

farplc: nop

r1,r0 ; Copy r0 to r1
farplc ; Unconditional jump
; Jump destination (do nothing)

RCALL- Relative Call to Subroutine


Descriere:
Apeleaz o subrutin la o adres din domeniul [PC - 2K + 1 , PC + 2K]. Adresa returnat
este stocat n stiva. Pentru microcrocontrolere AVR cu memoria program de pn la 4K cuvinte
(8kb) aceast instruciune poate adresa ntreaga memorie. Pointerul stivei scade cu 2 la introducerea
lui PC.
Operation:
(i) PCk
(ii) PCk

Devices with 16 bits PC,128k bytes program memory maximum


Devices with 22 bits PC,4M bytes program memory maximum

Syntax:

Operands:

Program Counter:

Stack:

(i)

RCALL k

-2K k 2K

PC PC + k + 1

STACK PC + 1
SP SP - 2 (2 bytes, 16 bits)

(ii)

RCALL k

-2K k 2K

PC PC + k + 1

STACK PC + 1
SP SP - 3 (3 bytes, 22 bits)

16-bit Opcode:
1101

kkkk

kkkk

kkkk

93

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

Status Register (SREG) and Boolean Formula:


I
-

T
-

H
-

S
-

V
-

PROIECT DE DIPLOM
2007

N
-

Z
-

C
-

Exemplu:
rcall

routine: push

pop
ret

routine ; Call subroutine


r14
r14

; Save r14 on the stack

; Restore r14
; Return from subroutine

ICALL - Indirect Call to Subroutine


Descriere:
Cheam indirect o subrutin indicat de ctre registrul pointer Z n registrul fiier. Registrul
pointer Z este de 16 bii i permite apelarea unei subrutine ce se afl n primele 64k cuvinte din
memoria programului. Pointerul stivei scade cu 2 la introducerea lui PC.
Operation:
(i)
(ii)

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

Syntax:

Devices with 16 bits PC, 128k bytes program memory maximum


Devices with 22 bits PC, 8M bytes program memory maximum

Operands:

Program Counter:

(i)

ICALL

None

See Operation

(ii)

ICALL

None

See Operation

Stack:
STACK PC + 1
SP SP - 2 (2 bytes, 16 bits)
STACK PC + 1
SP SP - 3 (3 bytes, 22 bits)

16-bit Opcode:
1001

0101

0000

1001

Status Register (SREG) and Boolean Formula:


I
-

Exemplu:
mov
icall

T
-

H
-

r30,r0

S
-

V
-

N
-

Z
-

; Set offset to call table


; Call routine pointed to by r31:r30

CALL - Long Call to a Subroutine


Descriere:
94

C
-

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Apeleaz o subrutin din memoria de programe. Adresa instruciunii urmtoare (PC+2), va


fi stocat n stiva (pentru revenire). Pointerul stivei scade cu 2 la introducerea lui PC.
Operation:
(i) PCk
Devices with 16 bits PC,128k bytes program memory maximum
(ii) PCk
Devices with 22 bits PC,4M bytes program memory maximum

Syntax:

Operands:

(i)

CALL k

0 k 64K

Program Counter
PC k

STACK PC+2
SP SP-2, (2 bytes, 16 bits)

Stack:

(ii)

CALL k

0 k 4M

PC k

STACK PC+2
SP SP-3 (3 bytes, 22 bits)

32-bit Opcode:
1001
kkkk

010k
kkkk

kkkk
kkkk

111k
kkkk

Status Register (SREG) and Boolean Formula:


I

Exemplu:
mov
call
nop

check: cpi
breq
ret

error: rjmp

r16,r0
check

; Copy r0 to r16
; Call subroutine
; Continue (do nothing)

r16,$42
error

; Check if r16 has a special value


; Branch if equal
; Return from subroutine

error

; Infinite loop

RET - Return from Subroutine


Descriere:
ntoarcerea din subrutin. Adresa returnat este ncarcat din stiva. Pointerul stivei creste.
Operation:
(i)
(ii)

PC (15:0) STACK
PC (21:0) STACK

Syntax:
(i)
(ii)

RET
RET

Devices with 16 bits PC, 128k bytes program memory maximum


Devices with 22 bits PC, 8M bytes program memory maximum

Operands:
None
None

Program Counter:
See Operation
See Operation

16-bit Opcode:
1001

0101

0000

1000

95

Stack:
SP SP + 2, (2 bytes, 16 bits)
SP SP + 3, (3 bytes,22 bits)

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

Status Register (SREG) and Boolean Formula:


I
-

T
-

H
-

S
-

V
-

PROIECT DE DIPLOM
2007

N
-

Z
-

C
-

Exemplu:
call

routine: push

pop
ret

routine

Call subroutine

r14
r14

; Save r14 on the stack

; Restore r14
; Return from subroutine

RETI - Return from Interrupt


Descriere:
ntoarcerea din ntrerupere. Adresa returnat este ncrcat din stiva i indicatorul de
ntrerupere se pune n 1. Atenie: nu se salveaz automat n stiv registrul indicatorului de condiii
(F) i evident nu se reface automat din stiv.
Operation:
(i)
(ii)

PC (15:0) STACK
PC (21:0) STACK

Syntax:
(i)
(ii)

Devices with 16 bits PC, 128k bytes program memory maximum


Devices with 22 bits PC, 8M bytes program memory maximum

Operands:

RETI
RETI

Program Counter:

None
None

See Operation
See Operation

16-bit Opcode:
1001

0101

0001

1000

Status Register (SREG) and Boolean Formula:


I
1

T
-

Exemplu:

extint: push r0

pop r0
reti

H
-

S
-

V
-

N
-

; Save r0 on the stack


; Restore r0
; Return and enable interrupts

CPSE - Compare Skip if Equal


Descriere:
96

Z
-

Stack:
SP SP + 2, (2 bytes, 16 bits)
SP SP + 3, (3 bytes,22 bits)

C
-

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Aceast instruciune face o comparaie ntre registrele Rd i Rr i sare la urmatoarea


instruciune dac Rd=Rr.
Operation:
If Rd = Rr then PC PC + 2 (or 3) else PC PC + 1

(i)

(i)

Syntax:

Operands:

Program Counter:

CPSE Rd,Rr

0 d 31, 0 r 31

PC PC + 1, Condition false - no skip


PC PC + 2, Skip a one word instruction
PC PC + 3, Skip a two word instruction

16-bit Opcode:
0001

00rd

dddd

rrrr

Status Register (SREG) and Boolean Formula:


I
-

T
-

Exemplu:
inc
r4
cpse
r4,r0
neg
r4
nop

H
-

;
;
;
;

S
-

V
-

N
-

Z
-

C
-

Increase r4
Compare r4 to r0
Only executed if r4<>r0
Continue (do nothing)

CP-Compare
Descriere:
Aceast instruciune face o comparaie ntre 2 registre: Rd i Rr. Niciunul dintre aceste
registre nu se schimb. Sunt afectai toi indicatorii de condiii.
Operation:
(i)

Rd Rr

Syntax:

Operands:

Program Counter:

(i)

CP Rd,Rr

0 d 31, 0 r 31

PC PC + 1

16-bit Opcode:
0001

01rd

dddd

rrrr

Status Register (SREG) and Boolean Formula:


I
-

T
-

Exemplu:
cp
r4,r19
brne noteq

noteq: nop

; Compare r4 with r19


; Branch if r4 <> r19
; Branch destination (do nothing)
97

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

CPC-Compare with Carry


Descriere:
Aceast instruciune face o comparare ntre registrele Rd i Rr i deasemenea ia n
considerare valoarea curent din Carry. Niciunul din registre nu este afectat. Sunt afectai toi
indicatorii de condiii.
Operation:
(i)

Rd - Rr - C

Syntax:

Operands:

Program Counter:

(i)

CPC Rd,Rr

0 d 31, 0 r 31

PC PC + 1

16-bit Opcode:
0000

01rd

dddd

rrrr

Status Register (SREG) and Boolean Formula:


I
-

T
-

Exemplu:
; Compare r3:r2 with r1:r0
; Compare low byte
; Compare high byte
; Branch if not equal

cp
r2,r0
cpc r3,r1
brne noteq

noteq: nop
; Branch destination (do nothing)
CPI - Compare with Immediate
Descriere:
Aceast instruciune face o comparaie ntre registrul Rd i o constant. Registrul nu este
schimbat. Sunt afectai toi indicatorii de condiii.
Operation:
(i)

Rd - K

(i)

Syntax:

Operands:

Program Counter:

CPI Rd,K

16 d 31, 0 K 255

PC PC + 1

16-bit Opcode:
0011

KKKK

dddd

KKKK

Status Register (SREG) and Boolean Formula:


I
-

T
-

98

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

Exemplu:
cpi
brne

error nop

r19,3
error

PROIECT DE DIPLOM
2007

; Compare r19 with 3


; Branch if r19<>3
; Branch destination (do nothing)

SBRC - Skip if Bit in Register is Cleared


Descriere:
Aceast instruciune testeaz un singur bit din registru i sare la urmtoarea instruciune dac
bitul este 0.
Operation:
(i)

If Rr(b) = 0 then PC PC + 2 (or 3) else PC PC + 1

Syntax:

Operands:

Program Counter:

(i)

SBRC Rr,b

0 r 31, 0 b 7

PC PC + 1, Condition false - no skip


PC PC + 2, Skip a one word instruction
PC PC + 3, Skip a two word instruction

16-bit Opcode:
1111

110r

rrrr

0bbb

Status Register (SREG) and Boolean Formula:


I

Exemplu:
sub r0,r1
sbrc r0,7
sub r0, r1
nop

;
;
;
;

Subtract r1 from r0
Skip if bit 7 in r0 cleared
Only executed if bit 7 in r0 not cleared
Continue (do nothing)

SBRS - Skip if Bit in Register is Set


Descriere:
Aceast instruciune testeaz un singur bit din registru i sare la urmtoarea instruciune dac
bitul este 1.
Operation:
(i)

If Rr(b) = 1 then PC PC + 2 (or 3) else PC PC + 1

Syntax:

Operands:

Program Counter:
99

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi
(i)

PROIECT DE DIPLOM
2007

0 r 31, 0 b 7

SBRS Rr,b

PC PC + 1, Condition false - no skip


PC PC + 2, Skip a one word instruction
PC PC + 3, Skip a two word instruction

16-bit Opcode:
1111

111r

rrrr

0bbb

Status Register (SREG) and Boolean Formula:


I
-

T
-

H
-

Exemplu:

sub
sbrs
neg
nop

S
-

r0, r1
r0, 7
r0

;
;
;
;

V
-

N
-

Z
-

C
-

Substract r1 from r0
Skip if bit 7 in r0 set
Only executed if bit 7 in r0 not set
Continue (do nothing)

SBIC - Skip if Bit in I/O Register is Cleared


Descriere:
Aceast instruciune testeaz un singur bit n registrul de Intrare/Ieire i sare la urmatoarea
instruciune dac bitul este 0.
Operation:
If I/O(A,b) = 0 then PC PC + 2 (or 3) else PC PC + 1

(i)

(i)

Syntax:

Operands:

Program Counter:

SBIC A,b

0 A 31, 0 b 7

PC PC + 1, Condition false - no skip


PC PC + 2, Skip a one word instruction
PC PC + 3, Skip a two word instruction

16-bit Opcode:
1001

1001

AAAA

Abbb

Status Register (SREG) and Boolean Formula:


I
-

T
-

H
-

Exemplu:
E2wait:
sbic $1c,1
rjmp e2wait
nop

S
-

V
-

N
-

Z
-

; Skip next inst. If EEWE cleared


; EEPROM write not finished
; Continue (do nothing)

SBIS - Skip if Bit in I/O Register is Set


Descriere:
100

C
-

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Aceast instruciune testeaz un singur bit n registrul de Intrare/Ieire i sare la urmatoarea


instruciune dac bitul este 1.
Operation:
(i)

If I/O(A,b) = 1 then PC PC + 2 (or 3) else PC PC + 1

Syntax:

Operands:

Program Counter:

(i)

SBIS A,b

0 A 31, 0 b 7

PC PC + 1, Condition false - no skip


PC PC + 2, Skip a one word instruction
PC PC + 3, Skip a two word instruction

16-bit Opcode:
1001

1011

AAAA

Abbb

Status Register (SREG) and Boolean Formula:


I
-

T
-

H
-

S
-

V
-

N
-

Z
-

C
-

Exemplu:
waitset : sbis
$10,0
; Skip next inst. If bit 0 in Port D set
Rjmp waitset ; Bit not set
nop
; Continue (do nothing)
BRBS - Branch if Bit in SREG is Set
Descriere:
Salt condiionat relativ. Testeaz un bit n SREG ; dac bitul e 1 PC crete cu k+1 altfel
crete normal cu 1. Saltul se face cu +k sau k. Parametrul k este un deplasament fa de valoarea
din PC i este reprezentat n complement fa de 2.
Operation:
(i)

If SREG(s) = 1 then PC PC + k + 1, else PC PC + 1

Syntax:

Operands:

Program Counter:

(i)

BRBS s,k

0 s 7, -64 k +63

PC PC + k + 1
PC PC + 1, if condition is false

16-bit Opcode:
1111

00kk

kkkk

ksss

Status Register (SREG) and Boolean Formulae:


I

Exemplu:
bst
r0,3 ; Load T bit with bit 3 of r0
brbs 6,bitset ; Branch T bit was set

bitset: nop
; Branch destination (do nothing)
101

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

BRBC - Branch if Bit in SREG is Cleared


Descriere:
Salt condiionat relativ. Testeaz un bit n SREG ; dac bitul e zero PC crete cu k+1 altfel
crete normal cu 1. Saltul se face cu +k sau k. Parametrul k este un deplasament fa de valoarea
din PC i este reprezentat n complement faa de 2.
Operation:
If SREG(s) = 0 then PC PC + k + 1, else PC PC + 1

(i)

(i)

Syntax:

Operands:

Program Counter:

BRBC s,k

0 s 7, -64 k +63

PC PC + k + 1
PC PC + 1, if condition is false

16-bit Opcode:
1111

01kk

kkkk

ksss

Status Register (SREG) and Boolean Formulae:


I

Exemplu:
cpi
r20,5 ; Compare r20 to the value 5
brbc 1,noteq ; Branch if zero flag cleared
...
noteq:nop
; Branch destination (do nothing)
BREQ - Branch if Equal
Descriere:
Salt condiionat relativ. Testeaz Zero flag (indicatorul Z) ; daca acesta e 1 logic PC
crete cu k+1 altfel crete normal cu 1. Indicatorul Z este 1 dac Rd=Rr , n registre fiind numere cu
sau far semn. Saltul se face cu +k sau k. Parametru k este un deplasament fa de valoarea din
PC i este reprezentat n complement fa de 2.
Operation:
If Rd = Rr (Z = 1) then PC PC + k + 1, else PC PC + 1

(i)

(i)

Syntax:

Operands:

Program Counter:

BREQ k

-64 k +63

PC PC + k + 1
PC PC + 1, if condition is false

16-bit Opcode:
1111

00kk

kkkk

k001

Status Register (SREG) and Boolean Formulae:


I

102

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi
-

PROIECT DE DIPLOM
2007
-

Exemplu:
cp
r1,r0 ; Compare registers r1 and r0
breq equal
; Branch if registers equal

equal: nop
; Branch destination (do nothing)
BRNE - Branch if Not Equal
Descriere:
Salt condiionat relativ. Testeaz indicatorul Z; dac acesta e 0 logic, PC crete cu k+1
altfel crete normal cu 1. Indicatorul Z este 0 dac Rd Rr , n registre fiind numere cu sau far
semn. Saltul se face cu +k sau k. Parametru k este un deplasament fa de valoarea din PC i este
reprezentat n complement fa de 2.
Operation:
(i)

If Rd Rr (Z = 0) then PC PC + k + 1, else PC PC + 1

Syntax:

Operands:

Program Counter:

(i)

BRNE k

-64 k +63

PC PC + k + 1
PC PC + 1, if condition is false

16-bit Opcode:
1111

01kk

kkkk

k001

Status Register (SREG) and Boolean Formula:


I

Exemplu:
eor
loop: inc

cpi
brne
nop

r27,r27
r27

;
;

Clear r27
Increase r27

r27,5
loop

;
;
;

compare r27 to 5
Branch if r27 <> 5
Loop exit (do nothing)

BRCS - Branch if Carry Set


Descriere:
Salt condiionat relativ. Testeaz indicatorul Carry; dac Carry este 1, PC crete cu k+1 altfel
crete normal cu 1. Saltul se face cu +k sau k. Parametru k este un deplasament fa de valoarea
din PC i este reprezentat n complement fa de 2.
103

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Operation:
If C = 1 then PC PC + k + 1, else PC PC + 1

(i)

(i)

Syntax:

Operands:

Program Counter:

BRCS k

-64 k +63

PC PC + k + 1
PC PC + 1, if condition is false

16-bit Opcode:
1111

00kk

kkkk

k000

Status Register (SREG) and Boolean Formulae:


I

Exemplu:
cpi
r26,$56 ; Compare r26 with $56
brcs carry
; Branch if carry set

carry: nop
; Branch destination (do nothing)

BRCC - Branch if Carry Cleared


Descriere:
Salt condiionat relativ. Testeaz indicatorul Carry; dac Carry este zero PC crete cu k+1
altfel crete normal cu 1. Saltul se face cu +k sau k. Parametru k este un deplasament fa de
valoarea din PC i este reprezentat n complement fa de 2.
Operation:
(i)

If C = 0 then PC PC + k + 1, else PC PC + 1

Syntax:

Operands:

Program Counter:

(i)

BRCC k

-64 k +63

PC PC + k + 1
PC PC + 1, if condition is false

16-bit Opcode:
1111

01kk

kkkk

k000

Status Register (SREG) and Boolean Formulae:


I

Exemplu:
104

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

add r22,r23 ; Add r23 to r22


brcc nocarry ; Branch if carry cleared

nocarry: nop
; Branch destination (do nothing)
BRSH - Branch if Same or Higher (Unsigned)
Descriere:
Salt condiionat relativ. Testeaz indicatorul Carry; dac acesta este 0 logic, PC crete cu
k+1 altfel crete normal cu 1. Indicatorul C este 0 dac Rd Rr , n registre fiind numere cu sau far
semn. Saltul se face cu +k sau k. Parametru k este un deplasament fa de valoarea din PC i este
reprezentat n complement fa de 2.
Operation:
If Rd Rr (C = 0) then PC PC + k + 1, else PC PC + 1

(i)

(i)

Syntax:

Operands:

Program Counter:

BRSH k

-64 k +63

PC PC + k + 1
PC PC + 1, if condition is false

16-bit Opcode:
1111

01kk

kkkk

k000

Status Register (SREG) and Boolean Formula:


I

Exemplu:
subi r19,4
; Subtract 4 from r19
brsh highsm ; Branch if r19 >= 4 (unsigned)

highsm:
nop
; Branch destination (do nothing)
BRLO - Branch if Lower (Unsigned)
Descriere:
Salt condiionat relativ. Testeaz indicatorul Carry; dac acesta este 1 logic, PC crete cu
k+1 altfel crete normal cu 1. Indicatorul C este 1 dac Rd Rr , n registre fiind numere cu sau far
semn. Saltul se face cu +k sau k. Parametru k este un deplasament fa de valoarea din PC i este
reprezentat n complement fa de 2.
Operation:
(i)

If Rd < Rr (C = 1) then PC PC + k + 1, else PC PC + 1

105

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

(i)

PROIECT DE DIPLOM
2007

Syntax:

Operands:

Program Counter:

BRLO k

-64 k +63

PC PC + k + 1
PC PC + 1, if condition is false

16-bit Opcode:
1111

00kk

kkkk

k000

Status Register (SREG) and Boolean Formulae:


I

Exemplu:
eor
r19,r19
loop: inc
r19

cpi
r19,$10
brlo loop
nop

; Clear r19
; Increase r19
; Compare r19 with $10
; Branch if r19 < $10 (unsigned)
; Exit from loop (do nothing)

BRMI - Branch if Minus


Descriere:
Salt condiionat relativ. Testeaz indicatorul N; dac acesta e 1 logic, PC crete cu k+1
altfel crete normal cu 1. Saltul se face cu +k sau k. Parametru k este un deplasament fa de
valoarea din PC i este reprezentat n complement fa de 2.
Operation:
(i)

If N = 1 then PC PC + k + 1, else PC PC + 1

Syntax:

Operands:

Program Counter:

(i)

BRMI k

-64 k +63

PC PC + k + 1
PC PC + 1, if condition is false

16-bit Opcode:
1111

00kk

kkkk

k010

Status Register (SREG) and Boolean Formula:


I

Exemplu:
subi
brmi

negative:

r18,4
; Subtract 4 from r18
negative ; Branch if result negative
nop

; Branch destination (do nothing)

BRPL - Branch if Plus


106

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Descriere:
Salt condiionat relativ. Testeaz indicatorul N; dac acesta e 0 logic, PC crete cu k+1
altfel crete normal cu 1. Saltul se face cu +k sau k. Parametru k este un deplasament fa de
valoarea din PC i este reprezentat n complement fa de 2.
Operation:
If N = 0 then PC PC + k + 1, else PC PC + 1

(i)

(i)

Syntax:

Operands:

Program Counter:

BRPL k

-64 k +63

PC PC + k + 1
PC PC + 1, if condition is false

16-bit Opcode:
1111

01kk

kkkk

k010

Status Register (SREG) and Boolean Formula:


I

Exemplu:
subi r26,$50
; Subtract $50 from r26
brpl positive
; Branch if r26 positive

positive: nop
; Branch destination (do nothing)
BRGE - Branch if Greater or Equal (Signed)
Descriere:
Salt condiionat relativ. Testeaz bitul de semn S; dac acesta e 0 logic, PC crete cu
k+1 altfel crete normal cu 1. Indicatorul S este 0 dac Rd Rr , n registre fiind numere cu sau far
semn. Saltul se face cu +k sau k. Parametru k este un deplasament fa de valoarea din PC i este
reprezentat n complement fa de 2.
Operation:
(i)

If Rd Rr (N V = 0) then PC PC + k + 1, else PC PC + 1

Syntax:

Operands:

Program Counter:

(i)

BRGE k

-64 k +63

PC PC + k + 1
PC PC + 1, if condition is false

16-bit Opcode:
1111

01kk

kkkk

k100

Status Register (SREG) and Boolean Formulae:


I

Exemplu:
cp
r11,r12
brge greateq

; Compare registers r11 and r12


; Branch if r11 r12 (signed)
107

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

greateq: nop

PROIECT DE DIPLOM
2007

; Branch destination (do nothing)

BRLT - Branch if Less Than (Signed)


Descriere:
Salt condiionat relativ. Testeaz bitul de semn S; dac acesta e 1 logic, PC crete cu
k+1 altfel crete normal cu 1. Indicatorul S este 1 daca Rd < Rr , n registre fiind numere cu sau far
semn. Saltul se face cu +k sau k. Parametru k este un deplasament fa de valoarea din PC i este
reprezentat n complement fa de 2.
Operation:
(i)

If Rd < Rr (N V = 1) then PC PC + k + 1, else PC PC + 1

Syntax:

Operands:

Program Counter:

(i)

BRLT k

-64 k +63

PC PC + k + 1
PC PC + 1, if condition is false

16-bit Opcode:
1111

00kk

kkkk

k100

Status Register (SREG) and Boolean Formulae:


I

Exemplu:
cp
brlt

less: nop

r16,r1 ; Compare r16 to r1


less
; Branch if r16 < r1 (signed)
; Branch destination (do nothing)

BRHS - Branch if Half Carry Flag is Set


Descriere:
Salt condiionat relativ. Testeaz indicatorul Half Carry; dac acesta e 1 logic, PC crete
cu k+1 altfel crete normal cu 1. Saltul se face cu +k sau k. Parametru k este un deplasament fa
de valoarea din PC i este reprezentat n complement fa de 2.
Operation:
(i)

If H = 1 then PC PC + k + 1, else PC PC + 1

Syntax:

Operands:

Program Counter:

(i)

BRHS k

-64 k +63

PC PC + k + 1
PC PC + 1, if condition is false

16-bit Opcode:
108

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi
1111

00kk

kkkk

PROIECT DE DIPLOM
2007

k101

Status Register (SREG) and Boolean Formula:


I

Exemplu:
brhs hset

hset : nop

; Branch if half carry flag set


; Branch destination (do nothing)

BRHC - Branch if Half Carry Flag is Cleared


Descriere:
Salt condiionat relativ. Testeaz indicatorul Half Carry; dac acesta e 0 logic, PC crete
cu k+1 altfel crete normal cu 1. Saltul se face cu +k sau k. Parametru k este un deplasament fa
de valoarea din PC i este reprezentat n complement fa de 2.
Operation:
If H = 0 then PC PC + k + 1, else PC PC + 1

(i)

(i)

Syntax:

Operands:

Program Counter:

BRHC k

-64 k +63

PC PC + k + 1
PC PC + 1, if condition is false

16-bit Opcode:
1111

01kk

kkkk

k101

Status Register (SREG) and Boolean Formula:


I

Exemplu:
brhc hclear
; Branch if half carry flag cleared

hclear: nop
; Branch destination (do nothing)
BRTS - Branch if the T Flag is Set
Descriere:
Salt condiionat relativ. Testeaz indicatorul T; dac acesta e 1 logic, PC crete cu k+1
altfel crete normal cu 1. Saltul se face cu +k sau k. Parametru k este un deplasament fa de
valoarea din PC i este reprezentat n complement fa de 2.
Operation:
109

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

(i)

If T = 1 then PC PC + k + 1, else PC PC + 1

Syntax:

Operands:

Program Counter:

(i)

BRTS k

-64 k +63

PC PC + k + 1
PC PC + 1, if condition is false

16-bit Opcode:
1111

00kk

kkkk

k110

Status Register (SREG) and Boolean Formulae:


I

Exemplu:
bst
r3,5 ; Store bit 5 of r3 in T flag
brts tset
; Branch if this bit was set

tset: nop
; Branch destination (do nothing)
BRTC - Branch if the T Flag is Cleared
Descriere:
Salt condiionat relativ. Testeaz indicatorul T; dac acesta e 0 logic, PC crete cu k+1
altfel crete normal cu 1. Saltul se face cu +k sau k. Parametru k este un deplasament fa de
valoarea din PC i este reprezentat n complement fa de 2.
Operation:
(i)

If T = 0 then PC PC + k + 1, else PC PC + 1

Syntax:

Operands:

Program Counter:

(i)

BRTC k

-64 k +63

PC PC + k + 1
PC PC + 1, if condition is false

16-bit Opcode:
1111

01kk

kkkk

k110

Status Register (SREG) and Boolean Formulae:


I

Exemplu:
bst
brtc

tclear: nop

r3,5 ; Store bit 5 of r3 in T flag


tclear ; Branch if this bit was cleared
; Branch destination (do nothing)

BRVS - Branch if Overflow Set


110

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Descriere:
Salt condiionat relativ. Testeaz indicatorul V; dac acesta e 1 logic, PC crete cu k+1
altfel crete normal cu 1. Saltul se face cu +k sau k. Parametru k este un deplasament fa de
valoarea din PC i este reprezentat n complement fa de 2.
Operation:
(i)

If V = 1 then PC PC + k + 1, else PC PC + 1

Syntax:

Operands:

Program Counter:

(i)

BRVS k

-64 k +63

PC PC + k + 1
PC PC + 1, if condition is false

16-bit Opcode:
1111

00kk

kkkk

k011

Status Register (SREG) and Boolean Formula:


I

Exemplu:
add
brvs

overfl: nop

r3,r4 ; Add r4 to r3
overfl ; Branch if overflow
; Branch destination (do nothing)

BRVC - Branch if Overflow Cleared


Descriere:
Salt condiionat relativ. Testeaz indicatorul V; dac acesta e 0 logic, PC crete cu k+1
altfel crete normal cu 1. Saltul se face cu +k sau k. Parametru k este un deplasament fa de
valoarea din PC i este reprezentat n complement fa de 2.
Operation:
(i)

If V = 0 then PC PC + k + 1, else PC PC + 1

Syntax:

Operands:

Program Counter:

(i)

BRVC k

-64 k +63

PC PC + k + 1
PC PC + 1, if condition is false

16-bit Opcode:
1111

01kk

kkkk

k011

Status Register (SREG) and Boolean Formula:


I

111

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi
-

PROIECT DE DIPLOM
2007
-

Exemplu:
add
r3,r4 ; Add r4 to r3
brvc noover ; Branch if no overflow

noover:
nop
; Branch destination (do nothing)

MOV - Copy Register


Descriere:
Aceast instruciune copiaz un registru n altul. Registrul surs, Rr, rmne neschimbat n
timp ce registrul destinaie, Rd, este incrcat cu o copie a lui Rr.
Operation:
(i)

Rd Rd + Rr + C

Syntax:

Operands:

Program Counter:

(i)

MOV Rd,Rr

0 d 31, 0 r 31

PC PC + 1

16-bit Opcode:
0010

11rd

dddd

rrrr

Status Register (SREG) Boolean Formula:


I
-

T
-

Exemplu:
mov
call

check: cpi

ret

H
-

S
-

V
-

N
-

Z
-

C
-

r16,r0 ; Copy r0 to r16


check ; Call subroutine
r16,$11 ; Compare r16 to $11
; Return from subrutine

MOVW - Copy Register Word


Descriere:
Aceast instruciune copiaz un registru pereche n alt registru pereche. Registrul surs,
Rr+1:Rr, rmne neschimbat n timp ce registrul destinaie, Rd+1:Rd, este incrcat cu o copie a lui
Rr + 1:Rr.

Operation:
(i)

Rd+1:Rd Rr+1:Rr

112

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

(i)

PROIECT DE DIPLOM
2007

Syntax:

Operands:

Program Counter:

MOVW Rd,Rr

d {0,2,...,30}, r {0,2,...,30}

PC PC + 1

16-bit Opcode:
0000

0001

dddd

rrrr

Status Register (SREG) Boolean Formula:


I
-

T
-

Exemplu:
mov
call

check: cpi

cpi

ret

H
-

S
-

V
-

N
-

Z
-

C
-

r16,r0 ; Copy r1:r0 to r17:r16


check ; Call subroutine
r16,$11 ; Compare r16 to $11
r17,$32 ; Compare r17 to $32
; Return from subrutine

LDI - Load Immediate


Descriere:
ncarc direct o constant de 8 bii n registrul 16.. 31.
Operation:
Rd K

(i)

(i)

Syntax:

Operands:

Program Counter:

LDI Rd,K

16 d 31, 0 K 255

PC PC + 1

16-bit Opcode:
1110

kkkk

dddd

kkkk

Status Register (SREG) Boolean Formula:


I
-

T
-

H
-

S
-

V
-

N
-

Exemplu:
clr
ldi

r31
r30

; Clear Z high byte


; Set Z low byte to $F0
113

Z
-

C
-

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

lpm

PROIECT DE DIPLOM
2007

; Load constant from program


; memory pointed to by Z

LD - Load Indirect from data space to Register using Index X


Descriere:
ncarc indirect un octet din zona de date n registru..
Adresa locaiei este data de X (16 biti). Accesul la memorie este limitat de segmentul de date
curent, de 64Koctei. Pentru accesarea altui segment de date cu mai mult de 64Koctei, trebuie
schimbat RAMPX din domeniul registrelor de I/O .
Registrul X rmne neschimbat sau poate fi post-incrementat sau pre-decrementat.
Aceste caracteristici sunt favorabile n special pentru accesarea tablourilor. De reinut c doar byteul inferior al pointerului X este utilizat iar byte-ul superior al pointerului X , nu este utilizat de
aceast instruciune i poate fi utilizat n alte scopuri.Rezultatul operaiilor de mai jos este
nedefinit:
LD r26, X+
LD r27, X+
LD r26, -X
LD r27, -X
Using the X pointer:
Operation:

Comment:

(i)

Rd (X)

X: Unchanged

(ii)

Rd (X)
XX-1

XX+1
Rd (X)

X: Post incremented

Syntax:

Operands:

Program Counter:

(i)

LD Rd, X

0 d 31

PC PC + 1

(ii)

LD Rd, X+

(iii)

LD Rd, -X

0 d 31
0 d 31

PC PC + 1
PC PC + 1

(iii)

X: Pre decremented

16-bit Opcode:
(i)
(ii)
(iii)

1001
1001
1001

000d
000d
000d

dddd
dddd
dddd

1100
1101
1110

Status Register (SREG) Boolean Formula:


I
-

T
-

H
-

S
-

V
-

N
-

Exemplu:
clr

r27

; Clear X high byte

ldi

r26, $60

; Set X low byte to $60

114

Z
-

C
-

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

ld

r0, X+

; Load r0 with data space loc. $60 (X post inc)

ld

r1, X

; Load r1 with data space loc. $61

ldi

r26, $63

; Set X low byte to $63

ld
ld

r2, X
r3, -X

; Load r2 with data space loc. $63


; Load r3 with data space loc. $62 (X pre dec)

LD (LDD) - Load Indirect from data space to Register using Index Y


Descriere:
ncarc indirect un octet din zona de date, n registru.
Adresa locaiei este data de Y (16 biti) . Accesul la memorie este limitat de segmentul de date
curent, de 64Koctei. Pentru accesarea altui segment de date cu mai mult de 64Koctei, trebuie
schimbat RAMPY din domeniul registrelor de I/O .
Registrul Y rmne neschimbat sau poate fi post-incrementat sau pre-decrementat.
Aceste caracteristici sunt favorabile n special pentru accesarea tablourilor. De reinut c doar byteul inferior al pointerului Y este utilizat iar byte-ul superior al pointerului Y , nu este utilizat de
aceast instruciune i poate fi utilizat n alte scopuri. Rezultatul operaiilor de mai jos este
nedefinit:
LD r28, Y+
LD r29, Y+
LD r28, -Y
LD r29, -Y
Using the Y pointer:
Operation:

Comment:

(i)

Rd (Y)

Y: Unchanged

(ii)
(iii)

Rd (Y)
YY-1

YY+1
Rd (Y)

Y: Post incremented
Y: Pre decremented

Syntax:

Operands:

Program Counter:

(i)

LD Rd, Y

0 d 31

PC PC + 1

(ii)
(iii)

LD Rd, Y+
LD Rd, -Y

0 d 31
0 d 31

PC PC + 1
PC PC + 1

(iiii)

LDD Rd, Y+q

0 d 31, 0 q 63

PC PC + 1

16-bit Opcode:
(i)
(ii)
(iii)
(iiii)

1000
1001
1001
10q0

000d
000d
000d
qq0d

dddd
dddd
dddd
dddd

1000
1001
1010
1qqq

Status Register (SREG) Boolean Formula:


115

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi
I
-

T
-

Exemplu:
clr

H
-

S
-

V
-

N
-

PROIECT DE DIPLOM
2007
Z
-

C
-

r29

; Clear Y high byte

ldi

r28, $60

; Set Y low byte to $60

ld

r0, Y+

; Load r0 with data space loc. $60 (Y post inc)

ld

r1, Y

; Load r1 with data space loc. $61

ldi

r28, $63

; Set Y low byte to $63

ld
ld

r2, Y
r3, -Y

; Load r2 with data space loc. $63


; Load r3 with data space loc. $62 (Y pre dec)

ldd

r4, Y+2

; Load r4 with data space loc. $64

LD (LDD) - Load Indirect From data space to Register using Index Z


Descriere:
ncarc indirect un octet din zona de date, n registru.
Adresa locaiei este data de Z (16 biti). Accesul la memorie este limitat de segmentul de date
curent, de 64Koctei. Pentru accesarea altui segment de date cu mai mult de 64Koctei, trebuie
schimbat RAMPZ din domeniul registrelor de I/O .
Registrul Z rmne neschimbat sau poate fi post-incrementat sau pre-decrementat.
Aceste caracteristici sunt favorabile n special pentru accesarea tablourilor. De reinut c doar byteul inferior al pointerului Z este utilizat iar byte-ul superior al pointerului Z , nu este utilizat de
aceast instruciune i poate fi utilizat n alte scopuri. Rezultatul operatiilor de mai jos este
nedefinit:
LD r30, Z+
LD r31, Z+
LD r30, -Z
LD r31, -Z
Using the Y pointer:
Operation:

Comment:

(i)

Rd (Z)

Z: Unchanged

(ii)
(iii)

Rd (Z)
ZZ-1

(iiii)

Rd (Z+q)

ZZ+1
Rd (Z)

Z: Post incremented
Z: Pre decremented
Z: Unchanged, q: Displacement

Syntax:

Operands:

Program Counter:

(i)

LD Rd, Z

0 d 31

PC PC + 1

(ii)
(iii)

LD Rd, Z+
LD Rd, -Z

0 d 31
0 d 31

PC PC + 1
PC PC + 1

116

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi
(iiii)

PROIECT DE DIPLOM
2007

0 d 31, 0 q 63

LDD Rd, Z+q

PC PC + 1

16-bit Opcode:
(i)
(ii)
(iii)
(iiii)

1000
1001
1001
10q0

000d
000d
000d
qq0d

dddd
dddd
dddd
dddd

1000
1001
1010
0qqq

Status Register (SREG) Boolean Formula:


I

Exemplu:
clr

r31

; Clear Z high byte

ldi

r30, $60

; Set Z low byte to $60

ld

r0, Z+

; Load r0 with data space loc. $60 (Z post inc)

ld

r1, Z

; Load r1 with data space loc. $61

ldi

r30, $63

; Set Z low byte to $63

ld
ld

r2, Z
r3, -Z

; Load r2 with data space loc. $63


; Load r3 with data space loc. $62 (Z pre dec)

ldd

r4, Z+2

; Load r4 with data space loc. $64

LDS - Load Direct from data space


Descriere:
ncarc un octet din data space n registru. Pentru prile cu SRAM data space const ntr-un
fiier registru, I/O memorie i SRAM intern ct i extern. Pentru prile fr SRAM, data space
const ntr-un singur fiier. EEPROM are o adres separat.
Adresa este de 16 bii. Accesul la memorie este limitat la segmentul de date curent, de
64Koctei.
Instruciunea LDS folosete registrul RAMPD pentru accesarea memoriei peste 64K octei.
Pentru accesarea altui segment cu un spaiu de date mai mare de 64K octei, registrul RAMPD n
domeniul I/O trebuie schimbat.
Operation:
(i)

Rd (k)

Syntax:

Operands:

Program Counter:
117

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi
(i)

PROIECT DE DIPLOM
2007

0 d 31, 0 k 65535

LDS Rd,k

PC PC + 2

32-bit Opcode:
1001
kkkk

000d
kkkk

dddd
kkkk

0000
kkkk

Status Register (SREG) Boolean Formula:


I
-

T
-

H
-

S
-

V
-

N
-

Z
-

C
-

Exemplu:
lds

r2, $FF00

; Load r2 with the contents of data space location $FF00

add

r2, r1

; add r1 to r2

ST - Store Indirect From Register to data space using Index X


Descriere:
ncarc indirect un octet dintr-un registru n zona de date.
Adresa locaiei este data de X (16 bii) . Accesul la memorie este limitat de segmentul de
date curent, de 64Koctei. Pentru accesarea altui segment de date cu mai mult de 64Koctei, trebuie
schimbat RAMPX din domeniul registrelor de I/O.Registrul X rmne neschimbat sau poate fi postincrementat sau pre-decrementat.
Aceste caracteristici sunt favorabile n special pentru accesarea tablourilor. De reinut c doar
byte-ul inferior al pointerului X este utilizat iar byte-ul superior al pointerului X , nu este utilizat de
aceast instruciune i poate fi utilizat in alte scopuri. Rezultatul operatiilor de mai jos este
nedefinit:
ST X+, r26
ST X+, r27
ST -X, r26
ST -X, r27
Using the X pointer:
(i)
(ii)
(iii)

(i)
(ii)
(iii)

Operation:

Comment:

(X) Rr
(X) Rr
XX-1

X X+1
(X) Rr

X: Unchanged
X: Post incremented
X: Pre decremented

Syntax:

Operands:

Program Counter:

ST X, Rr
ST X+, Rr
ST -X, Rr

0 r 31
0 r 31
0 r 31

PC PC + 1
PC PC + 1
PC PC + 1

16-bit Opcode:
118

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

(i)
(ii)
(iii)

1001
1001
1001

001r
001r
001r

rrrr
rrrr
rrrr

PROIECT DE DIPLOM
2007

1100
1101
1110

Status Register (SREG) Boolean Formula:


I
-

T
-

H
-

S
-

V
-

N
-

Z
-

C
-

Exemplu:
clr

r27

; Clear X high byte

ldi

r26,$60

; Set X low byte to $60

st

X+,r0

; Store r0 in data space loc. $60(X post inc)

st

X,r1

; Store r1 in data space loc. $61

ldi

r26,$63

; Set X low byte to $63

st

X,r2

; Store r2 in data space loc. $63

st

-X,r3

; Store r3 in data space loc. $62(X pre dec )

ST (STD) - Store Indirect From Register to data space using Index Y


Descriere:
ncarc indirect un octet din zona de date, n registru.
Adresa locaiei este data de Y (16 bii) . Accesul la memorie este limitat de segmentul de
date curent, de 64Koctei. Pentru accesarea altui segment de date cu mai mult de 64Koctei, trebuie
schimbat RAMPY din domeniul registrelor de I/O .Registrul Y rmne neschimbat sau poate fi
post-incrementat sau pre-decrementat.
Aceste caracteristici sunt favorabile n special pentru accesarea tablourilor. De reinut c doar
byte-ul inferior al pointerului Y este utilizat iar byte-ul superior al pointerului Y , nu este utilizat de
aceast instruciune i poate fi utilizat in alte scopuri. Rezultatul operatiilor de mai jos este
nedefinit:
ST Y+, r28
ST Y+, r29
ST -Y, r28
ST -Y, r29
Using the Y pointer:
Operation:

(i)
(ii)
(iii)
(iiii)

(i)

Comment:

(Y) Rr
(Y) Rr
YY-1
(Y+q) Rr

Y Y+1
(Y) Rr

Y: Unchanged
Y: Post incremented
Y: Pre decremented
Y: Unchanged, q: Displacement

Syntax:

Operands:

Program Counter:

ST Y, Rr

0 r 31

PC PC + 1

119

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi
(ii)
(iii)
(iiii)

PROIECT DE DIPLOM
2007

0 r 31
0 r 31
0 r 31, 0 q 63

ST Y+, Rr
ST -Y, Rr
STD Y+q, Rr

PC PC + 1
PC PC + 1
PC PC + 1

16-bit Opcode:
(i)
(ii)
(iii)
(iiii)

1000
1001
1001
10q0

001r
001r
001r
qq1r

rrrr
rrrr
rrrr
rrrr

1000
1001
1010
1qqq

Status Register (SREG) Boolean Formula:


I
-

T
-

H
-

S
-

V
-

N
-

Z
-

C
-

Exemplu:
clr

r29

; Clear Y high byte

ldi

r28,$60

; Set Y low byte to $60

st

Y+,r0

; Store r0 in data space loc. $60(Y post inc)

st

Y,r1 ; Store r1 in data space loc. $61

ldi

r28,$63

st

Y,r2 ; Store r2 in data space loc. $63

st

-Y,r3

; Store r3 in data space loc. $62(Y pre dec)

std

Y+2,r4

; Store r4 in data space loc. $64

; Set Y low byte to $63

ST (STD) - Store Indirect From Register to data space using Index Z


Descriere:
ncarc indirect un octet din zona de date, n registru.
Adresa locaiei este data de Z (16 bii) . Accesul la memorie este limitat de segmentul de
date curent, de 64Koctei. Pentru accesarea altui segment de date cu mai mult de 64Koctei, trebuie
schimbat RAMPZ din domeniul registrelor de I/O .
Registrul Z rmne neschimbat sau poate fi post-incrementat sau pre-decrementat.
Aceste caracteristici sunt favorabile in special pentru accesarea tablourilor. De reinut c doar byteul inferior al pointerului Z este utilizat iar byte-ul superior al pointerului Z , nu este utilizat de
aceast instruciune i poate fi utilizat n alte scopuri. Rezultatul operatiilor de mai jos este
nedefinit:
ST Z+, r30
ST Z+, r31
ST -Z, r30
ST -Z, r31
Using the Z pointer:
120

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Operation:

(i)
(ii)
(iii)
(iiii)

(i)
(ii)
(iii)
(iiii)

Comment:

(Z) Rr
(Z) Rr
ZZ-1
(Z+q) Rr

Z Z+1
(Z) Rr

Z: Unchanged
Z: Post incremented
Z: Pre decremented
Z: Unchanged, q: Displacement

Syntax:

Operands:

Program Counter:

ST Z, Rr
ST Z+, Rr
ST -Z, Rr
STD Z+q, Rr

0 r 31
0 r 31
0 r 31
0 r 31, 0 q 63

PC PC + 1
PC PC + 1
PC PC + 1
PC PC + 1

16-bit Opcode:
(i)
(ii)
(iii)
(iiii)

1000
1001
1001
10q0

001r
001r
001r
qq1r

rrrr
rrrr
rrrr
rrrr

0000
0001
0010
0qqq

Status Register (SREG) Boolean Formula:


I

Exemplu:
clr

r31

; Clear Z high byte

ldi

r30,$60

; Set Z low byte to $60

st

Z+,r0

; Store r0 in data space loc. $60(Z post inc)

st

Z,r1

; Store r1 in data space loc. $61

ldi

r30,$63

; Set Z low byte to $63

st
st

Z,r2
-Z,r3

; Store r2 in data space loc. $63


; Store r3 in data space loc. $62(Z pre dec)

std

Z+2,r4

; Store r4 in data space loc. $64

STS - Store Direct to data space


Descriere:
ncarc direct un registru n zona de date. Adresa (k) este de 16 bii. Accesul la memorie este
limitat la segmentul de date curent, de 64Koctei.
Instruciunea STS folosete registrul RAMPD pentru accesarea memoriei peste 64K octei.
Pentru accesarea altui segment cu un spaiu de date mai mare de 64K octei, registrul RAMPD n
domeniul I/O trebuie schimbat.
Operation:
(i)

(k) Rr

121

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

(i)

PROIECT DE DIPLOM
2007

Syntax:

Operands:

Program Counter:

STS k,Rr

0 r 31, 0 k 65535

PC PC + 2

32-bit Opcode:
1001
kkkk

001d
kkkk

dddd
kkkk

0000
kkkk

Status Register (SREG) Boolean Formula:


I
-

T
-

H
-

S
-

V
-

N
-

Z
-

C
-

Exemplu:
lds
add
sts

r2,$FF00 ; Load r2 with the contents of data space location


r2,r1
; add r1 to r2
$FF00,r2 ; Write back

LPM - Load Program Memory


Descriere:
ncarc un octet adresat cu registrul pointer Z n registrul destinaie Rd. Aceast instruciune
este caracterizat 100% de spaiu efectiv iniializat constant sau determin constant locaia
instruciunii urmtoare. Memoria program este organizat n cuvinte de 16 bii i cel mai puin
semnificativ bit al pointerului Z selecteaz octetul inferior (0) sau octetul superior (1). Aceast
instruciune poate adresa 64 K octei (32K cuvinte) din memoria program. Registrul pointerului Z
poate rmne neschimbat de operaie sau poate fi incrementat. Incrementarea nu se aplic
registrului de memorie RAMPZ. Rezultatul acestei combinatii este nedefinit:
LPM r30, Z+
LPM r31, Z+

Operation:

Comment:

(i)
(ii)
(iii)

R0 (Z)
Rd (Z)
Rd (Z)

ZZ+1

Z: Unchanged, R0 implied destination register


Z: Unchanged
Z: Post incremented

(i)
(ii)
(iii)

LPM
LPM Rd, Z
LPM Rd, Z+

Syntax:

Operands:

Program Counter:
PC PC + 1
PC PC + 1
PC PC + 1

None, R0 implied
0 d 31
0 d 31

16-bit Opcode:

(i)
(ii)
(iii)

1001
1001
1001

0101
000d
000d

1100
dddd
dddd

1000
0100
0101

122

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Status Register (SREG) Boolean Formula:


I
-

T
-

H
-

S
-

V
-

N
-

Z
-

C
-

Exemplu:
clr

r31

; Clear Z high byte

ldi

r30, $F0

; Set Z low byte

lpm

; Load constant from program


; memory pointed to by Z (r31: r30)

SPM - Store Program Memory


Descriere:
SPM poate fi folosit pentru tergerea unei pagini din memoria program, pentru scrierea unei
pagini n memoria program. n unele cazuri, memoria program poate fi scris cuvnt cu cuvnt, n
alte cazuri ntreaga pagin poate fi programat simultan dup ncrcarea ei n memoria tampon. n
toate cazurile, memoria program trebuie tears (toat pagina odat). Cnd se terge memoria
program, registrul Z este folosit ca adres de pagin. Cnd se scrie memoria program, registrul Z
este folosit ca adres de pagin sau cuvnt, i perechea de registre R1:R0 este folosit ca dat.
Aceast instruciune poate adresa primii 64K octei (32K cuvinte) din memoria program.
(i)
(ii)
(iii)
(iv)
(v)

(i)-(v)

Operation:

Comment:

(Z) $ffff
(Z) R1:R0
(Z) R1:R0
(Z) TEMP
BLBITS R1:R0

Erase program memory page


Write program memory word
Write temporary page buffer
Write temporary page buffer to program memory
Set boot loader lock bits

Syntax:

Operands:

Program Counter:

SPM

None

PC PC + 1

16-bit Opcode:
1001

0101

1110

1000

Status Register (SREG) Boolean Formula:


I
-

T
-

H
-

S
-

V
-

N
-

123

Z
-

C
-

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Exemplu:
; This
ldi
clr
ldi
mov
ldi
mov
ldi
out
spm
ldi
out
spm

example shows SPM write of one word for devices with word write
r31, $F0
; Load Z high byte
r30
; Clear Z low byte
r16, $CF
; Load data to store
r1, r16
r16, $FF
r0, r16
r16,$03
; Enable SPM, erase page
SPMCR, r16 ;
; Erase page starting at $F000
r16,$01
; Enable SPM, store to program memory
SPMCR, r16 ;
; Execute SPM, store R1:R0 to program memory location $F000

IN - Load an I/O Location to Register


Descriere:
ncarc date din zona I/O (porturi, timere, etc.) n registrul Rd.
Operation:
Rd I/O(A)

(i)

(i)

Syntax:

Operands:

Program Counter:

IN Rd,A

0 d 31, 0 A 63

PC PC + 1

16-bit Opcode:
1011

0AAd

dddd

AAAA

Status Register (SREG) Boolean Formula:


I

Exemplu:
in r25, $16
cpi r25, 4
breq exit

exit: nop

; Read Port B
; Compare read value to constant
; Branch if r25=4
; Branch destination (do nothing)

OUT - Store Register to I/O Location


124

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Descriere:
nmagazineaz data din registrul Rr n registrul I/O (porturi, timere, etc).
Operation:
I/O(A) Rr

(i)

(i)

Syntax:

Operands:

Program Counter:

OUT A,Rr

0 r 31, 0 A 63

PC PC + 1

16-bit Opcode:
1AAr

1011

AAAA

rrrr

Status Register (SREG) Boolean Formula:


I
-

T
-

H
-

S
-

V
-

N
-

Z
-

C
-

Exemplu:
clr

r16

; Clear r16

ser

r17

; Set r17

out

$18, r16

; Write zeros to Port B

nop
out

$18, r17

; Wait (do nothing)


; Write ones to Port B

PUSH - Push Register on Stack


Descriere:
Aceast instruciune salveaz coninutul registrului Rr n stiv. Pointerul stiv este
post-decrementat cu 1 dup PUSH.
Operation:
STACK Rr

(i)

(i)

Syntax:

Operands:

Program Counter:

Stack:

PUSH Rr

0 r 31

PC PC + 1

SP SP - 1

16-bit Opcode:
1001

001d

dddd

1111

Status Register (SREG) Boolean Formula:


I
-

T
-

H
-

S
-

V
-

N
-

125

Z
-

C
-

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Exemplu:
call

push
push

pop
pop
ret

routine

routine

; Call subroutine

r14
r13

; Save r14 on stack


; Save r13 on stack

r13
r14

; Restore r13
; Restore r14
; Return from subroutine

POP - Pop Register from Stack


Descriere:
Aceast instruciune ncarc registrul Rd cu un octet din stiv. Pointerul stiv este preincrementat cu 1 nainte de POP.
Operation:
(i)

Rd STACK

Syntax:

Operands:

Program Counter:

Stack:

(i)

POP Rd

0 d 31

PC PC + 1

SP SP + 1

16-bit Opcode:
1001

000d

dddd

1111

Status Register (SREG) Boolean Formula:


I
-

Exemplu:
routine

T
-

H
-

call

push
push

pop
pop
ret

S
-

routine

V
-

N
-

Z
-

C
-

; Call subroutine

r14
r13

; Save r14 on stack


; Save r13 on stack

r13
r14

; Restore r13
; Restore r14
; Return from subroutine

SBI - Set Bit in I/O Register


Descriere:
Seteaz bitul menionat dintr-un registru de I/O. Aceast instruciune are efect in zona 0-31
din I/O.
126

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Operation:
(i)

I/O(A,b) 1

Syntax:

Operands:

Program Counter:

(i)

SBI A,b

0 A 31, 0 b 7

PC PC + 1

16-bit Opcode:
1001

1010

AAAA

Abbb

Status Register (SREG) Boolean Formula:


I
-

T
-

H
-

S
-

V
-

N
-

out

$1E, r0

; Write EEPROM address

sbi

$1C

; Set read bit EECR

in

r1, $1D

; Read EEPROM data

Z
-

C
-

Exemplu:

CBI - Clear Bit in I/O Register


Descriere:
terge bitul menionat dintr-un registru I/O. Aceast instruciune are efect n zona 0-31 din
I/O.
Operation:
(i)

(i)

I/O(A,b) 0

Syntax:

Operands:

Program Counter:

CBI A,b

0 A 31, 0 b 7

PC PC + 1

16-bit Opcode:
1001

1000

AAAA

Abbb

Exemplu:
Cbi $12, 7 ; Clear bit 7 in Port D

LSL - Logical Shift Left

127

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Descriere:
Mut toi bii din Rd cu un spatiu la stnga. Bitul 0 =0. Bitul 7 este ncrcat n indicatorul C
al SREG. Aceast operaie multiplic valoarea de dou ori.
Operation:

(i)

b7 - - - - - - - - - - - - - - - - - - b0

Syntax:

Operands:

Program Counter:

LSR Rd

0 d 31

PC PC + 1

16-bit Opcode: (see ADD Rd,Rd)


0000

11dd

dddd

dddd

Status Register (SREG) Boolean Formula:


I
-

T
-

Exemplu:
add

r0, r4

; Add r4 to r0

Lsl

R0

; Multiply r0 by 2

LSR - Logical Shift Right


Descriere:
Mut toi bii din Rd cu un spaiu la dreapta. Bitul 7 =0. Bitul 0 este ncrcat n indicatorul C
al SREG. Aceast operaie mparte valoarea la 2. Indicatorul C poate fi folosit pentru rotunjirea
rezultatului.
Operation:

(i)

b7 - - - - - - - - - - - - - - - - - - b0

Syntax:

Operands:

Program Counter:

LSR Rd

0 d 31

PC PC + 1

16-bit Opcode:
1001

010d

dddd

0110

Status Register (SREG) Boolean Formula:


I
-

T
-

H
-

N
0

128

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Exemplu:
add

r0, r4

; Add r4 to r0

Lsl

R0

; Divide r0 by 2

ASR - Arithmetic Shift Right


Descriere:
Deplaseaz toi biii din Rd cu un spaiu la dreapta. Bitul 7 este meninut constant. Bitul
0 este ncrcat n indicatorul C al SREG. Aceast operaie mparte valoarea cu semn la 2 fr
a schimba semnul. Indicatorul de transport este folosit pentru a rotunji rezultatul.
Operation:
b7-------------------b0

(i)

Syntax:

Operands:

Program Counter:

ASR Rd

0 d 31

PC PC + 1

16-bit Opcode:
1001

010d

dddd

0101

Status Register (SREG) Boolean Formula:


I

Exemplu:
ldi

r16, $10

; Load decimal 16 into r16

asr

r16

; r16=r16/2

ldi
asr

R17, $FC
r17

; Load -4 in r17
; r17=r17/2

SWAP - Swap Nibbles


Descriere:
Schimb grupul de 4 biti (superior) cu cel inferior i reciproc.
Operation:
(i)

R(7:4) Rd(3:0), R(3:0) Rd(7:4)

Syntax:

Operands:

Program Counter:

(i)

SWAP Rd

0 d 31

PC PC + 1

129

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

16-bit Opcode:
1001

010d

dddd

0010

Status Register (SREG) Boolean Formula:


I

Exemplu:
inc
swap
inc
swap

r1
r1
r1
r1

; Increment r1
; Swap high and low nibble of
; Increment high nibble of r1
; Swap back

BSET - Bit Set in SREG


Descriere:
Seteaz un indicator din SREG.
Operation:
(i)

SREG(s) 1

Syntax:

Operands:

Program Counter:

(i)

BSET s

0s7

PC PC + 1

16-bit Opcode:
1001

0100

0ssss

1000

Status Register (SREG) Boolean Formula:


I

Exemplu:
bset
bset

6
7

; Set T flag
; Enable interrupt

BCLR - Bit Clear in SREG


Descriere:
terge un indicator din SREG.
130

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

Operation:
SREG(s) 0

(i)

(i)

Syntax:

Operands:

Program Counter:

BCLR s

0s7

PC PC + 1

16-bit Opcode:
1001

0100

1ssss

1000

Status Register (SREG) Boolean Formula:


I

Exemplu:
bclr
bclr

0
7

; Clear carry flag


; Disable interrupts

BST - Bit Store from Bit in Register to T Flag in SREG


Descriere:
Stocheaz bitul b din Rd n indicatorul T din SREG.
Operation:
(i)

T Rd(b)

Syntax:

Operands:

Program Counter:

(i)

BST Rd,b

0 d 31, 0 b 7

PC PC + 1

16-bit Opcode:
1111

101d

dddd

0bbb

Status Register (SREG) Boolean Formula:


I

Exemplu:
bst r1, 2
bld r0, 4

; Copy bit
; Store bit 2 of r1 in T flag
; Load T into bit 4 of r0

131

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

BLD - Bit Load from the T Flag in SREG to a Bit in Register.


Descriere:
Copiaz indicatorul T din SREG (reg. de stare) n bitul b din registrul Rd.
Operation:
Rd(b) T

(i)

(i)

Syntax:

Operands:

Program Counter:

BLD Rd,b

0 d 31, 0 b 7

PC PC + 1

16 bit Opcode:
1111

100d

dddd

0bbb

Status Register (SREG) Boolean Formula:


I

Exemplu:
; Copy bit
; Store bit 2 of r1 in T flag
; Load T flag into bit 4 of r0

bst r1, 2
bld r0, 4

SEC - Set Carry Flag


Descriere:
Seteaza indicatorul Carry (C) n SREG.

Operation:
C1

(i)

(i)

Syntax:

Operands:

Program Counter:

SEC

None

PC PC + 1

16-bit Opcode:
1001

0100

0000

1000

Status Register (SREG) Boolean Formula:


I

132

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi
-

PROIECT DE DIPLOM
2007
-

Exemplu:
sec
adc

r0,r1

; Set carry flag


; r0=r0+r1+1

CLC - Clear Carry Flag


Descriere:
terge indicatorul Carry (C) din SREG.
Operation:
C0

(i)

(i)

Syntax:

Operands:

Program Counter:

CLC

None

PC PC + 1

16-bit Opcode:
1001

0100

1000

1000

Status Register (SREG) Boolean Formula:


I

Exemplu:
add
clc

r0,r0

; Add r0 to itself
; Clear carry flag

SEN - Set Negative Flag


Descriere:
Seteaz indicatorul Negative (N) n SREG.
Operation:
(i)

(i)

N1

Syntax:

Operands:

Program Counter:

SEN

None

PC PC + 1

16-bit Opcode:
1001

0100

0010

1000

Status Register (SREG) Boolean Formula:


133

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi
I
-

T
-

H
-

S
-

V
-

N
1

PROIECT DE DIPLOM
2007
Z
-

C
-

Exemplu:
add

r2,r19

; Add r19 to r2

sen

; Set negative flag

CLN - Clear Negative Flag


Descriere:
terge indicatorul Negative (N) din SREG.
Operation:
(i)

N0

Syntax:

Operands:

Program Counter:

(i)

CLN

None

PC PC + 1

16-bit Opcode:
1001

0100

1010

1000

Status Register (SREG) Boolean Formula:


I
-

T
-

H
-

add
cln

r2,r3

S
-

V
-

N
0

Z
-

C
-

Exemplu:
; Add r3 to r2
; Clear negative flag

SEZ - Set Zero Flag


Descriere:
Seteaz indicatorul Zero (Z) n SREG.
Operation:
(i)

Z1

Syntax:

Operands:

Program Counter:

(i)

SEZ

None

PC PC + 1

134

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

16-bit Opcode:
1001

0100

0001

1000

Status Register (SREG) and Boolean Formula:


I

Exemplu:
add
sez

r2,r19

; Add r19 to r2
; Set zero flag

CLZ - Clear Zero Flag


Descriere:
terge indicatorul Zero (Z) din SREG.
Operation:
Z0

(i)

(i)

Syntax:

Operands:

Program Counter:

CLZ

None

PC PC + 1

16-bit Opcode:
1001

0100

1001

1000

Status Register (SREG) and Boolean Formula:


I

add
clz

r2,r3

Exemplu:
; Add r3 to r2
; Clear zero

SEI - Set Global Interrupt Flag


Descriere:
Seteaz indicatorul Global Interrupt (I) n SREG.
Operation:
135

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

I1

(i)

(i)

Syntax:

Operands:

Program Counter:

SEI

None

PC PC + 1

16-bit Opcode:
1001

0100

0111

1000

Status Register (SREG) Boolean Formula:


I

Exemplu:
cli
in
sei

; Disable interrupts
; Read Port B
; Enable interrupts

r13,$16

CLI - Clear Global Interrupt Flag


Descriere:
terge indicatorul Global Interrupt (I) din SREG.
Operation:
I0

(i)

(i)

Syntax:

Operands:

Program Counter:

CLI

None

PC PC + 1

16-bit Opcode:
1001

0100

1111

1000

Status Register (SREG) Boolean Formula:


I

Exemplu:
cli
in
sei

r11,$16

; Disable interrupts
; Read port B
; Enable interrupts

136

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

SES - Set Signed Flag


Descriere:
Seteaz indicatorul Signed (S) n SREG.
Operation:
(i)

S1

Syntax:

Operands:

Program Counter:

(i)

SES

None

PC PC + 1

16-bit Opcode:
1001

0100

0100

1000

Status Register (SREG) Boolean Formula:


I
-

T
-

H
-

S
1

V
-

N
-

Z
-

C
-

Exemplu:
add
ses

r2,r19

; Add r19 to r2
; Set negative flag

CLS - Clear Signed Flag


Descriere:
terge indicatorul de semn (S) din SREG.
Operation:
S0

(i)

(i)

Syntax:

Operands:

Program Counter:

CLS

None

PC PC + 1

16-bit Opcode:
1001

0100

1100

1000

Status Register (SREG) and Boolean Formula:


I
-

T
-

H
-

S
0

V
-

N
-

Exemplu:
add
cls

r2,r3

; Add r3 to r2
; Clear signed flag

137

Z
-

C
-

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

SEV - Set Overflow Flag


Descriere:
Seteaz indicatorul Overflow (V) n SREG.
Operation:
V1

(i)

(i)

Syntax:

Operands:

Program Counter:

SEV

None

PC PC + 1

16-bit Opcode:
1001

0100

0011

1000

Status Register (SREG) Boolean Formula:


I
-

T
-

H
-

S
-

V
1

N
-

Z
-

C
-

Exemplu:
add

r2,r19

; Add r19 to r2

sev

; Set overflow flag

CLV - Clear Overflow Flag


Descriere:
terge indicatorul Overflow (V) din SREG.
Operation:
V0

(i)

(i)

Syntax:

Operands:

Program Counter:

CLV

None

PC PC + 1

16-bit Opcode:
1001

0100

1011

1000

Status Register (SREG) and Boolean Formula:


I
-

T
-

H
-

S
-

V
0

N
-

Exemplu:
clv

r2,r3

; Add r3 to r2
; Clear overflow flag

138

Z
-

C
-

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

SET - Set T Flag


Descriere:
Seteaz indicatorul T n SREG.
Operation:
(i)

T1

Syntax:

Operands:

Program Counter:

(i)

SET

None

PC PC + 1

16-bit Opcode:
1001

0100

0110

1000

Status Register (SREG) Boolean Formula:


I

Exemplu:
set

; Set T flag

CLT - Clear T Flag


Descriere:
terge indicatorul T din SREG.
Operation:
(i)

T0

Syntax:

Operands:

Program Counter:

(i)

CLT

None

PC PC + 1

16-bit Opcode:
1001

0100

1110

1000

Status Register (SREG) Boolean Formula:


I

Exemplu:
139

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

clt

PROIECT DE DIPLOM
2007

; Clear T flag

SEH - Set Half Carry Flag


Descriere:
Seteaz indicatorul Half Carry (H) n SREG.
Operation:
H1

(i)
(i)

Syntax:

Operands:

Program Counter:

SEH

None

PC PC + 1

16-bit Opcode:
1001

0100

0101

1000

Status Register (SREG) and Boolean Formula:


I
-

T
-

Exemplu:
seh

H
1

S
-

V
-

N
-

Z
-

C
-

; Set Half Carry flag

CLH - Clear Half Carry Flag


Descriere:
terge indicatorul Half Carry (H) din SREG.
Operation:
H0

(i)

(i)

Syntax:

Operands:

Program Counter:

CLH

None

PC PC + 1

16-bit Opcode:
1001

0100

1101

1000

Status Register (SREG) Boolean Formula:


I
-

Exemplu:
clh

T
-

H
0

S
-

V
-

N
-

; Clear the Half Carry flag


140

Z
-

C
-

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM
2007

NOP - No Operation
Descriere:
Aceast instruciune consum o perioad de ceas.
Operation:
(i)

No

(i)

Syntax:

Operands:

Program Counter:

NOP

None

PC PC + 1

16-bit Opcode:
0000

0000

0000

0000

Status Register (SREG) Boolean Formula:


I

Exemplu:
clr
ser
out
nop
out

r16
r17
$18,r16
$18,r17

;
;
;
;
;

Clear r16
Set r17
Write zeros to Port B
Wait (do nothing)
Write ones to Port B

SLEEP
Descriere:
Aceast instruciune instaleaz modul repaus definit de registrul control al MCU.
Operation:
Syntax:

Operands:

Program Counter:

SLEEP

None

PC PC + 1

16-bit Opcode:
1001

0101

1000

1000

Status Register (SREG) Boolean Formula:


I
-

T
-

H
-

S
-

V
-

N
-

Exemplu:
141

Z
-

C
-

Universitatea POLITEHICA din Bucuresti


Facultatea TRANSPORTURI
Catedra Telecomenzi i Electronic n Transporturi
ldi
out
sleep

PROIECT DE DIPLOM
2007

r0,r11
; Copy r11 to r0
r16,(1<<SE) ; Enable sleep mode
MCUCR, r16
; Put MCU in sleep mode

WDR - Watchdog Reset


Descriere:
Aceast instruciune reseteaz timer-ul Watchdog, ea trebuie executat ntr-un timp
limitat dat de WD. A se consulta specificaiile hardware-ului timer-ului Watchdog.
Operation:
(i)

WD timer restart.

(i)

Syntax:

Operands:

Program Counter:

WDR

None

PC PC + 1

16-bit Opcode:
1001

0101

1010

1000

Status Register (SREG) Boolean Formula:


I
-

T
-

H
-

S
-

V
-

N
-

Exemplu:
wdr

; Reset watchdog timer

142

Z
-

C
-

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