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 (bitul de semn) V 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 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

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 VCC 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 (VBOT+ 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 VCC 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 printr-un 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 aleVCC. 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. Dac PUOE este activ,pullup este activat/dezactivat atunci cnd PUOV este pornit/oprit,indiferent de setrile DDxn, PORTxn, i registrul de bii PUD .

PUOV

oprit

DDOE

DDOV

PVOE

PVOV

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

PROIECT DE DIPLOM 2007

DIEOE

DIEOV

DI

AIO

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:
(i) Rd Rd + Rr

Syntax:
(i) ADD Rd,Rr

Operands:
0 d 31, 0 r 31

Program Counter:
PC PC + 1

16-bit Opcode:
0000 11rd dddd rrrr

Status Register (SREG) and Boolean Formulae:


I T H S V N Z C

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:
(i) Rd Rd + Rr + C

Syntax:
(i) ADC Rd,Rr

Operands:
0 d 31, 0 r 31

Program Counter:
PC PC + 1

16-bit Opcode:
0001 11rd dddd rrrr

Status Register (SREG) Boolean Formulae:


I T

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:
(i) ADIW Rd,K

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

Program Counter:
PC PC + 1

16-bit Opcode:
1001 0110 KKdd KKKK

Status Register (SREG) and Boolean Formulae:


I T H

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:
(i) Rd Rd - Rr

Syntax:
(i) SUB Rd,Rr

Operands:
0 d 31, 0 r 31

Program Counter:
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
I T H S V N Z C

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:
(i) Rd Rd - K

Syntax:
(i) SUBI Rd,K

Operands:
16 d 31, 0 K 255

Program Counter:
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:
(i) SBC Rd,Rr

Operands:
0 d 31, 0 r 31

Program Counter:
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 r2,r0 r3,r1 ; Subtract r1:r0 from r3:r2 ; Subtract low byte ; Subtract with carry high byte

SBCI - Subtract Immediate with Carry Descriere: Scade o constant i pe Carry din registru i pune rezultatul n registrul destinaie Rd. Operation:
(i) (i) Rd Rd - K - C

Syntax:

Operands:
16 d 31, 0 K 255

Program Counter:
PC PC + 1

SBCI Rd,K

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:
(i) SBIW Rd,K

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

Program Counter:
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 H -

Exemplu: sbiw sbiw

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:
(i) AND Rd,Rr

Operands:
0 d 31, 0 r 31

Program Counter:
PC PC + 1

16-bit Opcode:
0010 00rd dddd rrrr

Status Register (SREG) and Boolean Formulae:


I T H

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:
(i) Rd Rd K

80

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

Syntax:
(i) ANDI Rd,K

Operands:
16 d 31, 0 K 255

Program Counter:
PC PC + 1

16-bit Opcode:
0111 KKKK dddd KKKK

Status Register (SREG) and Boolean Formulae:


I T H

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:
(i) OR Rd,Rr

Operands:
0 d 31, 0 r 31

Program Counter:
PC PC + 1

16-bit Opcode:
0010 10rd dddd rrrr

Status Register (SREG) and Boolean Formula:


I T H -

V 0

C -

Exemplu: or bst brts ok: nop

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 Descriere: 81

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

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

Syntax:
(i) ORI Rd,K

Operands: 16 d 31, 0 k 255

Program Counter:
PC PC +1

16-bit Opcode:
0110 KKKK dddd KKKK

Status Register (SREG) and Boolean Formula:


I T H -

V 0

C -

Exemplu: ori r16 ,$F0 ori r17, 1

; ;

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:
(i) Rd Rd Rr

Syntax:
(i) EOR Rd,Rr

Operands:
0 d 31, 0 r 31

Program Counter:
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:
(i) COM Rd

Operands:
0 d 31 dddd 0000

Program Counter:
PC PC + 1

16-bit Opcode:
1001 010d

Status Register (SREG) and Boolean Formulae:


I T H -

V 0

C 1

Exemplu: com breq zero: nop

r4 zero

; 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:
(i) NEG Rd

Operands:
0 d 31

Program Counter:
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:
(i) SBR Rd,K

Operands:
16 d 31, 0 K 255

Program Counter:
PC PC + 1

16-bit Opcode:
0110 KKKK dddd KKKK

Status Register (SREG) and Boolean Formula:


I T H -

V 0

C -

Exemplu: sbr sbr

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: (i) Rd Rd ($FF - K) (i) Syntax: CBR Rd,K Operands: 16 d 31, 0 K 255 Program Counter: PC PC+1

Status Register (SREG) and Boolean Formula:


I T H -

V 0

Exemplu: cbr cbr

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:
(i) INC Rd

Operands:
0 d 31

Program Counter:
PC PC + 1

16-bit Opcode:
1001 010d dddd 0011

Status Register and Boolean Formula:


I T H -

C -

Exemplu: clr loop inc cpi brne nop

r22 r22 r22,$4F loop

; clear r22 ; increment r22 ; Compare r22 to $4F ; Branch if not equal ; Continue (do nothing)

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) (i) Rd Rd 1

Syntax:

Operands:
0 d 31

Program Counter:
PC PC + 1

DEC Rd

16-bit Opcode:
1001 010d dddd 1010

Status Register and Boolean Formula:


I T H -

C -

Exemplu: ldi

r17,$10

; Load constant in r17 85

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

loop:

