Documente Academic
Documente Profesional
Documente Cultură
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
-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
Structura interna :
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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
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
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
-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
1.2.2 Registrul de stare Situaia registrului conine informaii despre ultima operaie aritmetica efectuat. Aceast informaie poate fi folosit pentru a alterna de la program la executarea unei alte operaii mai prioritar. Situaia registrului este actualizat dup fiecare execuie a unei operaii aritmetice, aa cum se specific n Setul de Instructiuni. Aceasta poate duce n multe cazuri la nefolosirea concreta a fiecrei instruciuni n parte ci a unui cod mai compact de instruciuni care efectueaz mai rapid operaia. Situaia registrului nu este automat stocat cnd apare o ntrerupere de rutin i mai apoi restaurat cnd se ntoarce la program. Acest lucru trebuie manipulat de program. AVR Status Register este definit ca:
Bitul 7-I Global Interrupt Enable (ntreruperi Globale Permise) GIE-trebuie s fie fixat astfel ncat ntreruperile s fie permise. Controlul ntreruperilor individuale se face dintr-un registru separat. Dac GIE este ters niciuna dintre ntreruperile individuale nu sunt permise independent. Bitul I este ters de hard dup ce s-a ivit o ntrerupere i este corectat de RETI pentru a permite accesul unei subsecvente antreruperi. Bitul I poate deasemenea sa fie fixat i ters de aplicaie cu ajutorul instruciunilor SEI i CLI aa cum sunt descrise n Setul de Instruciuni Bitul 6-T Bit Copy Storage (bitul copiere-depozitare stocare) Instructiunile bitului de copiere BLD (Bit LoaD-bit de incrcare) i BST (Bit Store-bit de stocare) folosete bitul T ca surs sau destinaie pentru bitul acionat. Un bit din registru poate fi copiat n T cu ajutorul instruciunilor BST, i un bit din T poate fi copiat n registru cu ajutorul instruciuni BLD. Bitul 5-H Half Carry Flag (Indicator de transport la jumatate) Acesta indic transportul la jumatate n cazul unor operaii aritmetice. Jumatate de transport este folosit n aritmetica BCD. Pentru informaii detaliate a se vedea Setul de Instruciumi. Bitul 4-S Sign Bit S=N V (bitul de semn) Bitul S este mereu exclusiv sau situat ntre indicatorul negativ N i indicatorul de rezervare V. A se vedea Setul de Instruciuni pentru informaii detaliate. Bitul 3-V Twos Complement Overflow Flag Indicatorul de rezervare susine operaii aritmetice. Bitul 2-N Negative Flag (indicatorul negativ) Indicatorul negativ indic un rezultat negativ n cadrul operaiilor aritmetice sau logice Bitul 1-Z Zero Flag (indicatorul de zero) 11
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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
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
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
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
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.
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
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
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
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.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
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
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.
20
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
Not: 1.Power-on Reset nu va funciona dect dac tensiunea de alimentare a fost sub valoarea VPOT (n scdere). 2. V BOT poate fi sub tensiunea minim nominal de operare n cazul anumitor componente. Pentru componente de acest fel, componenta este testat pana la V CC=VBOT n timpul procesului de producie. Acesta garanteaz faptul c Brown-out Reset se va produce nainte ca 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
1.4.3 Pornire Reset-Power-on Reset Un impuls Power-on Reset este generat printr-un circuit de detecie On-chip Nivelul de detecie este definit n tabelul 2. POR este activat de fiecare dat cnd V CC este sub nivelul de detecie. Circuitul POR poate fi folosit pentru a declana Start-up Reset, ct i pentru a detecta absena tensiunii de alimentare. Figura 3.13 Un circuit Power-on Reset(POR) asigur faptul c dispozitivul este resetat din Power-on. Atingnd tensiunea de prag Power-on Reset invoca numrtorul de ntrzieri, care determin ct timp dispozitivul este inut n RESET dup ce V CC urc. Semnalul de RESET este activat din nou, far nici o ntarziere, atunci cnd VCC descrete sub nivelul de detecie.
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
1.4.5 Monitorizarea nuvelului tensiunii de alimentare ATmega16 are ncorporate un circuit On-chip Brown-out Detection (BOD) pentru monitorizarea nivelului tensiunii VCC pe durata funcionarii prin compararea acesteia cu un nivel fix de declanare. Nivelul de declanare pentru BOD poate fi selectat prin contopirea BODLEVEL sa fie 2.7V (BODLEVEL neprogramat), sau 4.0V(BODLEVEL programat). Nivelul de declanare are un histerezis pentru a asigura o detecie Brown-out Detection liber. Histerezisul de pe nivelul de detecie ar trebui s fie interpretat ca fiind VBOT+= VBOT +VHYST/2 i VBOT- = VBOT VHYST/2 Circuitul BOD poate fi nchis/deschis prin fuziunea BODEN. Atunci cnd BOD este deschis (BODEN programat), si VCC descrete la o valoarea sub nivelul de declanare (V BOT+ in figura 3.16), Brown-out Reset este activat imediat. Atunci cnd V CC crete peste nivelul de declanare ( V BOT+ in figura 3.16), numrtorul ntrzierilor pornete MCU dup ce perioada de timp tTOUT a expirat. Circuitul BOD va detecta numai o cdere a V CC n cazul n care tensiunea rmne sub nivelul de declanare pentru un timp mai mare tBOD prezentat in tabelul 2.
23
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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
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
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
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
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
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
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
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
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.
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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:
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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
.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
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
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.
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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
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 :
39
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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
Tabelul 11
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
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
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
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
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
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
Tabelul 19
47
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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
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
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
50
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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
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
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
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
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
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
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.
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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
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
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
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
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
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
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
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
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
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
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.
68
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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
F. Se repet B prin intermediul E ca ntregul buffer s fie umplut sau nainte ca datele din pagini s fie activate. n timp ce adresele biilor de pe frontul superior adreseaz cuvintele din pagin,adresele biilor de pe frontul superior adreseaz paginile din Flash.Dac n pagin se gsesc cuvinte cu adrese pe mai puin de 8 bii, adresa bitului cel mai semnificant de frontul inferior este utilizat la scrierea n pagina. G. Adresarea bitului de pe frontul nalt. 1. Setarea XA1, XA0 n 00. Se activeaz adresele. 2. Seteaz BS1 n 1. Se selecteaz adresa superioar.. 3. Seteaz DATA = Address high byte ($00 - $FF). 4. Se transmite ctre XTAL1 un puls pozitiv. Se activeaz adresa bitului de pe frontul superior. H. Programarea paginii 1. Se seteaz BS1 = 0 2. Se transmite ctre WR un puls negativ. Se pornete programarea datelor n pagin. RDY/BSY trece sus. 3. Se ateapt pn cnd RDY/BSY trece sus .I. Se repet B peste H nainte ca ntreaga memorie Flash s fie programat sau nainte ca toate datele s fie programate. J. Final de program. 1. 1. Seteaz XA1, XA0 n 10. Se activeaz comanda. 2. Seteaz DATA n 0000 0000. Se activeaz comanda Nici o Operaie. 3. Se transmite ctre XTAL1 un puls pozitiv. Se activeaz comanda, i se reseteaz scrierea intern a semnalelor. Fig. 3.39
70
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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
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
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
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
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
Syntax:
(i) ADD Rd,Rr
Operands:
0 d 31, 0 r 31
Program Counter:
PC PC + 1
16-bit Opcode:
0000 11rd dddd rrrr
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
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
I T
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
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
77
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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
r22,$11 noteq
; Subtract $11 from r22 ; Branch if r22<>$11 ; Branch destination (do nothing)
SBC - Subtract with Carry Descriere: Scade 2 registre i pe Carry i pune rezultatul n registrul destinaie Rd. Operation:
(i) Rd Rd - Rr - C
Syntax:
Operands: 78
Program Counter:
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
(i) SBC Rd,Rr 0 d 31, 0 r 31
16-bit Opcode:
0000 10rd dddd rrrr
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:
SBCI Rd,K
Operands:
16 d 31, 0 K 255
Program Counter:
PC PC + 1
16-bit Opcode:
0100 KKKK dddd KKKK
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
79
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
Syntax:
(i) SBIW Rd,K
Operands:
d {24,26,28,30}, 0 K 63
Program Counter:
PC PC + 1
16-bit Opcode:
1001 0111 KKdd KKKK
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
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. 80
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
Operation:
(i) Rd Rd K
Syntax:
(i) ANDI Rd,K
Operands:
16 d 31, 0 K 255
Program Counter:
PC PC + 1
16-bit Opcode:
0111 KKKK dddd KKKK
Exemplu: andi r17,$0F ; Clear upper nibble of r17 andi r18,$10 ; Isolate bit 4 in r18 andi r19,$AA ; Clear odd bits of r19 OR - Logical OR Descriere: Face SAU logic ntre coninutul registrelor Rd i Rr i plaseaz rezultatul n registrul destinaie Rd. Operation:
(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
V 0
C -
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) 81
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
ORI - Logical OR with Immediate Descriere: 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
16 d 31, 0
Operands: k 255
Program Counter:
PC PC +1
16-bit Opcode:
0110 KKKK dddd KKKK
V 0
C -
; ;
EOR Exclusive OR Descriere: Face SAU Exclusiv ntre coninutul registrelor Rd i Rr i pune rezultatul n registrul final Rd. Operation:
(i) Rd Rd Rr
Syntax:
(i) EOR Rd,Rr
Operands:
0 d 31, 0 r 31
Program Counter:
PC PC + 1
16-bit Opcode:
0010 01rd dddd rrrr
V 0
C -
Exemplu: eor r4,r4 ; Clear r4 eor r0,r22 ; Bitwise exclusive or between r0 and r22 COM - Ones Complement 82
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
Syntax:
(i) COM Rd
Operands:
0 d 31 010d dddd 0000
Program Counter:
PC PC + 1
16-bit Opcode:
1001
V 0
C 1
r4 zero
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
Exemplu: sub brpl r11,r0 positive ; Subtract r0 from r11 ; Branch if result positive 83
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
r11
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
V 0
C -
r16, 3 ; Set bits 0 and 1 in r16 r17, $F0 ; Set 4 MSB in r17
CBR - Clear Bits in Register Descriere: terge biii specificai n registrul Rd. Face (de fapt) un I logic ntre coninutul registrului Rd i complementul fa de 1 al lui K. Rezultatul va fi pus n registrul Rd. Operation:
(i) Rd Rd ($FF - K)
(i)
V 0
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
INC - Increment 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
C -
; 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:
DEC Rd
Operands:
0 d 31
Program Counter:
PC PC + 1
16-bit Opcode:
1001 010d dddd 1010
C -
85
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
Exemplu: ldi r17,$10 loop: add r1,r2 dec r17 brne loop nop
; Load constant in r17 ; 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
V 0
C -
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) Rd Rd Rd
(i)
Operands: 0 d 31
86
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
0010 01dd dddd dddd
N 0
Z 1
C -
Exemlpu: clr r18 ; clear r18 loop inc r18 ; increase r18 cpi r18,$50 ; Compare r18 to $50 brne loop SER - Set all bits in Register Descriere: ncarc $FF direct n registrul Rd (toi biii vor fi setai n 1). Operation:
(i) Rd $FF
Syntax:
(i) 1110 SER Rd
Operands:
16 d 31 dddd 1111
Program Counter:
PC PC + 1
16-bit Opcode:
1111
N -
Z -
C -
r16 ; Clear r16 r17 ; Set r17 $18, r16 ; Write zeros to Port B ; Delay (do nothing) $18, r17 ; Write ones to Port B
87
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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 Multiplicand 8 Rr R1 R0 Product Low 16
Multiplier 8
Product High
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
N -
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
88
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
N -
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
N -
Multiply signed r21 with unsigned r20, signed result Copy result back in r21:r20
FMUL - Fractional Multiply Unsigned Descriere: Aceast instruciune face nmulirea fr semn 8-bit 8-bit 16-bit i execut o operaie de deplasare cu 1 bit la stanga.
Rd Rr R1 R0
89
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi Multiplicand 8 Multiplier 8 Product High 16
Att denmulitul Rd ct i nmulitorul Rr sunt dou registre care conin numere fracionare fr semn. Operation:
(i) R1:R0 Rd Rr (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 -
; 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
90
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
-
; 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 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
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
91
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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
16-bit Opcode:
1100 kkkk kkkk kkkk
N -
Z -
C -
; Compare r16 to $42 ; Branch if r16 <> $42 ; Unconditional branch ; Add r17 to r16 ; Increment r16 ; Destination for rjmp (do nothing)
IJMP - Indirect Jump Descriere: Salt indirect la adresa indicat de ctre registrul pointer Z n registrul fiier. Registrul pointer Z este de 16 bii i permite apelarea unei subrutine inclus n primele 64k cuvinte din memoria programului. Operation:
(i) (ii) PC Z(15:0) Devices with 16 bits PC, 128k bytes program memory maximum PC(15:0) Z(15:0) Devices with 22 bits PC, 8M bytes program memory maximum PC(21:16) 0
Syntax:
(i),(ii) IJMP
Operands:
None
Program Counter:
See Operation
Stack:
Not Affected
16-bit Opcode:
1001 0100 0000 1001
92
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
-
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
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 Devices with 16 bits PC,128k bytes program memory maximum Devices with 22 bits PC,4M bytes program memory maximum
93
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
Syntax: Operands: Program Counter:
(i) (ii)
RCALL k RCALL k
PC PC + k + 1 PC PC + k + 1
16-bit Opcode:
1101 kkkk kkkk kkkk
N -
Z -
C -
Exemplu: rcall routine: push pop ret routine ; Call subroutine r14 r14 ; Save r14 on the stack
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
94
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
r30,r0
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. 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 SP SP-2, (2 bytes, 16 bits) STACK PC+2 SP SP-3 (3 bytes, 22 bits)
32-bit Opcode:
1001 kkkk 010k kkkk kkkk kkkk 111k kkkk
Exemplu: mov call nop check: cpi breq ret error: rjmp
; 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: 95
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
(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
N -
Z -
C -
Exemplu: call routine: push pop ret routine ; r14 r14 Call subroutine ; Save r14 on the stack
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
N -
Z -
C -
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
pop r0 reti
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:
(i) If Rd = Rr then PC PC + 2 (or 3) else PC PC + 1
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
; ; ; ;
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
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
I T -
; Compare r4 with r19 ; Branch if r4 <> r19 ; Branch destination (do nothing)
CPC-Compare with Carry Descriere: Aceast instruciune face o comparare ntre registrele Rd i Rr i deasemenea ia n considerare valoarea curent din Carry. Niciunul din registre nu este afectat. Sunt afectai toi indicatorii de condiii. Operation:
(i) Rd - Rr - C
Syntax:
(i) CPC Rd,Rr
Operands:
0 d 31, 0 r 31
Program Counter:
PC PC + 1
16-bit Opcode:
0000 01rd dddd rrrr
Exemplu: ; Compare r3:r2 with r1:r0 cp r2,r0 ; Compare low byte cpc r3,r1 ; Compare high byte brne noteq ; Branch if not equal noteq: nop ; Branch destination (do nothing) CPI - Compare with Immediate Descriere: Aceast instruciune face o comparaie ntre registrul Rd i o constant. Registrul nu este schimbat. Sunt afectai toi indicatorii de condiii. Operation:
(i) Rd - K
Syntax:
Operands: 98
Program Counter:
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
(i) CPI Rd,K 16 d 31, 0 K 255
16-bit Opcode:
0011 KKKK dddd KKKK
r19,3 error
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
; ; ; ;
Subtract r1 from r0 Skip if bit 7 in r0 cleared Only executed if bit 7 in r0 not cleared Continue (do nothing)
99
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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:
1111 111r rrrr 0bbb
N -
Z -
C -
Exemplu:
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
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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:
(i) If I/O(A,b) = 1 then PC PC + 2 (or 3) else PC PC + 1
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
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
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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 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
Exemplu: cpi r20,5 ; Compare r20 to the value 5 brbc 1,noteq ; Branch if zero flag cleared ... noteq:nop ; Branch destination (do nothing) BREQ - Branch if Equal Descriere: Salt condiionat relativ. Testeaz Zero flag (indicatorul Z) ; daca acesta e 1 logic PC crete cu k+1 altfel crete normal cu 1. Indicatorul Z este 1 dac Rd=Rr , n registre fiind numere cu sau far semn. Saltul se face cu +k sau k. Parametru k este un deplasament fa de valoarea din PC i este reprezentat n complement fa de 2. Operation:
(i) If Rd = Rr (Z = 1) then PC PC + k + 1, else PC PC + 1
Syntax:
Operands: 102
Program Counter:
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
(i) BREQ k -64 k +63
16-bit Opcode:
1111 00kk kkkk k001
Exemplu: cp r1,r0 ; Compare registers r1 and r0 breq equal ; Branch if registers equal equal: nop ; Branch destination (do nothing) BRNE - Branch if Not Equal Descriere: Salt condiionat relativ. Testeaz indicatorul Z; dac acesta e 0 logic, PC crete cu k+1 altfel crete normal cu 1. Indicatorul Z este 0 dac Rd Rr , n registre fiind numere cu sau far semn. Saltul se face cu +k sau k. Parametru k este un deplasament fa de valoarea din PC i este reprezentat n complement fa de 2. Operation:
(i) If Rd Rr (Z = 0) then PC PC + k + 1, else PC PC + 1
Syntax:
(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
; ; ; ; ;
Clear r27 Increase r27 compare r27 to 5 Branch if r27 <> 5 Loop exit (do nothing) 103
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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:
(i) BRCS 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
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
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
1111 01kk kkkk k000
Exemplu: add r22,r23 ; Add r23 to r22 brcc nocarry ; Branch if carry cleared nocarry: nop ; Branch destination (do nothing) BRSH - Branch if Same or Higher (Unsigned) Descriere: Salt condiionat relativ. Testeaz indicatorul Carry; dac acesta este 0 logic, PC crete cu k+1 altfel crete normal cu 1. Indicatorul C este 0 dac Rd Rr , n registre fiind numere cu sau far semn. Saltul se face cu +k sau k. Parametru k este un deplasament fa de valoarea din PC i este reprezentat n complement fa de 2. Operation:
(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
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: 105
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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
V N Z C
16-bit Opcode:
1111
I T H
00kk
S
kkkk
Exemplu: eor r19,r19 loop: inc r19 cpi r19,$10 brlo loop nop
; Clear r19 ; Increase r19 ; Compare r19 with $10 ; Branch if r19 < $10 (unsigned) ; Exit from loop (do nothing)
BRMI - Branch if Minus Descriere: Salt condiionat relativ. Testeaz indicatorul N; dac acesta e 1 logic, PC crete cu k+1 altfel crete normal cu 1. Saltul se face cu +k sau k. Parametru k este un deplasament fa de valoarea din PC i este reprezentat n complement fa de 2. Operation:
(i) If N = 1 then PC PC + k + 1, else PC PC + 1
Syntax:
(i) 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
106
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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. 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
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
107
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
; Compare registers r11 and r12 ; Branch if r11 r12 (signed) ; Branch destination (do nothing)
BRLT - Branch if Less Than (Signed) Descriere: Salt condiionat relativ. Testeaz bitul de semn S; dac acesta e 1 logic, PC crete cu k+1 altfel crete normal cu 1. Indicatorul S este 1 daca Rd < Rr , n registre fiind numere cu sau far semn. Saltul se face cu +k sau k. Parametru k este un deplasament fa de valoarea din PC i este reprezentat n complement fa de 2. Operation:
(i) If Rd < Rr (N V = 1) then PC PC + k + 1, else PC PC + 1
Syntax:
(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
r16,r1 ; Compare r16 to r1 less ; Branch if r16 < r1 (signed) ; Branch destination (do nothing)
108
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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
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
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
hclear: nop
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 k110
16-bit Opcode:
1111 00kk kkkk
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
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
I T H S V N Z C
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. 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
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. 111
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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
Exemplu: add r3,r4 ; Add r4 to r3 brvc noover ; Branch if no overflow noover: nop ; Branch destination (do nothing)
MOV - Copy Register Descriere: Aceast instruciune copiaz un registru n altul. Registrul surs, Rr, rmne neschimbat n timp ce registrul destinaie, Rd, este incrcat cu o copie a lui Rr. Operation:
(i) Rd Rd + Rr + C
Syntax:
(i) MOV Rd,Rr
Operands:
0 d 31, 0 r 31
Program Counter:
PC PC + 1
16-bit Opcode:
0010 11rd dddd rrrr
r16,r0 ; Copy r0 to r16 check ; Call subroutine r16,$11 ; Compare r16 to $11
112
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
ret
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:
0000 0001 dddd rrrr
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
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
1110 kkkk dddd kkkk
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 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) XX-1 XX+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) 1001 000d dddd 1100
114
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
(ii) (iii) 1001 1001 000d 000d dddd dddd 1101 1110
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)
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) YY-1 YY+1 Rd (Y)
Comment:
Y: Unchanged Y: Post incremented Y: Pre decremented
Syntax:
(i) LD Rd, Y
Operands:
0 d 31
Program Counter:
PC PC + 1
115
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
(ii) (iii) (iiii) LD Rd, Y+ LD Rd, -Y LDD Rd, Y+q 0 d 31 0 d 31 0 d 31, 0 q 63
16-bit Opcode:
(i) (ii) (iii) (iiii) 1000 1001 1001 10q0 000d 000d 000d qq0d dddd dddd dddd dddd 1000 1001 1010 1qqq
r29 r28, $60 r0, Y+ r1, Y r28, $63 r2, Y r3, -Y r4, Y+2
; Clear Y high byte ; 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
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: 116
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
Operation:
(i) (ii) (iii) (iiii) Rd (Z) Rd (Z) ZZ-1 Rd (Z+q) ZZ+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) (iii) (iiii) 1000 1001 1001 10q0 000d 000d 000d qq0d dddd dddd dddd dddd 1000 1001 1010 0qqq
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
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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 kkkk 000d kkkk dddd kkkk 0000 kkkk
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 118
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
X X+1 (X) Rr
Operands:
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
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 119
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
Y Y+1 (Y) Rr
Operands:
0 r 31 0 r 31 0 r 31 0 r 31, 0 q 63
PC PC + 1 PC PC + 1 PC PC + 1 PC PC + 1
16-bit Opcode:
(i) (ii) (iii) (iiii) 1000 1001 1001 10q0 001r 001r 001r qq1r rrrr rrrr rrrr rrrr 1000 1001 1010 1qqq
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. 120
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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:
Z Z+1 (Z) Rr
Operands:
0 r 31 0 r 31 0 r 31 0 r 31, 0 q 63
PC PC + 1 PC PC + 1 PC PC + 1 PC PC + 1
16-bit Opcode:
(i) (ii) (iii) (iiii) 1000 1001 1001 10q0 001r 001r 001r qq1r rrrr rrrr rrrr rrrr 0000 0001 0010 0qqq
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
121
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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:
1001 kkkk 001d kkkk dddd kkkk 0000 kkkk
Exemplu: lds add sts r2,$FF00 ; Load r2 with the contents of data space location r2,r1 ; add r1 to r2 $FF00,r2 ; Write back
LPM - Load Program Memory Descriere: ncarc un octet adresat cu registrul pointer Z n registrul destinaie Rd. Aceast instruciune este caracterizat 100% de spaiu efectiv iniializat constant sau determin constant locaia instruciunii urmtoare. Memoria program este organizat n cuvinte de 16 bii i cel mai puin semnificativ bit al pointerului Z selecteaz octetul inferior (0) sau octetul superior (1). Aceast instruciune poate adresa 64 K octei (32K cuvinte) din memoria program. Registrul pointerului Z poate rmne neschimbat de operaie sau poate fi incrementat. Incrementarea nu se aplic registrului de memorie RAMPZ. Rezultatul acestei combinatii este nedefinit:
LPM r30, Z+ LPM r31, Z+
Operation: 122
Comment:
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
(i) (ii) (iii) R0 (Z) Rd (Z) Rd (Z)
ZZ+1
Syntax:
Operands:
None, R0 implied 0 d 31 0 d 31
Program Counter:
PC PC + 1 PC PC + 1 PC PC + 1
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:
(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:
123
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
(i)-(v) SPM None
16-bit Opcode:
1001 0101 1110 1000
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 mov r1, r16 ldi r16, $FF mov r0, r16 ldi r16,$03 ; Enable SPM, erase page out SPMCR, r16 ; spm ; Erase page starting at $F000 ldi r16,$01 ; Enable SPM, store to program memory out SPMCR, r16 ; spm ; 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
124
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
; 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:
(i) I/O(A) Rr
Syntax:
(i) OUT A,Rr
Operands:
0 r 31, 0 A 63
Program Counter:
PC PC + 1
16-bit Opcode:
1011 1AAr
rrrr
AAAA
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
125
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
16-bit Opcode:
1001 001d dddd 1111
Exemplu: 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
routine
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
Exemplu: routine
; Call subroutine ; Save r14 on stack ; Save r13 on stack ; Restore r13 126
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
pop ret
r14
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
16-bit Opcode:
1001 1010 AAAA Abbb
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:
127
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
1001 1000 AAAA Abbb
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
Syntax:
(i) LSR Rd
Operands:
0 d 31
Program Counter:
PC PC + 1
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:
Operands: 128
Program Counter:
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
(i) LSR Rd 0 d 31
16-bit Opcode:
1001 010d dddd 0110
N 0
Exemplu:
add Lsl r0, r4 R0 ; Add r4 to r0 ; Divide r0 by 2
ASR - Arithmetic Shift Right Descriere: Deplaseaz toi biii din Rd cu un spaiu la dreapta. Bitul 7 este meninut constant. Bitul 0 este ncrcat n indicatorul C al SREG. Aceast operaie mparte valoarea cu semn la 2 fr a schimba semnul. Indicatorul de transport este folosit pentru a rotunji rezultatul. Operation:
b7-------------------b0 C
Syntax:
(i) ASR Rd
Operands:
0 d 31
Program Counter:
PC PC + 1
16-bit Opcode:
1001 010d dddd 0101
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
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
Syntax:
(i) SWAP Rd
Operands:
0 d 31
Program Counter:
PC PC + 1
16-bit Opcode:
1001 010d dddd 0010
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:
0s7
Program Counter:
PC PC + 1
16-bit Opcode:
1001 0100 0ssss 1000
130
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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:
0s7
Program Counter:
PC PC + 1
16-bit Opcode:
1001 0100 1ssss 1000
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
131
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
-
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
Syntax:
(i) BLD Rd,b
Operands:
0 d 31, 0 b 7
Program Counter:
PC PC + 1
16 bit Opcode:
1111 100d dddd 0bbb
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
Operation:
(i) C1
Syntax:
Operands: 132
Program Counter:
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
(i) SEC None
16-bit Opcode:
1001 0100 0000 1000
Exemplu:
sec adc r0,r1 ; Set carry flag ; r0=r0+r1+1
CLC - Clear Carry Flag Descriere: terge indicatorul Carry (C) din SREG. Operation:
(i) C0
Syntax:
(i) CLC
Operands:
None
Program Counter:
PC PC + 1
16-bit Opcode:
1001 0100 1000 1000
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) N1
133
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
Syntax:
(i) SEN
Operands:
None
Program Counter:
PC PC + 1
16-bit Opcode:
1001 0100 0010 1000
Exemplu:
add sen r2,r19 ; Add r19 to r2 ; Set negative flag
CLN - Clear Negative Flag Descriere: terge indicatorul Negative (N) din SREG. Operation:
(i) N0
Syntax:
(i) CLN
Operands:
None
Program Counter:
PC PC + 1
16-bit Opcode:
1001 0100 1010 1000
Exemplu:
add cln r2,r3 ; Add r3 to r2 ; Clear negative flag
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
Syntax:
(i) SEZ
Operands:
None
Program Counter:
PC PC + 1
16-bit Opcode:
1001 0100 0001 1000
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) Z0
Syntax:
(i) CLZ
Operands:
None
Program Counter:
PC PC + 1
16-bit Opcode:
1001 0100 1001 1000
Exemplu:
add r2,r3 ; Add r3 to r2
135
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
clz ; Clear zero
SEI - Set Global Interrupt Flag Descriere: Seteaz indicatorul Global Interrupt (I) n SREG. Operation:
(i) I1
Syntax:
(i) SEI
Operands:
None
Program Counter:
PC PC + 1
16-bit Opcode:
1001 0100 0111 1000
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) I0
Syntax:
(i) CLI
Operands:
None
Program Counter:
PC PC + 1
16-bit Opcode:
1001 0100 1111 1000
136
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
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) S1
Syntax:
(i) SES
Operands:
None
Program Counter:
PC PC + 1
16-bit Opcode:
1001 0100 0100 1000
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) S0
Syntax:
(i) CLS
Operands:
None
Program Counter:
PC PC + 1
16-bit Opcode:
1001 0100 1100 1000
137
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
Exemplu:
add cls r2,r3 ; Add r3 to r2 ; Clear signed flag
SEV - Set Overflow Flag Descriere: Seteaz indicatorul Overflow (V) n SREG. Operation:
(i) V1
Syntax:
(i) SEV
Operands:
None
Program Counter:
PC PC + 1
16-bit Opcode:
1001 0100 0011 1000
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) V0
Syntax:
(i) CLV
Operands:
None
Program Counter:
PC PC + 1
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
1001 0100 1011 1000
Exemplu:
clv r2,r3 ; Add r3 to r2 ; Clear overflow flag
Syntax:
(i) SET
Operands:
None
Program Counter:
PC PC + 1
16-bit Opcode:
1001 0100 0110 1000
Syntax:
(i) CLT
Operands:
None
Program Counter:
PC PC + 1
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
1001 0100 1110 1000
Exemplu: clt
; Clear T flag
SEH - Set Half Carry Flag Descriere: Seteaz indicatorul Half Carry (H) n SREG. Operation:
(i) (i) H1
Syntax:
SEH
Operands:
None
Program Counter:
PC PC + 1
16-bit Opcode:
1001 0100 0101 1000
Exemplu: seh
CLH - Clear Half Carry Flag Descriere: terge indicatorul Half Carry (H) din SREG. Operation:
(i) H0
Syntax:
(i) CLH
Operands:
None
Program Counter:
PC PC + 1
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
1001 0100 1101 1000
Exemplu: clh
Syntax:
(i) NOP
Operands:
None
Program Counter:
PC PC + 1
16-bit Opcode:
0000 0000 0000 0000
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
141
Universitatea POLITEHICA din Bucuresti Facultatea TRANSPORTURI Catedra Telecomenzi i Electronic n Transporturi
16-bit Opcode:
1001 0101 1000 1000
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 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
142