Autor: Robert G. Fries

 

Sa engleskog preveli: Viktor Velisavljev i Jelena Gavanski


Atmel Flash RISC Mikrokontroleri


Verovali ili ne, mozete imati flash i RISC sve spakovano u 8-bitnu arhitekturu pin kompatibilnu sa 8051. Kao od Boga poslato? Evo prikaza jednog inžinjera.


Bolje, Brze, Manje, Jeftinije, Lakše ili Ispadaš. Iako inžinjeri teže za necim novim i boljim, teško je uhvatiti se u koštac sa novim mikrokontrolerima pogotovo kada je rok za završetak projekta juce prošao. Nedavno sam se susreo sa problemom gde mi standardni 8051 nije bio dovoljan. Rešenje sam našao u Atmelovoj flash, 8-bitnoj RISC arhitekturi zvanoj AVR.
U ovom pregledu AVR arhitekture fokuširaću se na ono što je jedinstveno za ovu arhitekturu. Prvo ću diskutovati ovu familiju uopšteno.


Nešto zajedničko


Svi smo culi reklame za flash memoriju koje isticu njene prednosti u odnosu na OTP-EPROM. I zaista je tako, što moze da se vidi po rastucem broju kupaca mikrokontrolera sa flash memorijom.
Kao i Atmelovi 8051 kompatibilni mikrokontroleri i mikrokontroleri iz porodice AVR sadrze flash memoriju. AVR je pin kompatibilan sa Atmelovom 51 serijom (sa izuzetkom reset pina koji je aktivan na nizak nivo). Svi AVR mikrokontroleri imaju integrisan EEPROM za promenljive. Flash i EEPROM se mogu programirati dok se nalaze na razvojnoj ploci preko sinhronog serijskog interfejsa. Ovo vazi za sve mikrokontrolere iz serije a ne samo za najbolje, kako je inace obicaj kod proizvodaca. Takode, postoji zaštita neovlaštenog citanja memorije preko lock bita.
Ostale prednosti vezane za sve AVR cipove jesu odvojeni interapt vektor za svaki interapt izvor, analogni komparator koji je takode sam izvor interapta, barem jedan eksterni interapt pin, barem jedan brojac-tajmer visoke rezolucije, watchdog tajmer (programabilan od 16ms do 2s) i 32 odvojena 8-bitna akumulatora koji se mogu koristiti u parovima sa 16-bitnim operacijama.


Nedostaci


Ne volim da pišem o ogranicenjima na samom pocetku clanka iz straha da bi to odbilo citaoca. U ovom clanku je to neophodno jer cemo se kasnije na ta ogranicenja osvrtati.
Jedna beznacajna mana svih clanova familije je da samo gornja polovina akumulatora (R16 - R31) podrzava "immediate" operacije koje sadrze konstante. Razlog za ovo ogranicenje nije ocigledan. Mozda je to kompromis koji je morao biti napravljen da se ostavi prostora za druge vazne operacije.
Neobicno je da nema ADD IMMEDIATE naredbe. Mozete postici istu stvar preko makroa koji zamenjuje SUBI instrukciju bez razlike u velicini koda. Morate biti pazljivi sa flegovima zato što oduzimanje invertuje Carry i Half-carry od onoga što bi se normalno ocekivalo od ADD instrukcije. Medutim, postoji prava ADD instrukcija koja sabira sadrzaje bilo koja dva registra i deluje na flegove na normalan nacin za ADD instrukciju.


Više instrukcija, više MIPS-ova