add r1,r2 dec r17 brne loop nop

; 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) TST Rd

Operands:
0 d 31

Program Counter:
PC PC + 1

16-bit Opcode:
0010 00dd dddd dddd

Status Register and Boolean Formula:


I T H -

V 0

C -

Exemplu: tst r0 breq zero zero: nop

; 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 16-bit Opcode:


0010 01dd

Operands: 0 d 31

Program Counter: PC PC+1

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 N 0 Z 1 C -

PROIECT DE DIPLOM 2007

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:
(i) 1110 SER Rd

Operands:
16 d 31 dddd 1111

Program Counter:
PC PC + 1

16-bit Opcode:
1111

Status Register (SREG) and Boolean Formula:


I T H S V -

N -

Z -

C -

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 R0

87

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
Multiplicand 8

PROIECT DE DIPLOM 2007


Product High 16 Product Low

Multiplier 8

Operation:
(i) R1:R0 Rd Rr (unsigned unsigned unsigned)

Syntax:
(i) MUL Rd,Rr

Operands:
0 d 31, 0 r 31

Program Counter:
PC PC + 1

16-bit Opcode:
1001 11rd dddd rrrr

Status Register (SREG) and Boolean Formulae:


I T H S V -

N -

Exemplu: mul movw

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 Multiplicand 8 Rr R1 R0 Product Low 16

Multiplier 8

Product High

Operation:
(i) R1:R0 Rd Rr (signed signed signed)

Syntax:
(i) MULS Rd,Rr

Operands:
16 d 31, 16 r 31

Program Counter:
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

PROIECT DE DIPLOM 2007

muls r21,r20 movw r20,r0

; 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 R1 R0 Multiplicand 8

Multiplier 8

Product High 16

Product Low

Operation:
(i) R1:R0 Rd Rr (signed signed unsigned)

Syntax:
(i) MULSU Rd,Rr

Operands:
16 d 23, 16 r 23

Program Counter:
PC PC + 1

16-bit Opcode:
0000 0011 0ddd 0rrr

Status Register (SREG) and Boolean Formula:


I T H S V -

N -

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

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 8 R1 Product High 16 R0 Product Low

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
(i) R1:R0 Rd Rr

PROIECT DE DIPLOM 2007

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

Syntax:
(i) FMUL Rd,Rr

Operands:
16 d 23, 16 r 23

Program Counter:
PC PC + 1

16-bit Opcode:
0000
I T -

0011
H -

0ddd
S -

1rrr
V N -

Status Register (SREG) and Boolean Formula:

Exemplu: fmul r23,r22 movw r22,r0

; 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 R1 R0 Multiplicand 8

Multiplier 8

Product High 16

Product Low

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

Syntax:
(i) 0000 FMUL Rd,Rr

Operands:
16 d 23, 16 r 23 1ddd 0rrr

Program Counter:
PC PC + 1

16-bit Opcode:
0011

Status Register (SREG) and Boolean Formulae:


I T H S V N -

Exemplu: fmuls r23,r22 movw r22,r0

; 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 Multiplicand 8 Rr R1 R0 Product Low 16

Multiplier 8

Product High

Operation:
(i) (i) R1:R0 Rd Rr (signed (1.15) signed (1.7) unsigned (1.7))

Syntax:
FMULSU Rd,Rr

Operands:
16 d 23, 16 r 23

Program Counter:
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:
(i) RJMP k

Operands:
-2K k < 2K

Program Counter:
PC PC + k + 1

Stack
Unchanged

91

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 H S V -

N -

Z -

C -

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

r16,$42 error ok r16,r17 r16

; 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) IJMP

Operands:
None

Program Counter:
See Operation

Stack:
Not Affected

16-bit Opcode:
1001 0100 0000 1001

Status Register (SREG) and Boolean Formula:


I T H S V N Z C -

Exemplu: mov r30,r0 ijmp JMP Jump Descriere:

; Set offset to jump table ; Jump to routine pointed to by r31:r30

92

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

Sare la o adres din zona memoriei program de 4M. Operation:


(i) PC k

Syntax:
(i) JMP k

Operands:
0 k < 4M

Program Counter:
PC k

Stack:
Unchanged

32-bit Opcode:
1001 kkkk 010k kkkk kkkk kkkk 110k kkkk

Status Register (SREG) and Boolean Formula:


I T H S V N Z C -

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) PC k (ii) PC k
Syntax:

Devices with 16 bits PC,128k bytes program memory maximum Devices with 22 bits PC,4M bytes program memory maximum
Operands: Program Counter: Stack:

(i) (ii)

RCALL k RCALL k

-2K k < 2K -2K k < 2K

PC PC + k + 1 PC PC + k + 1

STACK PC + 1 SP SP - 2 (2 bytes, 16 bits) STACK PC + 1 P SP - 3 (3 bytes, 22 bits) S

16-bit Opcode:
1101 kkkk kkkk kkkk

93

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007


Z C -

Status Register (SREG) and Boolean Formula:


I T H S V -

N -

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 Devices with 16 bits PC, 128k bytes program memory maximum Devices with 22 bits PC, 8M bytes program memory maximum

Syntax:
(i) (ii) ICALL ICALL

Operands:
None None

Program Counter:
See Operation 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 T H S V N Z C -

Exemplu: mov icall

r30,r0

; Set offset to call table ; Call routine pointed to by r31:r30

