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
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.
PROIECT DE DIPLOM
2007
Structura interna :
PROIECT DE DIPLOM
2007
Descrierea pinilor:
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
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
PROIECT DE DIPLOM
2007
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.
12
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
PROIECT DE DIPLOM
2007
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
PROIECT DE DIPLOM
2007
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
PROIECT DE DIPLOM
2007
18
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
PROIECT DE DIPLOM
2007
20
PROIECT DE DIPLOM
2007
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 VCC=VBOT n timpul
procesului de producie. Acesta garanteaz faptul c Brown-out Reset se va produce nainte ca V CC
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
PROIECT DE DIPLOM
2007
22
PROIECT DE DIPLOM
2007
23
PROIECT DE DIPLOM
2007
24
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.
PROIECT DE DIPLOM
2007
26
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
PROIECT DE DIPLOM
2007
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
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
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
PROIECT DE DIPLOM
2007
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.
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:
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 :
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
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
PROIECT DE DIPLOM
2007
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
oprit
DIEOE
DIEOV
DI
AIO
PROIECT DE DIPLOM
2007
39
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.
40
PROIECT DE DIPLOM
2007
Tabelul 11
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
PROIECT DE DIPLOM
2007
Tabelul 13
Tabelul 14
43
PROIECT DE DIPLOM
2007
Tabelul 15
44
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
PROIECT DE DIPLOM
2007
46
Tabelul 19
47
PROIECT DE DIPLOM
2007
PROIECT DE DIPLOM
2007
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.
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
50
PROIECT DE DIPLOM
2007
PROIECT DE DIPLOM
2007
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
PROIECT DE DIPLOM
2007
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
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
PROIECT DE DIPLOM
2007
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
PROIECT DE DIPLOM
2007
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.
PROIECT DE DIPLOM
2007
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.
59
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
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
PROIECT DE DIPLOM
2007
62
PROIECT DE DIPLOM
2007
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
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.
PROIECT DE DIPLOM
2007
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
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.
PROIECT DE DIPLOM
2007
68
PROIECT DE DIPLOM
2007
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
70
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
PROIECT DE DIPLOM
2007
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
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
PROIECT DE DIPLOM
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
2007
75
PROIECT DE DIPLOM
2007
PROIECT DE DIPLOM
2007
(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
Exemplu:
add r1,r2
add r28,r28
; Add r2 to r1 (r1=r1+r2)
; Add r28 to itself (r28=r28+r28)
(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
76
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
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
PROIECT DE DIPLOM
2007
Exemplu:
sub
brne
noteq: nop
r13,r12
noteq
(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
T
-
Exemplu:
subi
brne
noteq: nop
r22,$11
noteq
(i)
Rd Rd - Rr - C
Syntax:
Operands:
Program Counter:
SBC Rd,Rr
0 d 31, 0 r 31
PC PC + 1
78
PROIECT DE DIPLOM
2007
16-bit Opcode:
0000
10rd
dddd
rrrr
T
-
Exemplu:
sub
sbc
r2,r0
r3,r1
(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
T
-
Exemplu:
subi r16,$23
sbci r17, $4F
;
;
;
(i)
Rd+1:Rd Rd+1:Rd - K
Syntax:
Operands:
Program Counter:
SBIW Rd,K
d {24,26,28,30}, 0 K 63
PC PC + 1
79
PROIECT DE DIPLOM
2007
16-bit Opcode:
1001
0111
KKdd
KKKK
T
-
Exemplu:
sbiw
sbiw
H
-
r24 ,1
; Substract 1 from r25:r24
r28 , 63 ; Substract 63 from Y pointer (r29:r28)
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
Exemplu:
An r2,r3
dLdi r16,1
An r2,r16
d
Rd Rd K
80
Syntax:
(i)
PROIECT DE DIPLOM
2007
Operands:
Program Counter:
16 d 31, 0 K 255
ANDI Rd,K
PC PC + 1
16-bit Opcode:
0111
KKKK
dddd
KKKK
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:
Rd Rd v Rr
(i)
(i)
Syntax:
Operands:
Program Counter:
OR Rd,Rr
0 d 31, 0 r 31
PC PC + 1
16-bit Opcode:
0010
10rd
dddd
rrrr
Exemplu:
or
bst
brts
ok:
nop
T
-
H
-
V
0
C
-
PROIECT DE DIPLOM
2007
(i)
Syntax:
(i)
Operands:
16 d 31, 0 k 255
ORI Rd,K
Program Counter:
PC PC +1
16-bit Opcode:
0110
KKKK
dddd
KKKK
T
-
Exemplu:
ori r16 ,$F0
ori r17, 1
H
-
;
;
V
0
C
-
EOR Exclusive OR
Descriere:
Face SAU Exclusiv ntre coninutul registrelor Rd i Rr i pune rezultatul n registrul final Rd.
Operation:
(i)
Rd Rd Rr
Syntax:
Operands:
Program Counter:
(i)
EOR Rd,Rr
0 d 31, 0 r 31
PC PC + 1
16-bit Opcode:
0010
01rd
dddd
rrrr
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
PROIECT DE DIPLOM
2007
Operation:
Rd $FF - Rd
(i)
(i)
Syntax:
Operands:
Program Counter:
COM Rd
0 d 31
PC PC + 1
16-bit Opcode:
1001
010d
dddd
0000
T
-
H
-
Exemplu:
com
breq
zero: nop
r4
zero
V
0
C
1
Rd $00 - Rd
Syntax:
Operands:
Program Counter:
(i)
NEG Rd
0 d 31
PC PC + 1
16-bit Opcode:
1001
010d
dddd
0001
T
-
Exemplu:
sub
brpl
neg
positive: nop
r11,r0
positive
r11
83
PROIECT DE DIPLOM
2007
(i)
(i)
Syntax:
Operands:
Program Counter:
SBR Rd,K
16 d 31, 0 K 255
PC PC + 1
16-bit Opcode:
0110
KKKK
dddd
KKKK
T
-
Exemplu:
sbr
sbr
H
-
V
0
C
-
r16, 3
; Set bits 0 and 1 in r16
r17, $F0 ; Set 4 MSB in r17
(i)
Operands:
16 d 31, 0 K 255
Program Counter:
PC PC+1
Exemplu:
cbr
cbr
T
-
H
-
V
0
INC - Increment
84
PROIECT DE DIPLOM
2007
Descriere:
Adaug 1 la coninutul registrului Rd i pune rezultatul n registrul destinaie Rd.
Operation:
Rd Rd + 1
(i)
(i)
Syntax:
Operands:
Program Counter:
INC Rd
0 d 31
PC PC + 1
16-bit Opcode:
1001
010d
dddd
0011
T
-
Exemplu:
clr
loop inc
cpi
brne
nop
H
-
r22
r22
; clear r22
; increment r22
r22,$4F
loop
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:
Rd Rd 1
(i)
(i)
Syntax:
Operands:
Program Counter:
DEC Rd
0 d 31
PC PC + 1
16-bit Opcode:
1001
010d
dddd
Exemplu:
ldi
T
-
H
-
r17,$10
1010
C
-
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)
Syntax:
(i)
Operands:
TST Rd
Program Counter:
PC PC + 1
0 d 31
16-bit Opcode:
0010
00dd
dddd
dddd
T
-
H
-
Exemplu:
tst
r0
breq zero
zero: nop
V
0
C
-
; Test r0
; Branch if r0=0
; Branch destination (do nothing)
Rd Rd Rd
Syntax:
CLR Rd
Operands:
0 d 31
Program Counter:
PC PC+1
16-bit Opcode:
0010
01dd
dddd
dddd
T
-
H
-
S
0
V
0
N
0
PROIECT DE DIPLOM
2007
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:
Rd $FF
(i)
(i)
Syntax:
Operands:
Program Counter:
SER Rd
16 d 31
PC PC + 1
16-bit Opcode:
1110
1111
dddd
1111
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
Rr
R1
87
R0
Multiplicand
Multiplier
PROIECT DE DIPLOM
2007
Product High
Product Low
16
Operation:
(i)
(i)
R1:R0 Rd Rr
Syntax:
Operands:
Program Counter:
MUL Rd,Rr
0 d 31, 0 r 31
PC PC + 1
16-bit Opcode:
1001
11rd
dddd
rrrr
T
-
H
-
Exemplu:
mul
movw
S
-
V
-
N
-
Rr
Multiplicand
Multiplier
R1
R0
Product High
Product Low
16
Operation:
(i)
R1:R0 Rd Rr
Syntax:
Operands:
Program Counter:
(i)
MULS Rd,Rr
16 d 31, 16 r 31
PC PC + 1
16-bit Opcode:
0000
0010
dddd
rrrr
T
-
H
-
S
-
V
-
N
-
Exemplu:
88
muls r21,r20
movw r20,r0
PROIECT DE DIPLOM
2007
Rr
Multiplicand
Multiplier
R1
R0
Product High
Product Low
16
Operation:
(i)
(i)
R1:R0 Rd Rr
Syntax:
Operands:
Program Counter:
MULSU Rd,Rr
16 d 23, 16 r 23
PC PC + 1
16-bit Opcode:
0000
0011
0ddd
0rrr
T
-
H
-
Exemplu:
mulsu r21,r20 ;
movw r20,r0 ;
S
-
V
-
N
-
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
PROIECT DE DIPLOM
2007
(i)
R1:R0 Rd Rr
Syntax:
Operands:
Program Counter:
(i)
FMUL Rd,Rr
16 d 23, 16 r 23
PC PC + 1
16-bit Opcode:
0000
0011
0ddd
1rrr
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
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)
R1:R0 Rd Rr
Syntax:
Operands:
Program Counter:
(i)
FMUL Rd,Rr
16 d 23, 16 r 23
PC PC + 1
16-bit Opcode:
0000
0011
1ddd
0rrr
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
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)
R1:R0 Rd Rr
Syntax:
Operands:
Program Counter:
(i)
FMULSU Rd,Rr
16 d 23, 16 r 23
PC PC + 1
16-bit Opcode:
0000
0011
1ddd
1rrr
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
(i)
PC PC + k + 1
Syntax:
Operands:
RJMP k
-2K k < 2K
Program Counter:
PC PC + k + 1
91
Stack
Unchanged
PROIECT DE DIPLOM
2007
16-bit Opcode:
1100
kkkk
kkkk
kkkk
T
-
Exemplu:
cpi
brne
rjmp
error: add
inc
ok:
nop
H
-
S
-
r16,$42
error
ok
r16,r17
r16
V
-
N
-
Z
-
C
-
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
T
-
Exemplu:
mov r30,r0
ijmp
H
-
S
-
V
-
N
-
Z
-
JMP Jump
Descriere:
92
C
-
PROIECT DE DIPLOM
2007
(i)
(i)
Syntax:
Operands:
JMP k
0 k < 4M
Program Counter:
Stack:
PC k
Unchanged
32-bit Opcode:
1001
kkkk
010k
kkkk
kkkk
kkkk
110k
kkkk
Exemplu:
mov
jmp
farplc: nop
r1,r0 ; Copy r0 to r1
farplc ; Unconditional jump
; Jump destination (do nothing)
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
P
S SP - 3 (3 bytes, 22 bits)
16-bit Opcode:
1101
kkkk
kkkk
kkkk
93
T
-
H
-
S
-
V
-
N
-
PROIECT DE DIPLOM
2007
Z
-
C
-
Exemplu:
rcall
routine: push
pop
ret
; Restore r14
; Return from subroutine
PC(15:0) Z(15:0)
PC(15:0) Z(15:0)
PC(21:16) 0
Syntax:
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
Exemplu:
mov
icall
T
-
H
-
r30,r0
S
-
V
-
N
-
Z
-
C
-
PROIECT DE DIPLOM
2007
Operation:
(i) PC k
Devices with 16 bits PC,128k bytes program memory maximum
(ii) PC k
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
S
P SP-2, (2 bytes, 16 bits)
Stack:
(ii)
CALL k
0 k < 4M
PC k
STACK PC+2
S
P SP-3 (3 bytes, 22 bits)
32-bit Opcode:
1001
kkkk
010k
kkkk
kkkk
kkkk
111k
kkkk
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
error
; Infinite loop
PC (15:0) STACK
PC (21:0) STACK
Syntax:
(i)
(ii)
RET
RET
Operands:
None
None
Program Counter:
See Operation
See Operation
16-bit Opcode:
1001
0101
0000
1000
Stack:
SP SP + 2, (2 bytes, 16 bits)
SP SP + 3, (3 bytes,22 bits)
T
-
H
-
S
-
V
-
N
-
PROIECT DE DIPLOM
2007
Z
-
C
-
Exemplu:
call
routine: push
pop
ret
routine
Call subroutine
r14
r14
; Restore r14
; Return from subroutine
PC (15:0) STACK
PC (21:0) STACK
Syntax:
(i)
(ii)
Operands:
RETI
RETI
Program Counter:
None
None
Stack:
SP SP + 2, (2 bytes, 16 bits)
SP SP + 3, (3 bytes,22 bits)
See Operation
See Operation
16-bit Opcode:
1001
0101
0001
1000
T
-
Exemplu:
extint: push r0
pop r0
reti
H
-
S
-
V
-
N
-
Z
-
C
-
PROIECT DE DIPLOM
2007
(i)
(i)
Syntax:
Operands:
Program Counter:
CPSE Rd,Rr
0 d 31, 0 r 31
16-bit Opcode:
0001
00rd
dddd
rrrr
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
(i)
Syntax:
Operands:
Program Counter:
CP Rd,Rr
0 d 31, 0 r 31
PC PC + 1
16-bit Opcode:
0001
01rd
dddd
rrrr
T
-
Exemplu:
cp
r4,r19
brne noteq
noteq: nop
PROIECT DE DIPLOM
2007
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
(i)
Syntax:
Operands:
Program Counter:
CPC Rd,Rr
0 d 31, 0 r 31
PC PC + 1
16-bit Opcode:
0000
01rd
dddd
rrrr
T
-
Exemplu:
; Compare r3:r2 with r1:r0
cp
r2,r0 ; Compare low byte
cpc r3,r1 ; Compare high byte
brne noteq ; Branch if not equal
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
Syntax:
Operands:
Program Counter:
(i)
CPI Rd,K
16 d 31, 0 K 255
PC PC + 1
16-bit Opcode:
0011
KKKK
dddd
KKKK
Exemplu:
cpi
T
-
r19,3
brne
nop
error
error
PROIECT DE DIPLOM
2007
; Branch if r19<>3
; Branch destination (do nothing)
(i)
(i)
Syntax:
Operands:
Program Counter:
SBRC Rr,b
0 r 31, 0 b 7
16-bit Opcode:
1111
110r
rrrr
0bbb
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)
(i)
Syntax:
Operands:
Program Counter:
SBRS Rr,b
0 r 31, 0 b 7
16-bit Opcode:
99
111r
rrrr
T
-
H
-
Exemplu:
sub
sbrs
neg
nop
S
-
r0, r1
r0, 7
r0
2007
0bbb
PROIECT DE DIPLOM
;
;
;
;
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)
(i)
(i)
Syntax:
Operands:
Program Counter:
SBIC A,b
0 A 31, 0 b 7
16-bit Opcode:
1001
1001
AAAA
Abbb
T
-
H
-
Exemplu:
E2wait:
sbic $1c,1
rjmp e2wait
nop
S
-
V
-
N
-
Z
-
C
-
PROIECT DE DIPLOM
2007
(i)
(i)
Syntax:
Operands:
Program Counter:
SBIS A,b
0 A 31, 0 b 7
16-bit Opcode:
1001
1011
AAAA
Abbb
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:
If SREG(s) = 1 then PC PC + k + 1, else PC PC + 1
(i)
(i)
Syntax:
Operands:
Program Counter:
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
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)
BRBC - Branch if Bit in SREG is Cleared
101
PROIECT DE DIPLOM
2007
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
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:
(i)
If Rd = Rr (Z = 1) then PC PC + k + 1, else PC PC + 1
(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
Exemplu:
cp
r1,r0
PROIECT DE DIPLOM
2007
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:
If Rd Rr (Z = 0) then PC PC + k + 1, else PC PC + 1
(i)
(i)
Syntax:
Operands:
Program Counter:
BRNE k
-64 k +63
PC PC + k + 1
PC PC + 1, if condition is false
16-bit Opcode:
1111
01kk
kkkk
k001
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)
If C = 1 then PC PC + k + 1, else PC PC + 1
Syntax:
Operands:
Program Counter:
103
PROIECT DE DIPLOM
2007
-64 k +63
BRCS k
PC PC + k + 1
PC PC + 1, if condition is false
16-bit Opcode:
1111
00kk
kkkk
k000
Exemplu:
cpi
r26,$56 ; Compare r26 with $56
brcs carry
; Branch if carry set
carry: nop
; Branch destination (do nothing)
(i)
(i)
Syntax:
Operands:
Program Counter:
BRCC k
-64 k +63
PC PC + k + 1
PC PC + 1, if condition is false
16-bit Opcode:
1111
01kk
kkkk
k000
Exemplu:
add r22,r23 ; Add r23 to r22
brcc nocarry ; Branch if carry cleared
nocarry: nop
; Branch destination (do nothing)
104
PROIECT DE DIPLOM
2007
(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
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)
Syntax:
Operands:
Program Counter:
(i)
BRLO k
-64 k +63
PC PC + k + 1
PC PC + 1, if condition is false
16-bit Opcode:
1111
00kk
kkkk
k000
105
PROIECT DE DIPLOM
2007
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)
If N = 1 then PC PC + k + 1, else PC PC + 1
(i)
Syntax:
Operands:
Program Counter:
BRMI k
-64 k +63
PC PC + k + 1
PC PC + 1, if condition is false
16-bit Opcode:
1111
00kk
kkkk
k010
Exemplu:
subi
brmi
negative:
r18,4
; Subtract 4 from r18
negative ; Branch if result negative
nop
PROIECT DE DIPLOM
2007
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
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:
If Rd Rr (N V = 0) then PC PC + k + 1, else PC PC + 1
(i)
(i)
Syntax:
Operands:
Program Counter:
BRGE k
-64 k +63
PC PC + k + 1
PC PC + 1, if condition is false
16-bit Opcode:
1111
01kk
kkkk
k100
Exemplu:
cp
r11,r12
brge greateq
greateq: nop
PROIECT DE DIPLOM
2007
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:
If Rd < Rr (N V = 1) then PC PC + k + 1, else PC PC + 1
(i)
(i)
Syntax:
Operands:
Program Counter:
BRLT k
-64 k +63
PC PC + k + 1
PC PC + 1, if condition is false
16-bit Opcode:
1111
00kk
kkkk
k100
Exemplu:
cp
brlt
less: nop
(i)
(i)
Syntax:
Operands:
Program Counter:
BRHS k
-64 k +63
PC PC + k + 1
PC PC + 1, if condition is false
16-bit Opcode:
1111
00kk
kkkk
k101
108
Exemplu:
brhs hset
hset : nop
PROIECT DE DIPLOM
2007
-
If H = 0 then PC PC + k + 1, else PC PC + 1
Syntax:
Operands:
Program Counter:
(i)
BRHC k
-64 k +63
PC PC + k + 1
PC PC + 1, if condition is false
16-bit Opcode:
1111
01kk
kkkk
k101
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:
(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
109
PROIECT DE DIPLOM
2007
16-bit Opcode:
1111
00kk
kkkk
k110
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:
If T = 0 then PC PC + k + 1, else PC PC + 1
(i)
(i)
Syntax:
Operands:
Program Counter:
BRTC k
-64 k +63
PC PC + k + 1
PC PC + 1, if condition is false
16-bit Opcode:
1111
01kk
kkkk
k110
Exemplu:
bst
brtc
tclear: nop
PROIECT DE DIPLOM
2007
Operation:
If V = 1 then PC PC + k + 1, else PC PC + 1
(i)
(i)
Syntax:
Operands:
Program Counter:
BRVS k
-64 k +63
PC PC + k + 1
PC PC + 1, if condition is false
16-bit Opcode:
1111
00kk
kkkk
k011
Exemplu:
add
brvs
overfl: nop
r3,r4 ; Add r4 to r3
overfl ; Branch if overflow
; Branch destination (do nothing)
(i)
(i)
Syntax:
Operands:
Program Counter:
BRVC k
-64 k +63
PC PC + k + 1
PC PC + 1, if condition is false
16-bit Opcode:
1111
01kk
kkkk
k011
Exemplu:
add
r3,r4 ; Add r4 to r3
brvc noover ; Branch if no overflow
111
noover:
nop
PROIECT DE DIPLOM
2007
(i)
(i)
Syntax:
Operands:
Program Counter:
MOV Rd,Rr
0 d 31, 0 r 31
PC PC + 1
16-bit Opcode:
0010
11rd
dddd
rrrr
T
-
Exemplu:
mov
call
check: cpi
ret
H
-
S
-
V
-
N
-
Z
-
C
-
Operation:
(i)
Rd+1:Rd Rr+1:Rr
Syntax:
Operands:
Program Counter:
(i)
MOVW Rd,Rr
d {0,2,...,30}, r {0,2,...,30}
PC PC + 1
16-bit Opcode:
112
0001
dddd
PROIECT DE DIPLOM
2007
rrrr
T
-
Exemplu:
mov
call
check: cpi
cpi
ret
H
-
S
-
V
-
N
-
Z
-
C
-
(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
T
-
H
-
S
-
V
-
N
-
Z
-
Exemplu:
clr r31
ldi r30
lpm
;
;
;
;
C
-
PROIECT DE DIPLOM
2007
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)
X X - 1
X X + 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
T
-
H
-
S
-
V
-
N
-
Z
-
C
-
Exemplu:
clr
r27
ldi
r26, $60
ld
r0, X+
ld
r1, X
ldi
r26, $63
ld
ld
r2, X
r3, -X
114
PROIECT DE DIPLOM
2007
Comment:
(i)
Rd (Y)
Y: Unchanged
(ii)
Rd (Y)
Y Y - 1
Y Y + 1
Rd (Y)
Y: Post incremented
Syntax:
Operands:
Program Counter:
(i)
LD Rd, Y
0 d 31
PC PC + 1
(ii)
LD Rd, Y+
(iii)
LD Rd, -Y
0 d 31
0 d 31
PC PC + 1
PC PC + 1
(iiii)
0 d 31, 0 q 63
PC PC + 1
(iii)
Y: Pre decremented
16-bit Opcode:
(i)
(ii)
(iii)
(iiii)
1000
1001
1001
10q0
000d
000d
000d
qq0d
dddd
dddd
dddd
dddd
1000
1001
1010
1qqq
Exemplu:
clr
T
-
H
-
r29
S
-
V
-
N
-
115
Z
-
C
-
PROIECT DE DIPLOM
2007
ldi
r28, $60
ld
r0, Y+
ld
r1, Y
ldi
r28, $63
ld
ld
r2, Y
r3, -Y
ldd
r4, Y+2
Comment:
(i)
Rd (Z)
Z: Unchanged
(ii)
(iii)
Rd (Z)
Z Z - 1
(iiii)
Rd (Z+q)
Z Z + 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)
LD Rd, Z+
(iii)
LD Rd, -Z
0 d 31
0 d 31
PC PC + 1
PC PC + 1
(iiii)
0 d 31, 0 q 63
PC PC + 1
16-bit Opcode:
(i)
(ii)
1000
1001
000d
000d
dddd
dddd
1000
1001
116
1001
10q0
000d
qq0d
dddd
dddd
PROIECT DE DIPLOM
2007
1010
0qqq
Exemplu:
clr
r31
ldi
r30, $60
ld
r0, Z+
ld
r1, Z
ldi
r30, $63
ld
ld
r2, Z
r3, -Z
ldd
r4, Z+2
(i)
Rd (k)
Syntax:
Operands:
Program Counter:
LDS Rd,k
0 d 31, 0 k 65535
PC PC + 2
32-bit Opcode:
1001
000d
dddd
0000
117
kkkk
kkkk
PROIECT DE DIPLOM
2007
kkkk
T
-
H
-
S
-
V
-
N
-
Z
-
C
-
Exemplu:
lds
r2, $FF00
add
r2, r1
; add r1 to r2
(i)
(ii)
(iii)
(i)
(ii)
(iii)
Comment:
(X) Rr
(X) Rr
X X - 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:
(i)
(ii)
(iii)
1001
1001
1001
001r
001r
001r
rrrr
rrrr
rrrr
1100
1101
1110
118
PROIECT DE DIPLOM
2007
T
-
H
-
S
-
V
-
N
-
Z
-
C
-
Exemplu:
clr
r27
ldi
r26,$60
st
X+,r0
st
X,r1
ldi
r26,$63
st
X,r2
st
-X,r3
(i)
(ii)
(iii)
(iiii)
(i)
(ii)
(iii)
(iiii)
Comment:
(Y) Rr
(Y) Rr
Y Y - 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
ST Y+, Rr
ST -Y, Rr
STD Y+q, Rr
0
0
0
0
PC PC + 1
PC PC + 1
PC PC + 1
PC PC + 1
r
r
r
r
31
31
31
31, 0 q 63
16-bit Opcode:
119
(i)
(ii)
(iii)
(iiii)
1000
1001
1001
10q0
001r
001r
001r
qq1r
rrrr
rrrr
rrrr
rrrr
PROIECT DE DIPLOM
2007
1000
1001
1010
1qqq
T
-
H
-
S
-
V
-
N
-
Z
-
C
-
Exemplu:
clr
r29
ldi
r28,$60
st
Y+,r0
st
Y,r1
ldi
r28,$63
st
Y,r2
st
-Y,r3
std
Y+2,r4
(i)
(ii)
(iii)
(Z) Rr
(Z) Rr
Z Z - 1
Comment:
Z: Unchanged
Z: Post incremented
Z: Pre decremented
Z Z+1
(Z) Rr
120
PROIECT DE DIPLOM
2007
(Z+q) Rr
(iiii)
(i)
(ii)
(iii)
(iiii)
Z: Unchanged, q: Displacement
Syntax:
Operands:
Program Counter:
ST Z, Rr
ST Z+, Rr
ST -Z, Rr
STD Z+q, Rr
0
0
0
0
PC PC + 1
PC PC + 1
PC PC + 1
PC PC + 1
r
r
r
r
31
31
31
31, 0 q 63
16-bit Opcode:
(i)
(ii)
(iii)
(iiii)
1000
1001
1001
10q0
001r
001r
001r
qq1r
rrrr
rrrr
rrrr
rrrr
0000
0001
0010
0qqq
Exemplu:
clr
r31
ldi
r30,$60
st
Z+,r0
st
Z,r1
ldi
r30,$63
st
st
Z,r2
-Z,r3
std
Z+2,r4
(i)
(k) Rr
Syntax:
Operands:
Program Counter:
STS k,Rr
0 r 31, 0 k 65535
PC PC + 2
32-bit Opcode:
121
001d
kkkk
dddd
kkkk
PROIECT DE DIPLOM
2007
0000
kkkk
T
-
H
-
S
-
V
-
N
-
Z
-
C
-
Exemplu:
lds
add
sts
Operation:
Comment:
(i)
(ii)
(iii)
R0 (Z)
Rd (Z)
Rd (Z)
Z Z + 1
(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
T
-
H
-
S
-
V
-
N
-
122
Z
-
C
-
PROIECT DE DIPLOM
2007
Exemplu:
clr
r31
ldi
r30, $F0
lpm
(i)-(v)
Operation:
Comment:
(Z) $ffff
(Z) R1:R0
(Z) R1:R0
(Z) TEMP
BLBITS R1:R0
Syntax:
Operands:
Program Counter:
SPM
None
PC PC + 1
16-bit Opcode:
1001
0101
1110
1000
T
-
H
-
S
-
V
-
N
-
Z
-
C
-
Exemplu:
; This example shows SPM write of one word for devices with word write
ldi
r31, $F0
; Load Z high byte
clr
r30
; Clear Z low byte
ldi
r16, $CF
; Load data to store
123
r1, r16
r16, $FF
r0, r16
r16,$03
;
SPMCR, r16 ;
;
r16,$01
;
SPMCR, r16 ;
;
PROIECT DE DIPLOM
2007
Rd I/O(A)
Syntax:
Operands:
Program Counter:
(i)
IN Rd,A
0 d 31, 0 A 63
PC PC + 1
16-bit Opcode:
1011
0AAd
dddd
AAAA
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)
PROIECT DE DIPLOM
2007
(i)
I/O(A) Rr
Syntax:
Operands:
Program Counter:
(i)
OUT A,Rr
0 r 31, 0 A 63
PC PC + 1
16-bit Opcode:
1AAr
1011
AAAA
rrrr
T
-
H
-
S
-
V
-
N
-
Z
-
C
-
Exemplu:
clr
r16
; Clear r16
ser
r17
; Set r17
out
$18, r16
nop
out
$18, r17
(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
T
-
H
-
S
-
V
-
N
-
Z
-
Exemplu:
routine
call
push
push
routine
r14
r13
; Call subroutine
; Save r14 on stack
; Save r13 on stack
125
C
-
pop
pop
ret
r13
r14
PROIECT DE DIPLOM
2007
; Restore r13
; Restore r14
; Return from subroutine
(i)
(i)
Syntax:
Operands:
Program Counter:
Stack:
POP Rd
0 d 31
PC PC + 1
SP SP + 1
16-bit Opcode:
1001
000d
dddd
1111
T
-
Exemplu:
routine
H
-
call
push
push
pop
pop
ret
S
-
V
-
routine
N
-
Z
-
C
-
; Call subroutine
r14
r13
r13
r14
; Restore r13
; Restore r14
; Return from subroutine
(i)
I/O(A,b) 1
Syntax:
Operands:
Program Counter:
SBI A,b
0 A 31, 0 b 7
PC PC + 1
126
PROIECT DE DIPLOM
2007
16-bit Opcode:
1001
1010
AAAA
Abbb
T
-
H
-
S
-
V
-
N
-
out
$1E, r0
sbi
$1C
in
r1, $1D
Z
-
C
-
Exemplu:
I/O(A,b) 0
Syntax:
Operands:
Program Counter:
(i)
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
b7 - - - - - - - - - - - - - - - - - - b0
127
(i)
PROIECT DE DIPLOM
2007
Syntax:
Operands:
Program Counter:
LSR Rd
0 d 31
PC PC + 1
11dd
dddd
dddd
T
-
Exemplu:
add
r0, r4
; Add r4 to r0
Lsl
R0
; Multiply r0 by 2
(i)
b7 - - - - - - - - - - - - - - - - - - b0
Syntax:
Operands:
Program Counter:
LSR Rd
0 d 31
PC PC + 1
16-bit Opcode:
1001
010d
dddd
0110
T
-
H
-
N
0
Exemplu:
add
r0, r4
; Add r4 to r0
Lsl
R0
; Divide r0 by 2
PROIECT DE DIPLOM
2007
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
Exemplu:
ldi
r16, $10
asr
r16
; r16=r16/2
ldi
asr
R17, $FC
r17
; Load -4 in r17
; r17=r17/2
(i)
Syntax:
Operands:
Program Counter:
SWAP Rd
0 d 31
PC PC + 1
16-bit Opcode:
1001
010d
dddd
0010
PROIECT DE DIPLOM
2007
Exemplu:
inc
swap
inc
swap
r1
r1
r1
r1
; Increment r1
; Swap high and low nibble of
; Increment high nibble of r1
; Swap back
(i)
(i)
Syntax:
Operands:
Program Counter:
BSET s
0 s 7
PC PC + 1
16-bit Opcode:
1001
0100
0ssss
1000
Exemplu:
bset
bset
6
7
; Set T flag
; Enable interrupt
(i)
SREG(s) 0
Syntax:
Operands:
Program Counter:
BCLR s
0 s 7
PC PC + 1
16-bit Opcode:
130
0100
1ssss
PROIECT DE DIPLOM
2007
1000
Exemplu:
bclr
bclr
0
7
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
Exemplu:
bst r1, 2
bld r0, 4
; Copy bit
; Store bit 2 of r1 in T flag
; Load T into bit 4 of r0
Rd(b) T
131
(i)
PROIECT DE DIPLOM
2007
Syntax:
Operands:
Program Counter:
BLD Rd,b
0 d 31, 0 b 7
PC PC + 1
16 bit Opcode:
1111
100d
dddd
0bbb
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
Operation:
C 1
(i)
(i)
Syntax:
Operands:
Program Counter:
SEC
None
PC PC + 1
16-bit Opcode:
1001
0100
0000
1000
Exemplu:
sec
adc
r0,r1
PROIECT DE DIPLOM
2007
Descriere:
terge indicatorul Carry (C) din SREG.
Operation:
(i)
C 0
Syntax:
Operands:
Program Counter:
(i)
CLC
None
PC PC + 1
16-bit Opcode:
1001
0100
1000
1000
Exemplu:
add
clc
r0,r0
; Add r0 to itself
; Clear carry flag
N 1
Syntax:
Operands:
Program Counter:
(i)
SEN
None
PC PC + 1
16-bit Opcode:
1001
0100
0010
1000
T
-
H
-
S
-
V
-
N
1
Exemplu:
133
Z
-
C
-
r2,r19
PROIECT DE DIPLOM
2007
; Add r19 to r2
sen
(i)
(i)
Syntax:
Operands:
Program Counter:
CLN
None
PC PC + 1
16-bit Opcode:
1001
0100
1010
1000
T
-
H
-
add
cln
r2,r3
S
-
V
-
N
0
Z
-
C
-
Exemplu:
; Add r3 to r2
; Clear negative flag
(i)
Z 1
Syntax:
Operands:
Program Counter:
SEZ
None
PC PC + 1
16-bit Opcode:
1001
0100
0001
1000
PROIECT DE DIPLOM
2007
Exemplu:
add
sez
r2,r19
; Add r19 to r2
; Set zero flag
(i)
(i)
Syntax:
Operands:
Program Counter:
CLZ
None
PC PC + 1
16-bit Opcode:
1001
0100
1001
1000
add
clz
r2,r3
Exemplu:
; Add r3 to r2
; Clear zero
(i)
I 1
Syntax:
Operands:
Program Counter:
SEI
None
PC PC + 1
16-bit Opcode:
1001
0100
0111
1000
135
PROIECT DE DIPLOM
2007
Exemplu:
cli
in
sei
; Disable interrupts
; Read Port B
; Enable interrupts
r13,$16
(i)
(i)
Syntax:
Operands:
Program Counter:
CLI
None
PC PC + 1
16-bit Opcode:
1001
0100
1111
1000
Exemplu:
cli
in
sei
r11,$16
; Disable interrupts
; Read port B
; Enable interrupts
S 1
136
(i)
PROIECT DE DIPLOM
2007
Syntax:
Operands:
Program Counter:
SES
None
PC PC + 1
16-bit Opcode:
1001
0100
0100
1000
T
-
H
-
S
1
V
-
N
-
Z
-
C
-
Exemplu:
add
ses
r2,r19
; Add r19 to r2
; Set negative flag
(i)
(i)
Syntax:
Operands:
Program Counter:
CLS
None
PC PC + 1
16-bit Opcode:
1001
0100
1100
1000
T
-
H
-
S
0
V
-
N
-
Exemplu:
add
cls
r2,r3
; Add r3 to r2
; Clear signed flag
137
Z
-
C
-
PROIECT DE DIPLOM
2007
Operation:
V 1
(i)
(i)
Syntax:
Operands:
Program Counter:
SEV
None
PC PC + 1
16-bit Opcode:
1001
0100
0011
1000
T
-
H
-
S
-
V
1
N
-
Z
-
C
-
Exemplu:
add
r2,r19
; Add r19 to r2
sev
Syntax:
Operands:
Program Counter:
CLV
None
PC PC + 1
16-bit Opcode:
1001
0100
1011
1000
T
-
H
-
S
-
V
0
N
-
Exemplu:
clv
r2,r3
; Add r3 to r2
; Clear overflow flag
Z
-
C
-
PROIECT DE DIPLOM
2007
T 1
(i)
(i)
Syntax:
Operands:
Program Counter:
SET
None
PC PC + 1
16-bit Opcode:
1001
0100
0110
1000
Exemplu:
set
; Set T flag
(i)
(i)
Syntax:
Operands:
Program Counter:
CLT
None
PC PC + 1
16-bit Opcode:
1001
0100
1110
1000
Exemplu:
clt
; Clear T flag
PROIECT DE DIPLOM
2007
Operation:
H 1
(i)
(i)
Syntax:
Operands:
Program Counter:
SEH
None
PC PC + 1
16-bit Opcode:
1001
0100
0101
1000
T
-
Exemplu:
seh
H
1
S
-
V
-
N
-
Z
-
C
-
H 0
Syntax:
Operands:
Program Counter:
(i)
CLH
None
PC PC + 1
16-bit Opcode:
1001
0100
1101
1000
T
-
H
0
Exemplu:
clh
S
-
V
-
N
-
Z
-
NOP - No Operation
Descriere:
Aceast instruciune consum o perioad de ceas.
Operation:
140
C
-
PROIECT DE DIPLOM
2007
No
(i)
Syntax:
Operands:
Program Counter:
NOP
None
PC PC + 1
16-bit Opcode:
0000
0000
0000
0000
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
T
-
H
-
S
-
V
-
N
-
Z
-
C
-
Exemplu:
ldi
out
sleep
r0,r11
; Copy r11 to r0
r16,(1<<SE) ; Enable sleep mode
MCUCR, r16
; Put MCU in sleep mode
PROIECT DE DIPLOM
2007
WD timer restart.
(i)
Syntax:
Operands:
Program Counter:
WDR
None
PC PC + 1
16-bit Opcode:
1001
0101
1010
1000
T
-
H
-
S
-
V
-
N
-
Exemplu:
wdr
142
Z
-
C
-