AVR koristi, takozvanu, naprednu RISC (Enhanced RISC) arhitekturu. Ona je napredna u smislu da ima od 89 do 120 razlicitih instrukcija, mnogo više nego što bi ocekivali od tradicionalnog RISCa. U duhu RISCa ova arhitektura izvršava instrukciju u jednom taktu, što joj omogucava dostizanje 16 MIPS sa kristalom od 16MHz. U tipicnim primenama prosecan broj MIPS ide od 80% do 90% frekvencije, uglavnom zbog instrukcija grananja.
Vecina proizvodaca tvrdi da im se instrukcije izvršavaju u jednom ciklusu. Medutim definicija ciklusa se razlikuje od proizvodaca do proizvodaca. Obicno treba duboko kopati da bi se pronašlo da se ciklus zapravo sastoji od 4, 6 ili više perioda oscilatora. Neki idu cak toliko daleko da koriste rec clock u znacenju CPU cycle dalje povecavajuci zabunu.


Kompaktniji kod?


Nagovestio sam da se sa AVR moze dobiti kraci kod. Pitate se: uporedujuci sa cim? To je pravo pitanje, a evo i odgovora: zavisi. Na primer, 8051 ima operacije nad pojedinacnim bitima. Ukoliko one cine veliki deo koda, mozda necete dobiti manji kod sa AVR. Medutim, 99.9% primena sadrze mnogo više drugih operacija.
Velik broj instrukcija znaci manje linija koda za implementaciju date funkcije. Sledeca karakteristika koja omogucava visoku gustinu koda je korišcenje arhitekture bazirane na registrima. Ona omogucava operacije nad podacima u registrima bez njihovog premeštanja u i iz akumulatora.
Sposobnost grananja na osnovu bilo kog bita u statusnom registru, takode pomaze izradi manjeg koda. Postoji 16 razlicitih uslova grananja. Neki od aritmetickih uslova su bazirani na više bita u statusnom registru. Povrh svega je mogucnost da se preskoci sledeca instrukcija na osnovu stanja bilo kog bita unutar 32 registra ili unutar donje 32 adrese I/O prostora. Zahvaljujuci tome moguce je direktno proveriti stanja portova ili stanja flegova. Postoji mogucnost specijalnog preskoka ukoliko je sadrzaj bilo koja dva registra jednak (CPSE).
Poboljšana gustina koda moze vam uštedeti novac jer dozvoljava da upotrebite manju komponentu. Medutim, na osnovu mog iskustva to obicno znaci dodavanje novih opcija ili ostavljanje prostora za buduci razvoj. Koliko je stvarno poboljšanje? Projektanti AVRa su konvertovali najefikasnije kodove napisane za razne mikrokontrolere. Oni tvrde da su dobili 10 - 30% manji kod bez obzira na stvarni format memorijske reci (na primer, 1K*8 ili 512*16). Manji kod se brze izvršava (za manje instrukcija treba manje ciklusa takta).
Sadašnji AVR mikrokontroleri ne podrzavaju spoljnu programsku memoriju jer bi u tom slucaju bio potreban veliki broj pinova.


Matematika


Skoro sve primene zahtevaju neku matematiku. Sve logicke operacije (AND, ANDI, OR, ORI, EOR, COM) se izvršavaju u jednom taktu i rade sa bilo koja dva registra ili registrom i konstantom. Takode, postavljanje registara na nulu ili jedinice izvršava se u jednom taktu. Bilo bi lepo da postoji immediate mode ekskluzivno ili (EORI) ali na zalost to nije slucaj. Umesto toga treba staviti konstantu u bilo koji registar pa zatim uraditi EOR izmedu dva registra.
Osmobitna aritmetika nije problem za vecinu procesora, iako neki nemaju ni oduzimanje ni oduzimanje sa carry flegom. AVR ima sve to, kao i nedestruktivne instrukcije poredenja. Kod 16-bitne i 24-bitne matematike AVR dolazi do izrazaja. Trik je u tzv. Zero-flag propagaciji (ZFP).
ZFP postavlja Z fleg na nulu ukoliko je rezultat poredenja razlicito; inace fleg se ne menja. Ovo se lako koristi u praksi. Sledeca sekvenca poredi dva 32-bitna broja u 4 takta:

cp r0,r4
cpc r1,r5
cpc r2,r6
cpc r3,r7
Brojevi mogu biti bilo oznaceni bilo neoznaceni. Na kraju poredenja mogu se koristiti sledeci flegovi: vece od, manje od, vece ili jednako, manje ili jednako, jednako. Na procesorima bez ZFP za ovo bi trebalo mnogo više linija koda.
Kao sledece posmatrajmo mnogo jednostavniji zadatak: poredenje dva oznacena 16-bitna broja. Kada ne bi bilo ZFP trebalo bi uraditi sledece tri stvari: provera da li su viši bajtovi razliciti, provera da li su viši bajtovi jednaki dok su nizi bajtovi razliciti i na kraju provera da li su nizi i viši bajtovi jednaki. Rezultat poredenja vece ili jednako na poštovanom 8051 zahteva 9 bajtova koda uz pretpostavku da su vrednosti koje poredimo vec smeštene u registre R0-R3. AVRu je za tako nešto potrebno samo 4 bajta (dve reci) i dva takta. To je 56% smanjenja u velicini koda.
ZFP se takode koristi kod oduzimanja (SBC, SBI). Razlog tome je verovatno brojac petlje gde se brojac obicno smanjuje do nule. Cudno je što sabiranje medu registrima (ADD) ne koristi ZFP tako da Z fleg nece pravilno ukazati da je rezultat nula ukoliko vršimo sabiranje 16-bitnih i vecih brojeva.


Prednosti u slucaju baterijskog napajanja