CALL - Long Call to a Subroutine Descriere: 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. 94

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

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:
(i) (ii) CALL k CALL k

Operands:
0 k < 64K 0 k < 4M

Program Counter
PC k PC k

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

32-bit Opcode:
1001 kkkk 010k kkkk kkkk kkkk 111k kkkk

Status Register (SREG) and Boolean Formula:


I T H S V

Exemplu: mov call nop check: cpi breq ret error: rjmp

r16,r0 check r16,$42 error error

; Copy r0 to r16 ; Call subroutine ; Continue (do nothing) ; Check if r16 has a special value ; Branch if equal ; Return from subroutine ; 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 Devices with 16 bits PC, 128k bytes program memory maximum Devices with 22 bits PC, 8M bytes program memory maximum

Syntax:
(i) (ii) RET RET

Operands:
None None

Program Counter:
See Operation See Operation

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

16-bit Opcode:
1001 0101 0000 1000

Status Register (SREG) and Boolean Formula: 95

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
I T H S V N Z C -

PROIECT DE DIPLOM 2007

Exemplu: call routine: push pop ret routine ; r14 r14 Call subroutine ; 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 Devices with 16 bits PC, 128k bytes program memory maximum Devices with 22 bits PC, 8M bytes program memory maximum

Syntax:
(i) (ii) RETI RETI

Operands:
None None

Program Counter:
See Operation See Operation

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

16-bit Opcode:
1001 0101 0001 1000

Status Register (SREG) and Boolean Formula:


I 1 T H S V -

N -

Z -

C -

Exemplu: extint: push r0 pop r0 reti

; Save r0 on the stack ; Restore r0 ; Return and enable interrupts

CPSE - Compare Skip if Equal Descriere: Aceast instruciune face o comparaie ntre registrele Rd i Rr i sare la urmatoarea instruciune dac Rd=Rr. Operation: 96

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
(i) If Rd = Rr then PC PC + 2 (or 3) else PC PC + 1

PROIECT DE DIPLOM 2007

Syntax:
(i) CPSE Rd,Rr

Operands:
0 d 31, 0 r 31

Program Counter:
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 H S V N Z C -

Exemplu: inc r4 cpse r4,r0 neg r4 nop CP-Compare

; ; ; ;

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

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:
(i) CP Rd,Rr

Operands:
0 d 31, 0 r 31

Program Counter:
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)

CPC-Compare with Carry 97

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

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

Syntax:
(i) CPC Rd,Rr

Operands:
0 d 31, 0 r 31

Program Counter:
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 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:
(i) CPI Rd,K

Operands:
16 d 31, 0 K 255

Program Counter:
PC PC + 1

16-bit Opcode:
0011 KKKK dddd KKKK

Status Register (SREG) and Boolean Formula:


I T -

Exemplu: cpi

r19,3

; Compare r19 with 3 98

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

error

brne nop

error

; 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:
(i) SBRC Rr,b

Operands:
0 r 31, 0 b 7

Program Counter:
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 T H S V N Z C -

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:
(i) SBRS Rr,b

Operands:
0 r 31, 0 b 7

Program Counter:
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: 99

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
1111 111r rrrr 0bbb

PROIECT DE DIPLOM 2007

Status Register (SREG) and Boolean Formula:


I T H S V -

N -

Z -

C -

Exemplu:

sub sbrs neg nop

r0, r1 r0, 7 r0

; ; ; ;

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:
(i) If I/O(A,b) = 0 then PC PC + 2 (or 3) else PC PC + 1

Syntax:
(i) SBIC A,b

Operands:
0 A 31, 0 b 7

Program Counter:
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 S V N Z C -

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

; Skip next inst. If EEWE cleared ; EEPROM write not finished ; Continue (do nothing)

SBIS - Skip if Bit in I/O Register is Set Descriere: Aceast instruciune testeaz un singur bit n registrul de Intrare/Ieire i sare la urmatoarea instruciune dac bitul este 1. Operation: 100

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
(i) If I/O(A,b) = 1 then PC PC + 2 (or 3) else PC PC + 1

PROIECT DE DIPLOM 2007

Syntax:
(i) SBIS A,b

Operands:
0 A 31, 0 b 7

Program Counter:
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:
(i) BRBS s,k

Operands:
0 s 7, -64 k +63

Program Counter:
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 T H S V N Z C

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

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

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:
(i) If SREG(s) = 0 then PC PC + k + 1, else PC PC + 1

Syntax:
(i) BRBC s,k

Operands:
0 s 7, -64 k +63

Program Counter:
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 T H S V N Z C

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)
(i) If Rd = Rr (Z = 1) then PC PC + k + 1, else PC PC + 1

Syntax:
BREQ k

Operands:
-64 k +63

Program Counter:
PC PC + k + 1 PC PC + 1, if condition is false k001

16-bit Opcode:
1111 00kk kkkk

Status Register (SREG) and Boolean Formulae:


I T H S V N Z C

Exemplu: cp

r1,r0

; Compare registers r1 and r0 102

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

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:
(i) If Rd Rr (Z = 0) then PC PC + k + 1, else PC PC + 1

Syntax:
(i) BRNE k

Operands:
-64 k +63

Program Counter:
PC PC + k + 1 PC PC + 1, if condition is false k001

16-bit Opcode:
1111 01kk kkkk

Status Register (SREG) and Boolean Formula:


I T H S V N Z C

Exemplu: eor loop: inc cpi brne nop

r27,r27 r27 r27,5 loop

; ; ; ; ;

Clear r27 Increase r27 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. Operation:
(i) If C = 1 then PC PC + k + 1, else PC PC + 1

Syntax:

Operands: 103

Program Counter:

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
(i) BRCS k -64 k +63

PROIECT DE DIPLOM 2007


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 T H S V N Z C

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:
(i) BRCC k

Operands:
-64 k +63

Program Counter:
PC PC + k + 1 PC PC + 1, if condition is false k000

16-bit Opcode:
1111 01kk kkkk

Status Register (SREG) and Boolean Formulae:


I T H S V N Z C

Exemplu: add r22,r23 ; Add r23 to r22 brcc nocarry ; Branch if carry cleared nocarry: nop ; Branch destination (do nothing) 104

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

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:
(i) If Rd Rr (C = 0) then PC PC + k + 1, else PC PC + 1

Syntax:
(i) BRSH k

Operands:
-64 k +63

Program Counter:
PC PC + k + 1 PC PC + 1, if condition is false k000

16-bit Opcode:
1111 01kk kkkk

Status Register (SREG) and Boolean Formula:


I T H S V N Z C

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

Syntax:
(i) BRLO k

Operands:
-64 k +63

Program Counter:
PC PC + k + 1 PC PC + 1, if condition is false k000

16-bit Opcode:
1111 00kk kkkk

105

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

Status Register (SREG) and Boolean Formulae:


I T H S V

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)
(i) If N = 1 then PC PC + k + 1, else PC PC + 1

Syntax:
BRMI k

Operands:
-64 k +63

Program Counter:
PC PC + k + 1 PC PC + 1, if condition is false k010

16-bit Opcode:
1111 00kk kkkk

Status Register (SREG) and Boolean Formula:


I T H S V N Z C

Exemplu: subi brmi negative:

r18,4 ; Subtract 4 from r18 negative ; Branch if result negative nop ; Branch destination (do nothing)

BRPL - Branch if Plus 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. 106

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

Operation:
(i) If N = 0 then PC PC + k + 1, else PC PC + 1

Syntax:
(i) BRPL k

Operands:
-64 k +63

Program Counter:
PC PC + k + 1 PC PC + 1, if condition is false k010
V N Z C

16-bit Opcode:
1111
I T H

01kk
S

kkkk

Status Register (SREG) and Boolean Formula:


-

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:
(i) BRGE k

Operands:
-64 k +63

Program Counter:
PC PC + k + 1 PC PC + 1, if condition is false k100

16-bit Opcode:
1111 01kk kkkk

Status Register (SREG) and Boolean Formulae:


I T H S V N Z C

Exemplu: cp r11,r12 brge greateq greateq: nop

; Compare registers r11 and r12 ; Branch if r11 r12 (signed) ; Branch destination (do nothing)

BRLT - Branch if Less Than (Signed) 107

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

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:
(i) If Rd < Rr (N V = 1) then PC PC + k + 1, else PC PC + 1

Syntax:
(i) BRLT k

Operands:
-64 k +63

Program Counter:
PC PC + k + 1 PC PC + 1, if condition is false k100

16-bit Opcode:
1111 00kk kkkk

Status Register (SREG) and Boolean Formulae:


I T H S V N Z C

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:
(i) BRHS k

Operands:
-64 k +63

Program Counter:
PC PC + k + 1 PC PC + 1, if condition is false k101

16-bit Opcode:
1111 00kk kkkk

Status Register (SREG) and Boolean Formula:


I T H S V N Z C

108

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
-

PROIECT DE DIPLOM 2007

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:
(i) If H = 0 then PC PC + k + 1, else PC PC + 1

Syntax:
(i) BRHC k

Operands:
-64 k +63

Program Counter:
PC PC + k + 1 PC PC + 1, if condition is false k101

16-bit Opcode:
1111 01kk kkkk

Status Register (SREG) and Boolean Formula:


I T H S V N Z C

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:
(i) BRTS k

Operands:
-64 k +63

Program Counter:
PC PC + k + 1 PC PC + 1, if condition is false

109

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

16-bit Opcode:
1111 00kk kkkk k110

Status Register (SREG) and Boolean Formulae:


I T H S V N Z C

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:
(i) BRTC k

Operands:
-64 k +63

Program Counter:
PC PC + k + 1 PC PC + 1, if condition is false
k110

16-bit Opcode:
1111 01kk kkkk

Status Register (SREG) and Boolean Formulae:


I T H S V N Z C

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 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. 110

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

Operation:
(i) If V = 1 then PC PC + k + 1, else PC PC + 1

Syntax:
(i) BRVS k

Operands:
-64 k +63

Program Counter:
PC PC + k + 1 PC PC + 1, if condition is false k011

16-bit Opcode:
1111 00kk kkkk

Status Register (SREG) and Boolean Formula:


I T H S V N Z C

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:
(i) BRVC k

Operands:
-64 k +63

Program Counter:
PC PC + k + 1 PC PC + 1, if condition is false k011

16-bit Opcode:
1111 01kk kkkk

Status Register (SREG) and Boolean Formula:


I T H S V N Z C

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

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

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:
(i) MOV Rd,Rr

Operands:
0 d 31, 0 r 31

Program Counter:
PC PC + 1

16-bit Opcode:
0010 11rd dddd rrrr

Status Register (SREG) Boolean Formula:


I T H S V N Z C -

Exemplu: mov call check: cpi ret

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

Syntax:
(i) MOVW Rd,Rr

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

Program Counter:
PC PC + 1

16-bit Opcode: 112

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
0000 0001 dddd rrrr

PROIECT DE DIPLOM 2007

Status Register (SREG) Boolean Formula:


I T H S V N Z C -

Exemplu: mov call check: cpi cpi ret

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:
(i) Rd K

Syntax:
(i) LDI Rd,K

Operands:
16 d 31, 0 K 255

Program Counter:
PC PC + 1

16-bit Opcode:
1110 kkkk dddd kkkk

Status Register (SREG) Boolean Formula:


I T H S V N Z C -

Exemplu: clr r31 ldi r30 lpm ; ; ; ; Clear Z high byte Set Z low byte to $F0 Load constant from program memory pointed to by Z

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

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

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:
(i) (ii) (iii) Rd (X) Rd (X) X X - 1 X X + 1 Rd (X)

Comment:
X: Unchanged X: Post incremented X: Pre decremented

Syntax:
(i) (ii) (iii) LD Rd, X LD Rd, X+ LD Rd, -X

Operands:
0 d 31 0 d 31 0 d 31

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

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 Z C -

Exemplu:
clr ldi ld ld ldi ld ld r27 r26, $60 r0, X+ r1, X r26, $63 r2, X r3, -X ; Clear X high byte ; Set X low byte to $60 ; Load r0 with data space loc. $60 (X post inc) ; Load r1 with data space loc. $61 ; Set X low byte to $63 ; Load r2 with data space loc. $63 ; Load r3 with data space loc. $62 (X pre dec)

114

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

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:
(i) (ii) (iii) Rd (Y) Rd (Y) Y Y - 1 Y Y + 1 Rd (Y)

Comment:
Y: Unchanged Y: Post incremented Y: Pre decremented

Syntax:
(i) (ii) (iii) (iiii) LD Rd, Y LD Rd, Y+ LD Rd, -Y LDD Rd, Y+q

Operands:
0 d 31 0 d 31 0 d 31 0 d 31, 0 q 63

Program Counter:
PC PC + 1 PC PC + 1 PC PC + 1 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:


I T H S V N Z C -

Exemplu: clr

r29

; Clear Y high byte

115

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
ldi ld ld ldi ld ld ldd r28, $60 r0, Y+ r1, Y r28, $63 r2, Y r3, -Y r4, Y+2 ; Set Y low byte to $60 ; Load r0 with data space loc. $60 (Y post inc) ; Load r1 with data space loc. $61 ; Set Y low byte to $63 ; Load r2 with data space loc. $63 ; Load r3 with data space loc. $62 (Y pre dec) ; Load r4 with data space loc. $64

PROIECT DE DIPLOM 2007

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:
(i) (ii) (iii) (iiii) Rd (Z) Rd (Z) Z Z - 1 Rd (Z+q) Z Z + 1 Rd (Z)

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

Syntax:
(i) (ii) (iii) (iiii) LD Rd, Z LD Rd, Z+ LD Rd, -Z LDD Rd, Z+q

Operands:
0 d 31 0 d 31 0 d 31 0 d 31, 0 q 63

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

16-bit Opcode:
(i) (ii) 1000 1001 000d 000d dddd dddd 1000 1001

116

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
(iii) (iiii) 1001 10q0 000d qq0d dddd dddd 1010 0qqq

PROIECT DE DIPLOM 2007

Status Register (SREG) Boolean Formula:


I T H S V N Z C -

Exemplu:
clr ldi ld ld ldi ld ld ldd r31 r30, $60 r0, Z+ r1, Z r30, $63 r2, Z r3, -Z r4, Z+2 ; Clear Z high byte ; Set Z low byte to $60 ; Load r0 with data space loc. $60 (Z post inc) ; Load r1 with data space loc. $61 ; Set Z low byte to $63 ; Load r2 with data space loc. $63 ; Load r3 with data space loc. $62 (Z pre dec) ; 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:
(i) LDS Rd,k

Operands:
0 d 31, 0 k 65535

Program Counter:
PC PC + 2

32-bit Opcode:
1001 000d dddd 0000

117

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
kkkk kkkk kkkk kkkk

PROIECT DE DIPLOM 2007

Status Register (SREG) Boolean Formula:


I T H S V N Z C -

Exemplu:
lds add r2, $FF00 r2, r1 ; Load r2 with the contents of data space location $FF00 ; 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:
Operation: Comment:

(i) (ii) (iii)

(X) Rr (X) Rr X X - 1
Syntax:

X X+1 (X) Rr
Operands:

X: Unchanged X: Post incremented X: Pre decremented


Program Counter:

(i) (ii) (iii)

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

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 ldi st st ldi st st r27 r26,$60 X+,r0 X,r1 r26,$63 X,r2 -X,r3 ; Clear X high byte ; Set X low byte to $60 ; Store r0 in data space loc. $60(X post inc) ; Store r1 in data space loc. $61 ; Set X low byte to $63 ; Store r2 in data space loc. $63 ; 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: Comment:

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

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


Syntax:

Y Y+1 (Y) Rr
Operands:

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


Program Counter:

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

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

0 0 0 0