Smanjivanje potrošnje je moguce drasticnim snizavanjem frekvencije takta oscilatora. Na primer, tamo gde se na 8051 zahteva rad sa 12 MHz kristalom kada bi upotrebili AVR bio bi dovoljan kristal od 1 MHz (potrošnja CMOS kola je srazmerna frekvenciji takta). Snizavanjem frekvencije takta smanjuje se i RF zracenje.
AVR je ekspert za rad pri niskim naponima napajanja. Standardno dostize 4 MIPS na samo 2.7V. Poredenja radi, da bi isto postigli i sa 8051 potreban bi nam bio kristal od 48MHz! Na osnovu mojih testova, AVR moze da radi i pri nizim naponima napajanja od 2.7V ukoliko se uspori takt ali to nije kataloški zagarantovano. AVR ima uobicajene modove rada koji štede struju ukljucujuci i sposobnost budenja na interapt. Na 3V AVR troši 11(A u sleep modu sa ukljucenim watchdog tajmerom. Ako se watchdog tajmer iskljuci potrošnja pada ispod 1(A.
Moguce je ostvariti budenje sa programiranim kašnjenjem. Kada se to realizuje zaustavljanjem kristala, potrebno je više vremena za stabilizaciju kristala pre nego što procesor moze da radi.
AVR ne radi pouzdano na niskim frekvencijama (32kHz), niti mu je potrošnja mala, kao što bi se ocekivalo. Ako mikrokontroler treba nešto da radi periodicno bolje je da radi na višoj frekvenciji. Posle uradenog posla mikrokontroler se uspava a zatim ga watchdog budi periodicno.


Arhitekturna višejezicnost


AVR arhitektura je projektovana za C jezik. Sa njegova tri pointer registra (X, Y, Z) i automatskim uvecavanjem i umanjivanjem registara, on sadrzi osobine koje olakšavaju proizvodacima pisanje C kompajlera sa dobrim optimizacijama.
Za pristup podacima u tabelama koristi se data indirect with displacement nacin adresiranja. Pointer registar se napuni sa baznom adresom tabele. Pristup bilo kom elementu tabele se vrši preko 6-bitnog ofseta koji je sadrzan u instrukciji.
Jedan lep dodatak setu instrukcija (nije bio u verziji AVR 1996) je mogucnost da se doda mali pozitivan ofset bilo kom od gornja 4 registarska para preko ADIW (ADD immediate to word). Ova karakteristika podrzava ne samo tri pointer registra nego i registarski par R25/R24. Stoga, ovaj registarski par postaje narocito koristan za asembler programere kao matematicki registar opšte namene.


AT90S1200


Prva AVR komponenta je AT90S1200. Ona poseduje 512 reci 16-bitne programske memorije i 64 bajtova EEPROM-a. Iako ne sadrzi pravi SRAM za podatke (kao što je to slucaj sa ostalim clanovima familije), 1200 sadrzi standardnih 32 akumulatora koji mogu posluziti kao SRAM.
1200 je projektovan da bude jeftiniji u odnosu na svoju veliku bracu. Programiranjem fleša projektant moze da koristi ugradeni oscilator na 1MHz umesto skupog spoljnog kristala ili rezonatora ukoliko mu tacnost oscilatora nije kriticna. Ugradeni watchdog tajmer, komparator i 15 linija porta pomazu smanjivanju broja okolnih cipova. Kako je EEPROM takode na cipu I/O linije ostaju slobodne za druge potrebe.
Ono što nedostaje je UART, potpuniji tajmer, SRAM i SPI port. Mikrokontroleri sa 1K i 2K imaju SPI ali samo za programiranje ugradene fleš memorije. Sa visokim performansama mikrokontrolera lako se mogu emulirati nedostajuce periferije. Atmel ima nekoliko clanaka koji opisuju kako se to izvodi (www.atmel.com).
I/O portovi su fleksibilni, sa pet modova rada: ulaz visoke impendanse (manje od 1(A struje curenja), ulaz sa pull-up otpornikom, izlaz koji daje do 4mA i guta do 28mA, open-drain izlaz ili open-drain izlaz sa pull-up otpornikom. Portovi su organizovani na nacin koji je lak za programiranje. Postoje posebno izlazni lec, ulazni bafer i registar koji ukazuje na smer podataka.
Nezgodna situacija moze da nastupi kada koristite spoljne bus periferije. Svi mikrokontroleri zahtevaju sinhronizovani lec na ulaznim portovima kako bi se redukovao problem sa metastabilnošcu i da bi se dalo više rezervnog vremena. Na vecini mikrokontrolera, ovi lecevi su podešeni tako da se ukljuce pre port instrukcije (kao što je in). Pošto ti mikrokontroleri ne koriste višefazni klok, lec se menja na svakom ulaznom pinu u novi podatak iskljucivo na kraju svake instrukcije. Ako koristite periferije promenom pojedinacnih pinova porta (umesto eksternim memorijskim mapiranjem), mozete zapasti u nevolje kada ih citate.
Sledeci primer ce pomoci da sve ovo postane jasnije. Recimo, port B je rezervisan za periferijski data bus. Port D0 je uzet kao /read signal.

cbi PORTD,0 ;I/O bit PD0=0 ;(/READ signal aktivan)
in r20,PINB    ;cita podatke od
                    ;periferije
sbi PORTD,0 ;I/O bit PD0=1
                    ;(/READ signal neaktivan)
Na prvi pogled izgleda super, ali ne radi. Instrukcija cbi ima efekta na kraju kloka. Instrukcija in koristi ono što je vec u ulaznom lecu tj. podatke prisutne na portu pre nego što je /READ linija postala aktivna. Sadrzaj ulaznog leca nece se menjati sve do ivice kloka na kraju in instrukcije. Tu se upravo nalazi teškoca.
Da bi stvar radila mozete staviti NOP pre in instrukcije. Medutim, postoji elegantnije rešenje:

cbi PORTD,0      ;I/O bit PD0=0
                         ;(/READ signal aktivan)
sbi PORTD,0      ;I/O bit PD0=1
                         ;(/READ signal neaktivan)
in r20,PINB        ;cita podatke od
                         ;periferije
Preuredivanjem poslednje dve instrukcije dobija se da sada in instrukcija koristi podatke koji su prisutni pre deaktiviranja /READ linije. Na ovaj nacin ostavljen je pun jedan period kloka za pristup periferiji. Ako je to brzo, NOP-ovi se mogu ubaciti izmedu cbi i sbi.


RAM memorija


Kao što je slucaj sa vecinom jeftinijih procesora problematicna tacka AT90S1200 je velicina RAM memorije. Pošto raspolazemo samo sa 32 registra moramo pazljivo trošiti svaki bit. Srecom, postoje instrukcije koje omogucavaju operacije nad bitima, tako da nije sve izgubljeno.
Cak i ako se koristi sedmobitna promenljiva moze se iskoristiti i osmi bit bajta kao jednobitni fleg. Upozorenje: bite unutar istog bajta ne bi trebalo da dele glavni program i interapt servis rutina (ISR).
Kada imamo brojac manji od osam bita, jedan od nacina je da ih smestimo u gornji deo bajta a da donji deo bajta iskoristimo za promenljivu koju necemo uvecavati ili umanjivati. Promena brojaca je bezbolna (ADDI) i dobija se automatska indikacija dolaska brojaca na nulu (preko carry flega).
Na primer, ukoliko gornja tri bita cine brojac, uvecavanje bez uticaja na donje bite se moze ostvariti sa ADDI r??,0x20. Medutim, treba zapamtiti da ne postoji prava ADDI instrukcija vec se vrši SUBI r??,(-0x20). Po oduzimanju carry fleg je invertovan tako da je brojac na nuli kada je carry fleg nula posle SUBI. Suprotno tome, kada je carry fleg setovan svi biti brojaca nisu nula.


ISR i rukovanje stekom


Pošto 1200 nema data SRAM, projektanti mikrokontrolera su ugradili stek sa tri nivoa za potrebe podprograma i interapt rutina. Ugradeni stek sluzi iskljucivo za cuvanje povratnih adresa. Ne postoje PUSH/POP instrukcije za ovaj mikrokontroler (drugi clanovi familije imaju ove instrukcije). Ako ne koristite ugnjezdene interapte i ne koristite podprograme unutar interapta, onda u glavnom programu mozete pozivati podprograme do dva nivoa.
Iako svi drugi clanovi familije podrzavaju C, 1200 ne podrzava C sem ako se koriste iskljucivo globalne promenljive. Razlog tome je što se u stek ne mogu smeštati podaci nego sluzi samo za povratne adrese.
Statusni registar (SREG) se ne cuva automatski pri pozivu interapt rutine. Jedan nacin je da rezervišete registar za cuvanje SREG, a drugi je da ne koristite instrukcije koje uticu na SREG. Druga opcija je realna pošto postoji mnogo instrukcija koje ne uticu na flegove.
Dobro je koristiti R0 kao registar za cuvanje SREG jer su gornji registri dragoceni za rad sa immediate-mode instrukcijama. U vecim AVR mikrokontrolerima R0 ima specijalnu funkciju: pri radu sa look-up tabelama podaci završavaju u R0.
U praksi, cuvanje flegova je jednostavno: in R0,SREG ih cuva, dok ih out SREG,R0 vraca.
Kada je problem dubina steka, korisno je upotrebljavati neki alternativni metod umesto CALL/RETURN metoda. Ako je potrebno nekoliko puta pozivati neki veliki podprogram (npr. matematicku funkciju), efikasno je koristiti nekoliko slobodnih bita u vec delimicno korišcenom registru za ukazivanje na tacke povrataka. Razmotrimo sledece:

.reg SIXBITS =R16   ; koristimo donjih
                              ; 6 bita
.equ MYRET1 0x00  ; omogucava upotrebu
                              ; viših bitova
.equ MYRET2 0x40
.equ MYRET3 0x80
.equ MYRET4 0xC0



Listing 1 prikazuje iskorišcenje dva gornja slobodna bita.
Listing 1.
;(Ovaj prvi ORI ne mora tu da stoji, ali je ostavljen zbog jasnoce)
ori SIXBITS, MYRET1 ;povratak je na HERE
rjmp BIG_MATH
FAKE_RET1:
...
ori SIXBITS, MYRET2
rjmp BIG_MATH
FAKE_RET2:
...
ori SIXBITS, MYRET3
rjmp BIG_MATH
FAKE_RET3:
...
ori SIXBITS, MYRET4
rjmp BIG_MATH
FAKE_RET4:
...
BIG_MATH:                 ; prevelik da bi bio napisan više puta
...
addi SIXBITS, 0x40     ;pogledaj da li je u granicama od 0xC0 do 0x00
brcc FAKE_RET4       ;pazi, sa ADDI C flag je invertovan!
addi SIXBITS, 0x40     ; ponovo dok ne završi
brcc FAKE_RET3
addi SIXBITS, 0x40
brcc FAKE_RET2
addi SIXBITS, 0x40
rjmp FAKE_RET1

Treba primetiti da nismo proveravali ZERO uslov, jer donji biti u registru ne moraju biti nula. Umesto toga, proveravamo carry. Pošto je carry fleg invertovan kada se izvrši ADDI instrukcija (u stvari izvrši se SUBI Rx,-K), carry ce biti nula kada su gornja 4 bita nula.
Prikazani kod ima 11 reci više od programa koji bi koristio CALL, ali je uštedeo jedan nivo steka. Svakako to je bolje od više kopija iste procedure. Ukoliko je potrebno manje tacaka povrataka, navedeni kod se moze prema tome smanjiti.
Kada neki kod treba da se izvrši samo dva puta moze se koristiti T-fleg. On se setuje pre pocetka koda i proverava se na kraju koda. Ako je T-fleg setovan postavi se na nulu i vrati se na pocetak. Kada se sledeci put stigne do kraja T-fleg ce biti nula tako da ce program nastaviti dalje.


Analogni komparator


Ukljuceni AVR komparator troši oko 0.5mA (moguce ga je iskljuciti radi štednje struje). Zajednicki ulazni napon (common-mode input range) krece se u granicama napona napajanja umanjenog za 100mV. Promena stanja se odigra za manje od 200ns pri napajanju od 5V bilo da se radi o velikim ili malim signalima (testirano je pri 5V i 25mV). Ulazi komparatora su ujedno i portovi PB0 i PB1. Velika prednost toga je mogucnost da se bilo koji ulaz veze za bilo gornje bilo donje napajanje. To je narocito korisno kada se pravi A/D konvertor jer je moguce vezati integrirajuci kondenzator za masu bez korišcenja dodatnih I/O pinova.
Izlaz komparatora je jedan od izvora interapta. Takode je prisutan i u statusnom registru. Moze se odabrati izazivanje interapta na visoki nivo, niski nivo ili na promenu stanja. Takode je moguce napraviti budenje iz idle moda koristeci komparator, mada to nije preporucljivo zbog relativno velike struje komparatora u odnosu na struje idle moda.
Ako ste ocajni, mozete koristiti komparator kao izvor spoljnog interapta. Za to je potreban najmanje jedan spoljni otpornik (ukljuciti unutrašnji pull-up tako da je potreban samo spoljašnji pull-down) da postavi drugi ulaz komparatora na neki nivo izmedu napona napajanja.


Operacije nad bitovima


Kod mnogih primena vazne su operacije nad bitima za gustinu koda i brzinu. Shvatajuci to projektanti AVR mikrokontrolera ugradili su neke lepe osobine u cip.
Moguce je setovati ili resetovati više bita unutar bilo kog od gornjih 16 registara i to u jednom taktu. Takode je moguce setovati ili resetovati bilo koji bit u bilo kom od 32 I/O registra u dva takta. Treba primetiti da je to read-modify-write operacija i da je garantovano da ce rezultat biti korektan zahvaljujuci postojanju odvojenog izlaznog registra i ulaznog bafera. Mikrokontroleri koji nemaju odvojene registre ne mogu garantovati ispravan rad, vec se o tome morate postarati sami.
Bitima status registra (SREG) se takode moze pojedinacno pristupati. T-fleg je narocito zanimljiv jer se moze vršiti grananje na osnovu njegove vrednosti, a moze se i kopirati u i iz bilo kog registra. Na T-fleg ne utice ni jedna druga operacija.
Tu je i SWAP funkcija koja menja visoki i niski nibl (4 bita) bilo kog registra. To je korisno za pakovanje i odpakivanje kada radimo sa EEPROMom, LCD displejom i sa BCD pakovanim podacima.


Alati za razvoj programa


Radi lakšeg prelaska na novu arhitekturu, Atmel nudi besplatno set Windows baziranih alata. U te alate su ukljuceni: makro asembler, softverski simulator i AVR Studio. Meni, licno, se dopadaju svi ovi alati. Simulator cak simulira tajmer/brojac interapt automatski. Takode prati klok cikluse, tako da se lako mogu proveriti performanse pojedinih kriticnih rutina. Ja sam ga koristio za proveru matematickih funkcija koje bi bilo teško proveriti starim burn-and-churn metodom.
Kada se radi o burn-and-churn metodima, moram reci da testiranje manjih kolicina koda i nije tako teško jer zahvaljujuci fleš memoriji sve moze da se obavi u sekundi: izmena, kompajliranje, upis u fleš.
Atmel ima svoj programmer/prototyping board MCU00100, koji sadrzi Windows programe, tastere i LED diode.
Jedini C kompajler proizvodi IAR Systems. Njihova najjeftinija verzija (795$) po ANSI standardu radi punu optimizaciju ali je ogranicena na 8K koda i ne ukljucuje matematicke biblioteke za rad sa pokretnim zarezom.


Zakljucak


Pošto sam radio sa AVR, nekoliko dodatnih stvari bih voleo da vidim u setu instrukcija. Jedna od njih bi bila mogucnost invertovanja bita u I/O u jednoj instrukciji (trenutno se bit moze samo setovati ili resetovati). Druga stvar bi bila mogucnost invertovanja T-flega u jednoj instrukciji.
Nekada je potrebno preskociti više od jedne instrukcije. Zato bi bilo pozeljno imati duze preskoke (mozda dve, tri ili cetiri instrukcije). Još bolje bi bilo kada bi postojala grananja zasnovana na bilo kom bitu u bilo kom registru. Medutim, kada se uradi malo matematike jasno je zašto to ne postoji: jedan bit bio bi potreban za set ili reset, tri bita za adresiranje jednog od osam bita u registru, pet bita za adresiranje registra, i šest bita za definisanje velicine skoka. To je ukupno 15 bita što ne ostavlja baš mnogo prostora za druge instrukcije. Ali mogu da sanjam, zar ne?
Sve nabrojane mane mogu se prevazici u softveru. Samo je potrebno malo više koda. Cak i tako AVR mikrokontroler prevazilazi sve druge 8-bitne mikrokontrolere koje ja znam. Sve u svemu, AVR je nešto novo u svetu 8-bitnih mikrokontrolera. Ono što je nekada bilo nemoguce za jeftini mikrokontroler odjednom je lako dostizno. Sa pojavom AVR mikrokontrolera 8-bitni svet izgleda mnogo manje ugrozen od strane vecih mašina.


Literatura


* Atmel AVR Microcontroller Data Book. San Jose, CA: Atmel, May 1997.
* Atmel CD-ROM Databook. San Jose, CA: Atmel, June 1997.
* www.atmel.com . Atmel Web site.
* www.iar.com . IAR Systems Web site (makers of the C compiler).
* www.equinox-tech.com . Equinox Technologies Web site (download tools).

Izvor teksta: Embedded Systems Programming


Pročitajte više o ovoj temi
AT89C2051 uvod 
Programiranje Atmelovog mikrokontrolera AT89C2051 
Mikrokontrolerski regulator brzine i smera DC motora 
Programator Atmel mikrokontrolera 

C o p y r i g h t  1998 mikroElektronika. All Right Reserved. Za sva pitanja obratite se redakciji