r r r r

31 31 31 31, 0 q 63

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

16-bit Opcode: 119

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

(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 ldi st st ldi st st std r29 r28,$60 Y+,r0 Y,r1 r28,$63 Y,r2 -Y,r3 Y+2,r4 ; Clear Y high byte ; Set Y low byte to $60 ; Store r0 in data space loc. $60(Y post inc) ; Store r1 in data space loc. $61 ; Set Y low byte to $63 ; Store r2 in data space loc. $63 ; Store r3 in data space loc. $62(Y pre dec) ; Store r4 in data space loc. $64

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:
Operation: Comment:

(i) (ii) (iii)

(Z) Rr (Z) Rr Z Z - 1

Z Z+1 (Z) Rr

Z: Unchanged Z: Post incremented Z: Pre decremented

120

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
(iiii) (Z+q) Rr
Syntax: Operands:

PROIECT DE DIPLOM 2007


Z: Unchanged, q: Displacement
Program Counter:

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

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

0 0 0 0

r r r r

31 31 31 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 T H S V N Z C -

Exemplu:
clr ldi st st ldi st st std r31 r30,$60 Z+,r0 Z,r1 r30,$63 Z,r2 -Z,r3 Z+2,r4 ; Clear Z high byte ; Set Z low byte to $60 ; Store r0 in data space loc. $60(Z post inc) ; Store r1 in data space loc. $61 ; Set Z low byte to $63 ; Store r2 in data space loc. $63 ; Store r3 in data space loc. $62(Z pre dec) ; 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

Syntax:
(i) STS k,Rr

Operands:
0 r 31, 0 k 65535

Program Counter:
PC PC + 2

32-bit Opcode: 121

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
1001 kkkk 001d kkkk dddd kkkk 0000 kkkk

PROIECT DE DIPLOM 2007

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+ (i) (ii) (iii) R0 (Z) Rd (Z) Rd (Z)

Operation:
Z Z + 1

Comment:

Z: Unchanged, R0 implied destination register Z: Unchanged Z: Post incremented

(i) (ii) (iii)

LPM LPM Rd, Z LPM Rd, Z+


16-bit Opcode:

Syntax:

Operands:

None, R0 implied 0 d 31 0 d 31

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

(i) (ii) (iii)

1001 1001 1001

0101 000d 000d

1100 dddd dddd

1000 0100 0101

Status Register (SREG) Boolean Formula:


I T H S V N Z C -

122

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

Exemplu:
clr ldi lpm r31 r30, $F0 ; Clear Z high byte ; Set Z low byte ; 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.
Operation: Comment:

(i) (ii) (iii) (iv) (v)

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

Erase program memory page Write program memory word Write temporary page buffer Write temporary page buffer to program memory Set boot loader lock bits
Program Counter:

(i)-(v)

SPM

None

PC PC + 1

16-bit Opcode:
1001 0101 1110 1000

Status Register (SREG) Boolean Formula:


I 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

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
mov ldi mov ldi out spm ldi out spm r1, r16 r16, $FF r0, r16 r16,$03 ; SPMCR, r16 ; ; r16,$01 ; SPMCR, r16 ; ;

PROIECT DE DIPLOM 2007

Enable SPM, erase page Erase page starting at $F000 Enable SPM, store to program memory 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:
(i) Rd I/O(A)

Syntax:
(i) IN Rd,A

Operands:
0 d 31, 0 A 63

Program Counter:
PC PC + 1

16-bit Opcode:
1011 0AAd dddd AAAA

Status Register (SREG) Boolean Formula:


I T H S V N Z C -

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 Descriere: nmagazineaz data din registrul Rr n registrul I/O (porturi, timere, etc). Operation: 124

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
(i) I/O(A) Rr

PROIECT DE DIPLOM 2007

Syntax:
(i) OUT A,Rr

Operands:
0 r 31, 0 A 63

Program Counter:
PC PC + 1

16-bit Opcode:
1011 1AAr

rrrr

AAAA

Status Register (SREG) Boolean Formula:


I T H S V N Z C -

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

PUSH - Push Register on Stack Descriere: Aceast instruciune salveaz coninutul registrului Rr n stiv. Pointerul stiv este post-decrementat cu 1 dup PUSH. Operation:
(i) STACK Rr

Syntax:
(i) PUSH Rr

Operands:
0 r 31

Program Counter:
PC PC + 1

Stack:
SP SP - 1

16-bit Opcode:
1001 001d dddd 1111

Status Register (SREG) Boolean Formula:


I T H S V N Z C -

Exemplu: call push push routine r14 r13 ; Call subroutine ; Save r14 on stack ; Save r13 on stack 125

routine

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

pop pop ret

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:
(i) POP Rd

Operands:
0 d 31

Program Counter:
PC PC + 1

Stack:
SP SP + 1

16-bit Opcode:
1001 000d dddd 1111

Status Register (SREG) Boolean Formula:


I T H S V N Z C -

Exemplu: routine

call push push pop pop ret

routine r14 r13 r13 r14

; Call subroutine ; Save r14 on stack ; Save r13 on stack ; 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. Operation:
(i) I/O(A,b) 1

Syntax:
(i) SBI A,b

Operands:
0 A 31, 0 b 7

Program Counter:
PC PC + 1

126

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

16-bit Opcode:
1001 1010 AAAA Abbb

Status Register (SREG) Boolean Formula:


I T H S V N Z C -

Exemplu:
out sbi in $1E, r0 $1C r1, $1D ; Write EEPROM address ; Set read bit EECR ; Read EEPROM data

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/O(A,b) 0

Syntax:
(i) CBI A,b

Operands:
0 A 31, 0 b 7

Program Counter:
PC PC + 1

16-bit Opcode:
1001 1000 AAAA Abbb

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

LSL - Logical Shift Left 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:
C

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

127

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

Syntax:
(i) LSR Rd

Operands:
0 d 31

Program Counter:
PC PC + 1

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


0000 11dd dddd dddd

Status Register (SREG) Boolean Formula:


I T -

Exemplu:
add Lsl r0, r4 R0 ; Add r4 to 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:
0 b7 - - - - - - - - - - - - - - - - - - b0 C

Syntax:
(i) LSR Rd

Operands:
0 d 31

Program Counter:
PC PC + 1

16-bit Opcode:
1001 010d dddd 0110

Status Register (SREG) Boolean Formula:


I T H -

N 0

Exemplu:
add Lsl r0, r4 R0 ; Add r4 to r0 ; Divide r0 by 2

ASR - Arithmetic Shift Right 128

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

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 C

Syntax:
(i) ASR Rd

Operands:
0 d 31

Program Counter:
PC PC + 1

16-bit Opcode:
1001 010d dddd 0101

Status Register (SREG) Boolean Formula:


I T H

Exemplu:
ldi asr ldi asr r16, $10 r16 R17, $FC r17 ; Load decimal 16 into r16 ; r16=r16/2 ; 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:
(i) SWAP Rd

Operands:
0 d 31

Program Counter:
PC PC + 1

16-bit Opcode:
1001 010d dddd 0010

Status Register (SREG) Boolean Formula: 129

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
I T H S V N Z C -

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

BSET - Bit Set in SREG Descriere: Seteaz un indicator din SREG. Operation:
(i) SREG(s) 1

Syntax:
(i) BSET s

Operands:
0 s 7

Program Counter:
PC PC + 1

16-bit Opcode:
1001 0100 0ssss 1000

Status Register (SREG) Boolean Formula:

Exemplu:
bset bset 6 7 ; Set T flag ; Enable interrupt

BCLR - Bit Clear in SREG Descriere: terge un indicator din SREG. Operation:
(i) SREG(s) 0

Syntax:
(i) BCLR s

Operands:
0 s 7

Program Counter:
PC PC + 1

16-bit Opcode: 130

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
1001 0100 1ssss 1000

PROIECT DE DIPLOM 2007

Status Register (SREG) Boolean Formula:

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:
(i) BST Rd,b

Operands:
0 d 31, 0 b 7

Program Counter:
PC PC + 1

16-bit Opcode:
1111 101d dddd 0bbb

Status Register (SREG) Boolean Formula:


I T H S V N Z C

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

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:
(i) Rd(b) T

131

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

Syntax:
(i) BLD Rd,b

Operands:
0 d 31, 0 b 7

Program Counter:
PC PC + 1

16 bit Opcode:
1111 100d dddd 0bbb

Status Register (SREG) Boolean Formula:


I T H S V N Z C

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

SEC - Set Carry Flag Descriere:


Seteaza indicatorul Carry (C) n SREG.

Operation:
(i) C 1

Syntax:
(i) SEC

Operands:
None

Program Counter:
PC PC + 1

16-bit Opcode:
1001 0100 0000 1000

Status Register (SREG) Boolean Formula:


I T H S V N Z C 1

Exemplu:
sec adc r0,r1 ; Set carry flag ; r0=r0+r1+1

CLC - Clear Carry Flag 132

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

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


(i) C 0

Syntax:
(i) CLC

Operands:
None

Program Counter:
PC PC + 1

16-bit Opcode:
1001 0100 1000 1000

Status Register (SREG) Boolean Formula:


I T H S V N Z C 0

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) N 1

Syntax:
(i) SEN

Operands:
None

Program Counter:
PC PC + 1

16-bit Opcode:
1001 0100 0010 1000

Status Register (SREG) Boolean Formula:


I T H S V N 1 Z C -

Exemplu: 133

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
add sen r2,r19 ; Add r19 to r2 ; Set negative flag

PROIECT DE DIPLOM 2007

CLN - Clear Negative Flag Descriere: terge indicatorul Negative (N) din SREG. Operation:
(i) N 0

Syntax:
(i) CLN

Operands:
None

Program Counter:
PC PC + 1

16-bit Opcode:
1001 0100 1010 1000

Status Register (SREG) Boolean Formula:


I T H S V N 0 Z C -

Exemplu:
add cln r2,r3 ; Add r3 to r2 ; Clear negative flag

SEZ - Set Zero Flag Descriere: Seteaz indicatorul Zero (Z) n SREG. Operation:
(i) Z 1

Syntax:
(i) SEZ

Operands:
None

Program Counter:
PC PC + 1

16-bit Opcode:
1001 0100 0001 1000

Status Register (SREG) and Boolean Formula: 134

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
I T H S V N Z 1 C -

PROIECT DE DIPLOM 2007

Exemplu:
add sez r2,r19 ; Add r19 to r2 ; Set zero flag

CLZ - Clear Zero Flag Descriere: terge indicatorul Zero (Z) din SREG. Operation:
(i) Z 0

Syntax:
(i) CLZ

Operands:
None

Program Counter:
PC PC + 1

16-bit Opcode:
1001 0100 1001 1000

Status Register (SREG) and Boolean Formula:


I T H S V N Z 0 C -

Exemplu:
add clz r2,r3 ; Add r3 to r2 ; Clear zero

SEI - Set Global Interrupt Flag Descriere: Seteaz indicatorul Global Interrupt (I) n SREG. Operation:
(i) I 1

Syntax:
(i) SEI

Operands:
None

Program Counter:
PC PC + 1

16-bit Opcode:
1001 0100 0111 1000

135

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

Status Register (SREG) Boolean Formula:


I 1 T H S V N Z C -

Exemplu:
cli in sei r13,$16 ; Disable interrupts ; Read Port B ; Enable interrupts

CLI - Clear Global Interrupt Flag Descriere: terge indicatorul Global Interrupt (I) din SREG. Operation:
(i) I 0

Syntax:
(i) CLI

Operands:
None

Program Counter:
PC PC + 1

16-bit Opcode:
1001 0100 1111 1000

Status Register (SREG) Boolean Formula:


I 0 T H S V N Z C -

Exemplu:
cli in sei ; Disable interrupts ; Read port B ; Enable interrupts

r11,$16

SES - Set Signed Flag Descriere: Seteaz indicatorul Signed (S) n SREG. Operation:
(i) S 1

136

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

Syntax:
(i) SES

Operands:
None

Program Counter:
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:
(i) S 0

Syntax:
(i) CLS

Operands:
None

Program Counter:
PC PC + 1

16-bit Opcode:
1001 0100 1100 1000

Status Register (SREG) and Boolean Formula:


I T H S 0 V N Z C -

Exemplu:
add cls r2,r3 ; Add r3 to r2 ; Clear signed flag

SEV - Set Overflow Flag Descriere: Seteaz indicatorul Overflow (V) n SREG.

137

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

Operation:
(i) V 1

Syntax:
(i) SEV

Operands:
None

Program Counter:
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 sev r2,r19 ; Add r19 to r2 ; Set overflow flag

CLV - Clear Overflow Flag Descriere: terge indicatorul Overflow (V) din SREG. Operation: (i) V 0 Syntax:
(i) CLV

Operands:
None

Program Counter:
PC PC + 1

16-bit Opcode:
1001 0100 1011 1000

Status Register (SREG) and Boolean Formula:


I T H S V 0 N Z C -

Exemplu:
clv r2,r3 ; Add r3 to r2 ; Clear overflow flag

SET - Set T Flag Descriere: Seteaz indicatorul T n SREG. Operation: 138

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
(i) T 1

PROIECT DE DIPLOM 2007

Syntax:
(i) SET

Operands:
None

Program Counter:
PC PC + 1

16-bit Opcode:
1001 0100 0110 1000

Status Register (SREG) Boolean Formula:


I T 1 H S V N Z C -

Exemplu: set ; Set T flag

CLT - Clear T Flag Descriere: terge indicatorul T din SREG. Operation:


(i) T 0

Syntax:
(i) CLT

Operands:
None

Program Counter:
PC PC + 1

16-bit Opcode:
1001 0100 1110 1000

Status Register (SREG) Boolean Formula:


I T 0 H S V N Z C -

Exemplu: clt

; Clear T flag

SEH - Set Half Carry Flag Descriere: Seteaz indicatorul Half Carry (H) n SREG. 139

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

Operation:
(i) (i) H 1 SEH

Syntax: 16-bit Opcode:


1001

Operands:
None

Program Counter:
PC PC + 1

0100

0101

1000

Status Register (SREG) and Boolean Formula:


I T H 1 S V N Z C -

Exemplu: seh

; Set Half Carry flag

CLH - Clear Half Carry Flag Descriere: terge indicatorul Half Carry (H) din SREG. Operation:
(i) H 0

Syntax:
(i) CLH

Operands:
None

Program Counter:
PC PC + 1

16-bit Opcode:
1001 0100 1101 1000

Status Register (SREG) Boolean Formula:


I T H 0 S V N Z C -

Exemplu: clh

; Clear the Half Carry flag

NOP - No Operation Descriere: Aceast instruciune consum o perioad de ceas. Operation: 140

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
(i) No

PROIECT DE DIPLOM 2007

Syntax:
(i) NOP

Operands:
None

Program Counter:
PC PC + 1

16-bit Opcode:
0000 0000 0000 0000

Status Register (SREG) Boolean Formula:


I T H S V -

N -

Z -

C -

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:
SLEEP

Operands:
None

Program Counter:
PC PC + 1

16-bit Opcode:
1001 0101 1000 1000

Status Register (SREG) Boolean Formula:


I 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

WDR - Watchdog Reset Descriere: Aceast instruciune reseteaz timer-ul Watchdog, ea trebuie executat ntr-un timp 141

Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi

PROIECT DE DIPLOM 2007

limitat dat de WD. A se consulta specificaiile hardware-ului timer-ului Watchdog. Operation:


(i) WD timer restart.

Syntax:
(i) WDR

Operands:
None

Program Counter:
PC PC + 1

16-bit Opcode:
1001 0101 1010 1000

Status Register (SREG) Boolean Formula:


I T H S V N Z C -

Exemplu: wdr ; Reset watchdog timer

142