Programiranje avr u asembleru. Praktično programiranje Atmel AVR mikrokontrolera na asembleru. (3. izdanje). Elektronika u grčkom stilu
Dakle, nadam se da je savjestan čitatelj već sastavio programator, eksperimentalnu ploču, te instalirao i konfigurirao potreban softver.
Sada, nakon što sam napisao prvi članak u nizu, shvatam da sam se malo uzbudio i napravio istu grešku kao moji prethodnici, stavljajući frazu „za početnike“. Preciznije bi bilo formulisati temu „Za početnike u programiranju na asemblerskom jeziku“, odnosno pretpostavljam da čitalac već ima barem površno razumevanje šta je mikrokontroler, inače će nam trebati dosta vremena samo da upoznajte se sa ovom temom. Za one koji ih uopće nisu upoznati, mogu preporučiti seriju članaka S. Ryumika, “AVR mikrokontroleri”, koji je po mom mišljenju apsolutno divan, objavljen u časopisu Radioamator (br. 1-11 za 2005.) . U ovom ciklusu ATmega8 je odabran kao osnovni kontroler, međutim, opće funkcionalne jedinice gore navedenog kontrolera i ATtiny13 su praktično iste.
Za direktno upoznavanje sa mikrokontrolerom ATtiny13 preporučujem knjigu A.V. Evstifeeva "Mikrokontroleri" AVR porodica tiny. Uputstvo za upotrebu" (M.: Izdavačka kuća "Dodeka-XXI", 2007. - 432 str.). Sadrži prevedene i sistematizovane listove podataka za čitav niz kontrolera male porodice i, po mom mišljenju, trebalo bi da bude desktop čitanje za one koji se bave programiranjem mikrokontrolera.
Međutim, kako priča bude napredovala, dat ću neke informacije u vezi sa onim čvorovima i modulima kontrolera koji će se koristiti u pisanim programima.
Ali sve je ovo lirska digresija. Vratimo se direktno na priču.
ATtiny13 kontroler, uprkos svojoj maloj veličini, ima vrlo dobre funkcionalne karakteristike. A mali broj pinova je više nego nadoknađen brojem funkcija koje svaki od njih obavlja. Pinout i opis pinova su predstavljeni u nastavku:
Tabela je preuzeta iz gore pomenute knjige A.V. Evstifeeva.
Kao što vidite, svaki pin može obavljati najmanje tri funkcije, ili čak mnogo više. U početku nećemo razmatrati alternativne funkcije, već samo onu osnovnu - digitalni ulaz/izlaz.
Kao što se vidi iz slike i tabele, svi pinovi, osim pinova napajanja, imaju naziv PB iza kojeg slijedi serijski broj. Šta to znači? Svi pinovi kontrolera su kombinovani u 8 delova radi lakšeg rada sa njima, a svakoj grupi od 8 pinova dodeljena su tri posebna I/O registra. Generalno, koncept registara je ključan kada se radi sa kontrolerima, posebno u asembleru. Pogledajmo pobliže svaki od tri gore navedena registra. Sve su to jednobajtne ćelije u memoriji kontrolera. Svaki bit odgovara jednom od izlaza kontrolera, a broj bita u registru se poklapa sa brojem izlaza (na primjer, 0. bit je odgovoran za PB0 izlaz, 1. bit je odgovoran za PB1 izlaz itd.). Svi registri imaju svoje ime, pomoću kojeg im se pristupa prilikom pisanja programa. Kakva su ovo imena?
1. DDRB registar je odgovoran za smjer prijenosa informacija svakog pina kontrolera. Ako je bilo koji bit ovog registra “0”, tada će odgovarajući izlaz biti ulaz, a ako je “1”, onda će izlaz. Štaviše, svaki izlaz se konfiguriše pojedinačno i bilo gde u programu. To znači da pod različitim uslovima ili u različito vreme, isti pin može biti konfigurisan kao ulaz ili kao izlaz, nezavisno od drugih pinova.
2. PINB registar sadrži trenutno stanje svih pinova: ako je na pin doveden napon, onda se u odgovarajući bit upisuje logička “1”, ako nema napona, upisuje se logička “0”. Ovaj registar se uglavnom koristi za čitanje stanja pina koji je u ulaznom modu.
3. PORTB registar obavlja dvostruku funkciju ovisno o smjeru prijenosa informacija. Ako pin radi kao digitalni izlaz, tada upisivanje “1” u bilo koji bit PORTB registra uzrokuje pojavu napona na odgovarajućem pinu, a pisanje “0” uzrokuje da napon nestane. Dakle, u izlaznom modu, ovaj registar je taj koji određuje stanje svakog pina. U režimu digitalnog ulaza, upisivanje logičke "1" u bilo koji bit uzrokuje da se ugrađeni pull-up otpornik poveže na odgovarajući pin, a upisivanje "0" da ga onemogući. Kakva je to stvar ovaj “pull-up otpornik” i čemu je namijenjen? Ako pin djeluje kao digitalni ulaz, tada je otpor ulaznog bafera prilično visok, a ulazna struja prilično mala. Stoga, svaka električna smetnja može dovesti do spontanog prebacivanja izlaza u proizvoljno stanje. Kako bi se to spriječilo, između ulaza i izvora napajanja spojen je otpornik s otporom od nekoliko desetina kilo-oma, koji "povlači" ulazni potencijal na napon napajanja (otuda i naziv). Struja koja teče kroz ovaj otpornik je dovoljno mala da ne ometa ostatak kola, ali dovoljno velika da spriječi slučajno prebacivanje pinova. Često ćemo koristiti pull-up otpornike kada radimo sa dugmadima, jer kada nisu pritisnuti, pinovi na koje su spojeni u suštini "vise" u vazduhu i podložni su smetnjama.
Treba napomenuti da se pri uključivanju svi registri resetuju na 0 i svaki pin djeluje kao digitalni ulaz bez pull-up otpornika.
Sada kada imamo barem neku ideju o tome ŠTA je potrebno za rad s ulazima kontrolera, vrijeme je da saznamo KAKO raditi s njima.
Hajde da napišemo našu prvu program rada u asembleru. Prvo ću dati kompletan algoritam za kreiranje novog projekta, ali ću ga u budućnosti izostaviti, fokusirajući se samo na tekst samog programa.
1. Idite na asm folder i kreirajte novi folder u njemu. Preimenujte ga u naziv koji nam odgovara. Da budemo precizni, ja ću ih pozvati po našem broju koraka. U ovom slučaju "step2".
2. Kliknite desnim tasterom miša na datoteku build.bat i promijenite putanju do izvorne datoteke, pokazujući na novokreirani folder (korak 2). Nakon ovoga moj sadržaj izgleda ovako:
"F:\Prog\AVR\asm\avrasm32 -fI %F:\Prog\AVR\asm\step2\main.asm
pauza"
Za vas se može razlikovati ovisno o tome gdje ste raspakovali arhivu.
3. Idite u fasciklu Asmedit i pokrenite program ASM_Ed.exe
4. U prozoru koji se otvori upišite tekst programa. Zadržaću se na ovoj tački detaljnije, jer je ona glavna u našoj lekciji danas, kao i u narednim.
Šta je tekst asemblerskog programa? Može uključivati nekoliko elemenata napisanih prema određenim pravilima:
Instrukcije sastavljanja sa ili bez operanda u zavisnosti od sintaksi instrukcija. Između imena komande i prvog operanda mora postojati razmak, tabulator ili bilo koji broj oboje. Operandi su odvojeni zarezom, kojem također može prethoditi ili slijediti proizvoljan broj razmaka ili tabulatora;
Direktive, od kojih svaka počinje sa ".";
Oznake, koje su mjesta u programu koja je korisnik proizvoljno imenovao do kojih će se možda morati kretati. Svaka oznaka završava znakom ":";
Komentari koji počinju sa ";". Sav tekst od početka komentara do kraja reda se zanemaruje prilikom kreiranja hex datoteke i može biti potpuno proizvoljan;
Prazni redovi za bolju strukturu i čitljivost programa.
Ne može biti više od jedne naredbe u svakoj liniji. Međutim, dozvoljeno je istovremeno prisustvo oznake u redu nakon koje slijede naredba i komentar.
Koristeći ova pravila, napisaćemo program koji će uključiti LED2 dok je dugme SB1 pritisnuto, a isključiti ga ako se dugme otpusti. Tekst programa je predstavljen u nastavku:
.include "F:\Prog\AVR\asm\Appnotes\tn13def.inc"
sbi DDRB, 4 ;RV4 - izlaz (LED2)
sbi PORTB, 2 ; Uključite pull-up otpornik na PB2 (dugme SB1)
sbic PINB, 2 ;Ako je PB2=0 (pritisnuto dugme), preskočite sljedeće. linija
sbi PORTB, 4 ;Ugradnja PB4 u 1 (gašenje LED diode)
sbis PINB, 2 ;Ako je PB2=1 (dugme otpušteno), preskočite sljedeće. linija
cbi PORTB, 4 ; Postavljanje PB4 na 0 (LED uključen)
Pogledajmo to detaljnije. Prvi red sadrži direktivu "include", napisanu prema gornjim pravilima sa tačkom na početku. Njegova svrha je da u tekst programa uključi datoteku specificiranu iza nje. Kao što sam rekao u prvom koraku, trebat će nam datoteka "tn13def.inc". U ovom redu moraćete da promenite putanju do lokacije fascikle Appnotes na vašem računaru. Zašto trebamo uključiti ovaj fajl? Radoznali čitalac može ga pogledati i pročitati njegov sadržaj, ali će najvjerovatnije u početku malo razumjeti. Za sada ću reći da sadrži korespondenciju između imena registara, koje asembler ne zna po defaultu, sa njihovim fizičkim adresama u kontroleru.
Sljedeći redovi su komande asemblera. Pažljivi čitalac će primijetiti da se koriste ukupno četiri različite komande. Pogledajmo svrhu svakog od njih.
Sbi instrukcija ima dva operanda: prvi je ime registra, drugi je broj bita. Kao rezultat njegovog izvršenja, specificirani bit u navedenom registru je postavljen na "1".
Naredba cbi je po sintaksi slična gornjoj i obavlja potpuno suprotnu funkciju - resetuje specificirani bit u navedenom registru na "0".
Naredba sbis je također po sintaksi slična gornjoj. Međutim, za razliku od njih, on ne obavlja nikakve operacije sa registrima, već samo provjerava stanje navedenog bita u navedenom registru, a ako je jednako "1", preskače red nakon naredbe. U suprotnom se izvršava red koji slijedi, kao i svi ostali nakon njega.
Komanda sbis je suprotna od sbis komande. Preskače sljedeći red ako je specificirani bit registra "0".
Sada, sumirajući sve gore navedeno, pokušajmo razumjeti algoritam programa. Za početak, uradiću ovo doslovno red po red.
1 red. Direktiva uključivanja uključuje datoteku tn13def.inc, koja sadrži definicije registra.
2. red. Komanda sbi postavlja "1" u bit 4 registra DDRB, čime se PB4 pin prebacuje na izlaz. Ako pogledate dijagram ploče (slika 1 prethodnog koraka), možete vidjeti da je LED2 spojen na ovaj pin. Nakon naredbe i znaka ";" napisan je komentar koji ukratko objašnjava značenje radnji koje se izvode u liniji.
3 linija. Ista sbi komanda postavlja "1" u bit 2 registra PORTB, povezujući interni pull-up otpornik na pin PB2, na koji je spojeno dugme SB1. Pošto nismo promijenili stanje bita 2 registra DDRB, ovaj pin će ostati ulaz, što nam je upravo potrebno.
4 linija. Komanda sbic provjerava prisutnost logičke "0" na PB2 ulazu koristeći PINB registar. Ako pažljivo pogledate dijagram, možete vidjeti da tipke, kada se pritisnu, zatvaraju odgovarajući terminal zajedničkom žicom. Ovo je standardna tehnika, jer kada se dugme otpusti, na izlazu je prisutna logička "1" zbog pull-up otpornika, a kada se dugme pritisne, pojavljuje se logička "0" zbog povezivanja izlaz na zajedničku žicu. Dakle, ako postoji logička „0” na pinu PB2, odnosno pritisnuto dugme, preskačemo sledeći red, a ako je dugme otpušteno, onda ga izvršavamo.
5 linija. U njemu, sbi komanda postavlja logičku "1" u bitu 4 registra PORTB, čime se isključuje LED2. Pronicljivi čitalac može se zapitati zašto se LED dioda gasi ako dovedemo napon na izlaz. Odgovor leži u dizajnu. LED dioda je spojena sa anodom na napojnu žicu, a katodom sa izlazom kontrolera. Stoga, ako dovedete napon na izlaz, potencijali anode i katode će biti jednaki, a LED će se ugasiti. Ako se na izlazu izlazi logička "0", tada će se napon primijeniti na LED i ona će zasvijetliti. Dakle, par linija 4 i 5 isključuje LED2 kada se dugme otpusti.
6 linija. Značenje je suprotno od 4. Komanda sbis provjerava prisutnost logičke “1” na PB2 ulazu, odnosno provjerava da li je dugme otpušteno. Ako se dugme otpusti, sledeći red se preskače i sledeći red prelazi na sledeći. Ali pošto je 7. red posljednji, postoji prijelaz u 2. red. Ako se pritisne dugme, tada se izvršava red 7.
7 linija. Nasuprot 5. Komanda cbi resetuje bit 4 registra PORTB na "0", čime se uključuje LED2. Dakle, par linija 6 i 7 uključuje LED2 kada se pritisne dugme SB1.
Kao što vidite, nismo uradili ništa posebno teško. Koristeći znanje o samo 3 registra i 4 instrukcije, napisali smo naš prvi program. Šta dalje s njom? Ako još niste zaboravili, nastavljamo sa pisanjem algoritma za kreiranje programa.
5. Nakon što ste napisali tekst programa u prozoru editora, izaberite stavku menija „Datoteka“ i na listi koja se otvori kliknite na „Sačuvaj kao...“. U prozoru za čuvanje datoteke odaberite folder step2 koji smo kreirali i navedite naziv datoteke "main", jer je to ime koje smo naveli u datoteci "build.bat"
Nakon spremanja, prozor programa bi trebao izgledati ovako:
6. Kreirajte heksadecimalni fajl. Da biste to učinili, kliknite na dugme "II" na traci sa alatkama. Trebao bi se pojaviti sljedeći prozor:
Obavještava nas da je sklapanje završeno bez grešaka i kreirana je firmver datoteka “main.hex” sa zapreminom od 6 riječi, odnosno 12 bajtova. Primećujem to sličan program u C jeziku bi imao najmanje 5 puta veći volumen.
7. Otišavši u folder step2, nalazimo mu dodatak u vidu novostvorenog main.hex fajla, koji se sada može ušiti u kontroler bilo kojim programatorom, što se mora uraditi da bi se vidjeli rezultati program koji smo napisali. Nakon bljeskanja kontrolera, ako je kolo pravilno sastavljeno, sve bi trebalo raditi prema algoritmu koji smo razvili: kada su tipke otpuštene, LED2 bi trebao biti isključen, a dok je tipka SB1 pritisnuta, trebala bi biti uključena.
Prije sljedećeg koraka predlažem da obavite sljedeće zadatke:
1. Dodajte u programsku obradu pritiskanje dugmeta SB2 sa suprotnim algoritmom: kada se dugme SB2 otpusti, LED1 treba da svetli, a kada se pritisne, treba da se ugasi.
2. Napišite program za kontrolu LED2 pomoću oba dugmeta. Kada se pritisne dugme SB1, LED treba da svetli i ostane upaljen dok se ne pritisne dugme SB2, što ga isključuje do sledećeg pritiska na SB1.
Prevodilac prevodi izvorni kodovi od asemblerskog jezika do objektnog koda. Rezultirajući objektni kod može se koristiti u ATMEL simulatoru AVR Studio, ili u ATMEL AVR In-Circuit Emulatoru. Kompajler takođe generiše kod koji se može direktno programirati u AVR mikrokontrolere.
Kompajler generiše kod koji ne zahteva povezivanje.
Kompajler radi ispod Microsoft Windows 3.11, Microsoft Windows95 i Microsoft Windows NT. Osim toga, postoji i konzolna verzija za MS-DOS.
Porodični set instrukcija AVR mikrokontroleri opisano ukratko u ovom dokumentu, za potpunije upute pogledajte kompletna uputstva i dokumentaciju za vaš specifični mikrokontroler.
Izvorni kodovi
Kompajler radi sa izvornim datotekama koje sadrže uputstva, oznake i direktive. Instrukcije i direktive obično imaju jedan ili više operanda.
Red koda ne bi trebao biti duži od 120 znakova.
Svaki red može početi oznakom, koja je niz znakova koji se završava dvotočkom. Oznake se koriste za označavanje mjesta na koje se kontrola prenosi tokom prijelaza, kao i za specificiranje imena varijabli.
Ulazni niz može imati jedan od četiri oblika:
[label:] direktiva [operandi] [komentar][oznaka:] instrukcija [operandi] [komentar]KomentarPrazan red
Komentar ima sljedeću formu:
; [Tekst]
Pozicije u uglastim zagradama su opcione. Tekst iza tačke zarez (;) i do kraja reda se zanemaruje od strane prevodioca. Oznake, upute i direktive su detaljnije opisane u nastavku.
primjeri:
oznaka: .EQU var1=100 ; Postavlja var1 na 100 (Ovo je direktiva) .EQU var2=200 ; Postavlja var2 na 200
test: rjmp test; Beskonačna petlja (ovo je instrukcija) ; Red sa samo jednim komentarom
; Još jedan red sa komentarom
Kompajler ne zahteva da oznake, direktive, komentari ili uputstva budu u određenoj koloni reda.
upute za avr procesor
Ispod je skup komandi za AVR procesore; detaljniji opis njih se može naći u AVR Data Book.
Aritmetika i logicke instrukcije
Mnemotehnika |
Operandi |
Opis |
Operacija |
Zastave |
Ciklusi |
Rd,Rr |
Sumiranje bez nošenja | ||||
Rd,Rr |
Sumiranje s prijenosom |
Rd = Rd + Rr + C | |||
Rd,Rr |
Oduzimanje bez prenošenja | ||||
Rd,K8 |
Oduzimanje konstante | ||||
Rd,Rr |
Oduzimanje s prijenosom |
Rd = Rd - Rr - C | |||
Rd,K8 |
Oduzimanje konstante s prijenosom |
Rd = Rd - K8 - C | |||
Rd,Rr |
Logično I | ||||
Rd,K8 |
Logično I sa konstantom | ||||
Rd,Rr |
Logično OR | ||||
Rd,K8 |
Logičko ILI sa konstantom | ||||
Rd,Rr |
Logički isključivi OR | ||||
Inverzija bita | |||||
Promjena znaka (dodatni kod) | |||||
Rd,K8 |
Postavite bit(e) u registar | ||||
Rd,K8 |
Obriši bit(e) u registru |
Rd = Rd ($FF - K8) | |||
Povećanje vrijednosti registra | |||||
Smanjite vrijednost registra | |||||
Provjera nule ili negativnosti | |||||
Obriši registar | |||||
Postavite registar | |||||
Rdl,K6 |
Dodajte konstantu i riječ |
Rdh:Rdl = Rdh:Rdl + K6 | |||
Rdl,K6 |
Oduzmite konstantu od riječi |
Rdh:Rdl = Rdh:Rdl - K 6 | |||
Rd,Rr |
Množenje neoznačenih brojeva |
R1:R0 = Rd * Rr | |||
Rd,Rr |
Množenje potpisanih brojeva |
R1:R0 = Rd * Rr | |||
Rd,Rr |
Množenje potpisanog broja sa nepotpisanim brojem |
R1:R0 = Rd * Rr | |||
Rd,Rr |
Množenje neoznačenih razlomaka |
R1:R0 = (Rd * Rr)<< 1 | |||
Rd,Rr |
Množenje razlomaka sa predznakom |
R1:R0 = (Rd *Rr)<< 1 | |||
Rd,Rr |
Množenje predznačenog razlomka sa nepredznačnim brojem |
R1:R0 = (Rd * Rr)<< 1 |
Uputstva o podružnici
Mnemotehnika |
Operandi |
Opis |
Operacija |
Zastave |
Ciklusi |
Relativna tranzicija | |||||
Indirektan prijelaz na ( Z) | |||||
Produženi indirektni prijelaz na ( Z) |
STACK = PC+1, PC(15:0) = Z, PC(21:16) = EIND | ||||
Relativni poziv potprograma |
STACK = PC+1, PC = PC + k + 1 | ||||
Indirektni poziv ( Z) |
STACK = PC+1, PC = Z | ||||
Prošireni indirektni poziv ( Z) |
STACK = PC+1, PC(15:0) = Z, PC(21:16) =EIND | ||||
Pozivanje potprograma |
STACK = PC+2, PC = k | ||||
Povratak iz potprograma | |||||
Povratak iz prekida | |||||
Rd,Rr |
Uporedite, preskočite ako je jednako |
ako je (Rd ==Rr) PC = PC 2 ili 3 | |||
Rd,Rr |
Uporedite | ||||
Rd,Rr |
Uporedite sa transferom | ||||
Rd,K8 |
Uporedite sa konstantom | ||||
Rr,b |
Preskoči ako je bit u registru obrisan |
if(Rr(b)==0) PC = PC + 2 ili 3 | |||
Rr,b |
Preskoči ako je bit u registru postavljen |
if(Rr(b)==1) PC = PC + 2 ili 3 | |||
P,b |
Preskoči ako je bit u portu obrisan |
if(I/O(P,b)==0) PC = PC + 2 ili 3 | |||
P,b |
Preskoči ako je postavljen bit porta |
if(I/O(P,b)==1) PC = PC + 2 ili 3 | |||
s,k |
Skoči ako je zastavica u SREG-u obrisana |
if(SREG(s)==0) PC = PC + k + 1 | |||
s,k |
Idi ako je postavljena zastavica u SREG |
if(SREG(s)==1) PC = PC + k + 1 | |||
Idi ako je jednako |
if(Z==1) PC = PC + k + 1 | ||||
Preskoči ako nije jednako |
if(Z==0) PC = PC + k + 1 | ||||
Idi ako je prijenos instaliran |
if(C==1) PC = PC + k + 1 | ||||
Idi ako je prijenos obrisan |
if(C==0) PC = PC + k + 1 | ||||
Skok ako je jednak ili veći |
if(C==0) PC = PC + k + 1 | ||||
Preskoči ako je manje |
if(C==1) PC = PC + k + 1 | ||||
Idi ako je minus |
if(N==1) PC = PC + k + 1 | ||||
Idi ako plus |
ako(N==0) PC = PC + k + 1 | ||||
Skoči ako je veće ili jednako (potpisano) |
if(S==0) PC = PC + k + 1 | ||||
Skoči ako je manje (potpisano) |
if(S==1) PC = PC + k + 1 | ||||
Skočite ako je postavljena interna zastavica za nošenje |
if(H==1) PC = PC + k + 1 | ||||
Skočite ako je interna zastavica za nošenje obrisana |
if(H==0) PC = PC + k + 1 | ||||
Skoči ako je T zastavica postavljena |
if(T==1) PC = PC + k + 1 | ||||
Skoči ako je T zastavica obrisana |
if(T==0) PC = PC + k + 1 | ||||
Skoči ako je postavljena zastavica prelivanja |
if(V==1) PC = PC + k + 1 | ||||
Skočite ako je zastavica prelivanja obrisana |
if(V==0) PC = PC + k + 1 | ||||
Idi ako su prekidi omogućeni |
if(I==1) PC = PC + k + 1 | ||||
Idi ako su prekidi onemogućeni |
if(I==0) PC = PC + k + 1 |
* Za operacije pristupa podacima, broj ciklusa je naznačen kada se pristupa internoj memoriji podataka i nije tačan kada se radi sa eksternom RAM memorijom. Za instrukcije CALL, ICALL, EICALL, RCALL, RET i RETI potrebno je dodati tri ciklusa plus dva ciklusa za svako čekanje u kontrolerima sa računarom manjim od 16 bita (128KB programske memorije). Za uređaje s programskom memorijom većom od 128 KB, dodajte pet ciklusa plus tri ciklusa za svako čekanje.
Uputstva za prijenos podataka
Mnemotehnika |
Operandi |
Opis |
Operacija |
Zastave |
Ciklusi |
Rd,Rr |
Kopiraj registar | ||||
Rd,Rr |
Kopirajte par registara |
Rd+1:Rd = Rr+1:Rr, r,d parno | |||
Rd,K8 |
Konstantno opterećenje | ||||
Rd,k | |||||
Rd,X | |||||
Rd,X+ |
Rd = (X), X=X+1 | ||||
Rd,-X |
X=X-1, Rd = (X) | ||||
Rd,Y | |||||
Rd,Y+ |
Rd = (Y), Y=Y+1 | ||||
Rd,-Y |
Y=Y-1, Rd = (Y) | ||||
Rd,Y+q | |||||
Rd,Z | |||||
Rd,Z+ |
Rd = (Z), Z=Z+1 | ||||
Rd,-Z |
Z=Z-1, Rd = (Z) | ||||
Rd,Z+q | |||||
Direktna štednja | |||||
X,Rr |
Indirektno očuvanje | ||||
X+,Rr |
(X) = Rr, X=X+1 | ||||
-X,Rr | |||||
Y,Rr |
Indirektno očuvanje | ||||
Y+,Rr |
Indirektno spremanje sa naknadnim povećanjem |
(Y) = Rr, Y=Y+1 | |||
-Y,Rr |
Indirektna konzervacija sa preddekrementom |
Y=Y-1, (Y) = Rr | |||
Y+q,Rr | |||||
Z,Rr |
Indirektno očuvanje | ||||
Z+,Rr |
Indirektno spremanje sa naknadnim povećanjem |
(Z) = Rr, Z=Z+1 | |||
-Z,Rr |
Indirektna konzervacija sa preddekrementom |
Z=Z-1, (Z) = Rr | |||
Z+q,Rr |
Indirektno skladištenje sa zamjenom | ||||
R0 = ( Z) | |||||
Rd,Z |
Rd = ( Z) | ||||
Rd,Z+ |
Rd = ( Z), Z=Z+1 | ||||
R0 = (RAMPZ: Z) | |||||
Rd,Z |
Rd = (RAMPZ: Z) | ||||
Rd,Z+ |
Rd = (RAMPZ: Z), Z = Z+1 | ||||
Pohranjivanje u memoriju programa |
(Z) = R1:R0 | ||||
Prošireno skladištenje u programskoj memoriji |
(RAMPZ: Z) = R1:R0 | ||||
Rd,P |
Read port | ||||
P,Rr |
Pišite na port | ||||
Guranje registra na stog | |||||
Iskakanje registra iz steka |
* Za operacije pristupa podacima, broj ciklusa je naznačen kada se pristupa internoj memoriji podataka i nije tačan kada se radi sa eksternom RAM memorijom. Za instrukcije LD, ST, LDD, STD, LDS, STS, PUSH i POP morate dodati jedan ciklus plus jedan ciklus za svako čekanje.
Upute za rad sa bitovima
Mnemotehnika |
Operandi |
Opis |
Operacija |
Zastave |
Ciklusi |
Logičan pomak ulijevo |
Rd(n+1)=Rd(n), Rd(0)=0, C=Rd(7) | ||||
Logičan pomak udesno |
Rd(n)=Rd(n+1), Rd(7)=0, C=Rd(0) | ||||
Rotirajte lijevo preko C |
Rd(0)=C, Rd(n+1)=Rd(n), C=Rd(7) | ||||
Rotirajte desno preko C |
Rd(7)=C, Rd(n)=Rd(n+1), C=Rd(0) | ||||
Aritmetički pomak udesno |
Rd(n)=Rd(n+1), n=0,...,6 | ||||
Preuređivanje bilježnica |
Rd(3..0) = Rd(7..4), Rd(7..4) = Rd(3..0) | ||||
Postavljanje zastave | |||||
Čišćenje zastave | |||||
P,b |
Postavite bit na port | ||||
P,b |
Čisti bit u portu | ||||
Rr,b | |||||
Rd,b |
Učitajte bit iz T u registar | ||||
Postavite zastavu za nošenje | |||||
Clear Carry Flag | |||||
Postavite oznaku negativnog broja | |||||
Obrišite oznaku negativnog broja | |||||
Postavite nultu zastavicu | |||||
Obriši nultu zastavicu | |||||
Postavite zastavicu prekida | |||||
Obriši zastavicu prekida | |||||
Postavite oznaku potpisanog broja | |||||
Obrišite oznaku potpisanog broja | |||||
Postavite zastavicu prelivanja | |||||
Obrišite zastavicu prelivanja | |||||
Postavite zastavu T | |||||
Obriši T zastavicu | |||||
Postavite internu zastavicu za nošenje | |||||
Jasna unutrašnja zastavica za nošenje | |||||
Nema operacije | |||||
Spavanje (smanjenje potrošnje energije) |
Pogledajte opis uputstava | ||||
Resetiranje Watchdog tajmera |
Pogledajte opis uputstava |
Asembler ne razlikuje velika i mala slova.
Operandi mogu biti ovih tipova.
Dobro veče svima! Emitujem iz ugodnog svijeta koji se zove “assembler”. Odmah ću pojasniti da se tema tiče AVR mikrokontrolera - a još ne znam hoće li ovaj post biti koristan onima koji žele koristiti asembler za bilo koji drugi zadatak. Činjenica je da sam bukvalno prije nekoliko dana počeo da učim asembler od nule – trebam napraviti jedan uređaj – i odlučio sam da sve u njemu radim sam. I tako, jednog lepog dana sam to shvatio Učenje asemblera je apsolutno beskorisno! Jezik asemblera se može razumjeti samo! Odnosno, svima onima koji žele programirati na asembleru, toplo preporučujem da se detaljno udubite u to kako mikrokontroler FIZIČKI radi, a zatim proučite zamršenost naredbi.
Dakle, vjerovatno ću započeti malu seriju članaka u kojima ću vam pričati od samog početka kako tačno Razumio sam određene stvari u programiranju na asembleru - mislim da ću za one koji uopće ne razumiju šta je ASM, biti upravo takav "prevodilac" sa jezika onih koji su jako dobri u ovoj stvari.
Odmah ću reći da sam se manje-više upustio u ovu temu na poticaj DIHALT-a - stoga će ovi članci biti svojevrsni prijevod sa super-duper jezika sklopa-mikrokontrolera na jezik razumljiv većini ljudi. Pa, nadam se da će me gurui ispravljati kako predstava bude napredovala, a ako odjednom nešto netačno objasnim, ispraviće me.
Dakle, prvi zaključci o asembleru koje sam napravio prije par dana šokirali su me do srži - i sjedio sam čitajući DI HALT članke od 23h do 5h - nakon čega sam otišao u krevet zadovoljan i srećan.Shvatio sam suštinu programiranje na asemblerskom jeziku za mikrokontrolere.
Kako se ovo može još jednostavnije objasniti? Mislim da treba da krenemo od same suštine.
***
U početku nećemo ulaziti u tehničke detalje (o njima ćemo govoriti u sljedećem članku) - samo zamislite da postoje 3 znaka:
1. Mikrokontroler - Ovo je Englez Steve, koji je došao kod Rusa. Savršeno zna engleski, ali uopšte ne razume ruski - nijednu reč. Samo engleski. Izgubio je raspravu i obećao da će bez pitanja učiniti sve što mu Rus zatraži.
2. Asembler - Ovo je prevodilac Vasja, čija je majka Engleskinja, a otac Rus. Savršeno zna i engleski i ruski.
3.Mi - Ovo je Rus kome je došao Englez. Pa, to jest, mi smo mi =) Istovremeno, savršeno znamo ruski i (!!!) malo engleski - samo malo, sa rječnikom.
***
Zamislite ovu situaciju - Englez sjedi na stolici u vašoj sobi. I sjedite za računarom i čitate ovaj post, kada vam se iznenada otvori prozor! To je loša sreća! Vetar duva, zavesa se pretvorila u jedro... Bilo bi lepo zatvoriti! Ali previše je lijeno ustati sa stolice, skinuti noge sa sistemske jedinice, strpati ih u papuče, spustiti šolju kafe (piva) i krenuti u borbu sa elementima. A onda odjednom shvatite da u prostoriji imamo Engleza koji je izgubio opkladu i vrijeme je da ga jurimo! A ti mu tako slatko kažeš: „Čovječe! Molim vas zatvorite prozor i onda možete ponovo sjesti na stolicu!” a on sjedi, gleda te zabezeknuto i ne radi ništa! Možete, naravno, pogoditi čorbu od kupusa - ali onda vas on i dalje neće razumjeti! Onda pozoveš svog prijatelja prevodioca Vasilija - on dođe i sjedne pored Engleza na stolicu. A ti kažeš - Prevedi: "Steve, idi i zatvori prozor, a onda se zavali na stolicu!" Prevodilac prevodi na engleski - Englez razume i ode i zatvori prozor, a onda dođe i sedne na stolicu.
U ovom trenutku, samo trebate razumjeti ulogu asemblera u ovom lancu „Mi-Assembler-Controller“
Odnosno, kako bi svi shvatili šta je asembler? Onda čitajte dalje.
***
Dakle, zamislimo ovu situaciju. Kažeš Vasji - "Slušaj, ukratko, to je tako - zaboravio sam kalkulator kod kuće, podijeli 56983 sa 2 i reci Steveu da napravi toliko sklekova šakama" i Vasja računa na kalkulator i kaže Steveu na engleskom “Radi sklekove sa šakama 28491 puta” To se zove "DIREKTIVE"- drugim riječima, direktiva je zadatak za Vasju, čiji je rezultat Steveova akcija.
Postoji još jedna situacija - kažete Vasji "Reci Steveu da uradi 28491 sklekova" i Vasja jednostavno prevodi vaše riječi na engleski. To se zove OPERATOR
Jednostavno je - postoji direktiva i postoji operator. Operater je vaša direktna instrukcija Steveu šta da radi - Vasya ovdje samo prevodi vaš zahtjev na engleski. A Direktiva je zadatak za samog Vasju - i Vasja prvo uradi ono što si mu rekao, a onda, u zavisnosti od rezultata, nešto kaže Stivu.
Sad ćemo redovno mučiti Engleza! Ali prvo moramo bolje upoznati našeg prevodioca Vasju. Morate znati sljedeće - Vasja vas uvijek bespogovorno sluša - ono što mu je rečeno, on radi. Vasjin kalkulator nema decimalna mjesta - ako pogledate primjer sa sklekovima, onda je 56983 \ 2 = 28491,5 - ali Vasjin sve nakon decimalnog zareza je odsječen - i on vidi samo cijeli broj - i nije važno da li će biti 28491,000001 ili će biti 28491,9999999 - za Vasju je ovo jedna velika stvar biće 28491 u oba slučaja. Ništa nije zaokruženo. Važnije informacije o Vasyi. Vasja je okrutan - nije ga briga što Steve jebeno radi sklekove dvadeset osam hiljada puta. Rekli su mu da Vasja prevodi. I ne samo da je prevodio, već me je i tjerao da radim ono što ste tražili. Dakle, ako Steve umre na dvadeset tri hiljade petsto trinaestom skleku, to će biti u potpunosti tvoja krivica.
Zapravo, to je sve za sada. U sljedećem postu ćemo kopati dublje - za sada je dovoljno samo ovo razumjeti. Zamislite samo ovu situaciju i shvatite šta je šta, ko igra koju ulogu i po čemu se direktiva razlikuje od operatera.
A onda ćemo pokušati sve nazvati pravim imenom i otprilike procijeniti kako asembler radi s mikrokontrolerom kao odrasla osoba.
80.000 rubalja).
DODATI
Sintaksa: ADD reg1, reg2 Ova komanda dodaje sadržaj registara reg1 i reg2, pohranjujući rezultat u registar reg1. Mijenja stanje H, S, V, N, Z, C zastavica.I
Sintaksa: I reg1, reg2 Ova naredba izvodi logičku operaciju I između registara reg1 i reg2, pohranjujući rezultat u registar reg1. Mijenja stanje zastava S, V, N, Z.I JA
Sintaksa: ANDI hreg, broj Ova naredba izvodi logičku AND operaciju između sadržaja visokog registra hreg i konstantnog broja (0...255), pohranjujući rezultat u registar. Mijenja stanje zastava S, V, N, Z.BRBC
Sintaksa: BRBC bit, oznaka Ova komanda provjerava stanje bita registra SREG ($3F) i skače na oznaku ako je bit čist. Oznaka mora biti unutar 63 komande naredbe brbc.BRBS
Sintaksa: BRBS bit, oznaka Ova komanda provjerava stanje bita registra SREG ($3F) i skače na oznaku ako je bit postavljen. Oznaka mora biti unutar 63 komande brbs komande.BRCC
Sintaksa: BRCC bit, oznaka Ova naredba provjerava oznaku za nošenje (C) i skače na oznaku ako je čista.BRCS
Sintaksa: BRCS bit, oznaka Ova naredba provjerava nosivu zastavicu (C) i skače na oznaku ako je postavljena.BREQ
Sintaksa: BREQ bit, oznaka Ova komanda provjerava nultu (Z) zastavicu i skače na oznaku ako je postavljena.BRNE
Sintaksa: BRNE bit, oznaka Ova komanda provjerava nultu (Z) zastavicu i skače na oznaku ako je čista.C.B.I.
Sintaksa: CBI ioreg, bit Ova komanda resetuje bit I/O registra ioreg ($00...$1F) na 0. Broj bita određuje bitni operand.CLR
Sintaksa: CLR reg Ova komanda resetuje sve bitove reg registra na 0. Mijenja stanje S, V, N, Z zastavica.C.P.
Sintaksa: CP reg1, reg2 Ova komanda upoređuje sadržaj registara reg1 i reg2 oduzimanjem reg2 od reg1. Sadržaj registara se ne mijenja. Mijenja stanje H, S, V, N, Z, C zastavica.CPI
Sintaksa: CPI hreg, broj Ova naredba upoređuje sadržaj registra hreg sa brojevnom konstantom oduzimanjem konstante iz registra. Sadržaj registara se ne mijenja. Mijenja stanje zastavica H, S, V, N, Z, C. Komanda radi samo sa registrima R16…R31.DEC
Sintaksa: DEC reg Ova komanda smanjuje sadržaj registra reg za jedan, upisujući rezultat nazad u registar. Mijenja stanje zastava S, V, N, Z.IN
Sintaksa: IN reg, ioreg Ova naredba prenosi sadržaj I/O registra ioreg u RON reg.INC
Sintaksa: INC reg Ova komanda povećava sadržaj registra reg za jedan, upisujući rezultat nazad u registar. Mijenja stanje zastava S, V, N, Z.LD
Sintaksa: LD reg, longreg Ova komanda učitava jedan bajt iz memorije podataka (adresa memorije sadržana u dužem registru) u registar reg (za model 1200).LDI
Sintaksa: LDI hreg, broj Ova naredba učitava neposrednu vrijednost broja u visoki registar hreg (komanda može raditi samo sa registrima R16...R31). Broj mora biti u rasponu od 0…255.LSR
Sintaksa: LSR reg Ova komanda vrši logički pomak udesno sadržaja registra reg. U ovom slučaju, 0. bit se kopira u C zastavicu, 7. bit se resetuje na 0. Mijenja stanje S, V, N, Z, C zastavica.ORI
Sintaksa: ORI hreg, broj Ova naredba izvodi logičko ILI operaciju između sadržaja visokog registra hreg i brojčane konstante (0...255), pohranjujući rezultat u registar. Mijenja stanje zastava S, V, N, Z.OUT
Sintaksa: OUT ioreg, reg Ova naredba prenosi sadržaj registra opće namjene reg u I/O registar ioreg.RCALL
Sintaksa: RCALL oznaka Ova naredba poziva potprogram identificiran oznakom, koji mora biti unutar 2048 naredbi naredbe rcall (relativni poziv).RET
Sintaksa: RET Ova naredba se vraća iz potprograma skakanjem na naredbu koja slijedi originalnu naredbu poziva.RETI
Sintaksa: RETI Ova komanda se vraća iz potprograma i postavlja opštu oznaku za omogućavanje prekida.RJMP
Sintaksa: RJMP oznaka Relativni skok. Skoči na dio programa označen oznakom, koji mora biti unutar 2048 od RJMP komande.SBI
Sintaksa: SBI ioreg, bit Ova naredba postavlja I/O registrski bit ioreg ($00...$1F) na 1. Broj bita određuje bitni operand.SBIC
Sintaksa: SBIC ioreg, bit Ova komanda provjerava I/O registrski bit ioreg ($00...$1F) i preskače sljedeću naredbu ako je ovaj bit čist. Broj bita određuje bitni operand.SBIS
Sintaksa: SBIS ioreg, bit Ova komanda provjerava I/O registrski bit ioreg ($00...$1F) i preskače sljedeću naredbu ako je taj bit postavljen. Broj bita određuje bitni operand.SEI
Sintaksa: SEI Ova komanda postavlja opštu oznaku za omogućavanje prekida.SER
Sintaksa: SER reg Ova komanda postavlja sve bitove reg registra na 1. Mijenja stanje oznaka S, V, N, Z. Komanda može raditi samo sa registrima R16...R31.ST
Sintaksa: ST reg, longreg Za model 1200, ova komanda pohranjuje sadržaj reg registra u memoriju podataka (memorija je sadržana u dužem registru), tj. indirektno prosljeđuje sadržaj PON reg na adresu pohranjenu u dužem registru.SUBI
Sintaksa: SUBI hreg, broj Oduzima konstantni broj iz visokog registra hreg. Rezultat se pohranjuje u isti registar. Mijenja stanje zastavica H, S, V, N, Z, C. Komanda može raditi samo sa registrima R16…R31.Revich Yu. V.
Praktično programiranje Atmel AVR mikrokontrolera na jeziku
asembler - 2. izd., rev. -
Navedeni su principi rada, arhitektonske karakteristike i tehnike
programiranje Atmel AVR mikrokontrolera. Dostupni su gotovi recepti
za programiranje osnovnih funkcija moderne mikroelektronske opreme
Ratura: od odgovora do pritiska na dugme ili konstrukcije dinamičkog prikaza
na složene protokole za snimanje podataka u eksternu memoriju ili karakteristike
veza sa satom u realnom vremenu. Posebna pažnja se poklanja razmjeni podataka
dati su numerički mikroelektronski uređaji sa personalnim računarom
primjeri programa. Knjiga uzima u obzir karakteristike modernih AVR modela i ko-
putujuća mikro kola iz poslednjih godina proizvodnje. Aplikacije sadrže osnovne
parametri AVR mikrokontrolera, lista komandi i programski tekstovi za njih,
kao i spisak korištenih termina i skraćenica.
Za studente, inženjere i radio amatere
Grupa za pripremu publikacije:
Glavni urednik
Ekaterina Kondukova
zamjenik glavni i odgovorni urednik
Igor Shishigin
Glava od strane uredništva
Grigorij Dobin
Urednik
Yuri Rozhko
Raspored računara
Olga Sergienko
Korektor
Zinaida Dmitrieva
Dizajn korica
Elena Belyaeva
Glava proizvodnja
Nikolay Tverskikh
Mikrokontroleri, njihovo porijeklo i primjena ........................................................ ........ 7
Pozadina mikrokontrolera.................................................. ................................................................ ................. 8
Elektronika u grčkom stilu.................................................. ........................................................ ............ ... 10
Zašto AVR? ................................................................ ........................................................ ............................................ 12
DIO I. OPŠTI PRINCIPI UREĐAJA
I RAD ATMEL AVR ................................................... ........................ 17
Poglavlje 1. Pregled Atmel AVR mikrokontrolera ........................................ ........ 19
AVR porodice ................................................. .... ................................................ ........................................ 21
Karakteristike praktične upotrebe AVR MK .............................................. ........................ 23
O potrošnji................................................................ ................................................... ........................ 23
Neke karakteristike korištenja AVR-a u krugovima.................................................. ................................ 25
Poglavlje 2. Opšta struktura, organizacija memorije, taktiranje, resetovanje......... 27
Programska memorija................................................................ ........................................................ ........................................ 27
Memorija podataka (RAM, SRAM) .............................................. .... ................................................ ........................ 29
Nestalna memorija podataka (EEPROM) ................................................ ........................................ 31
Metode sata ................................................................ ........................................................ .............................. 32
Resetovati................................................ . ................................................................ ........................................................ 34
Poglavlje 3: Uvod u periferne uređaje................................................ ........ 37
I/O portovi.................................................. ........................................................ .................................... 38
Tajmeri-brojači................................................... ........................................................ ........................................ 39
Analogno-digitalni pretvarač.................................................. ........................................................ 41
Serijski portovi................................................................ ................................................... ........................ 42
UART................................................................ .. ................................................ ........................................ 43
SPI interfejs ................................................................ ................................................... ........................ 46
TWI interfejs (I
C) ................................................................ ................................................ ..... ..... 50
Univerzalni serijski interfejs USI .............................................. ........................... 50
Poglavlje 4. Prekidi i načini uštede energije........................................ .......... 53
Prekidi................................................ ........................................................ ................................................ 53
Vrste prekida.................................................................. ................................................................ ........................ 57
Režimi uštede energije ................................................. ................................................................ ........................ 58
DIO II. PROGRAMIRANJE MIKROKONTROLERA
ATMEL AVR ................................................... ................................................... ........................ 61
Poglavlje 5. Opšti principi programiranja MCU-a AVR familije ................................ 63
Skupština ili C? ................................................................ ........................................................ ............ 63
Metode i alati AVR programiranja ................................................. ........................................ 67
Urednik koda................................................ ................................................... ........................................ 67
O AVR studiju ................................................. ........................................................ ........................................ 68
Raspored montažera ................................................. ........................................................ ................ ... 70
Programeri ................................................................ ........................................................ ............................ 71
O hex fajlovima................................................ ........................................................ ........................................ 75
Komande, uputstva i notacije AVR asemblera........................................ ........................................ 78
Brojevi i izrazi .............................................................. ........................................................ .............................. 79
Direktive i funkcije ................................................................ ................................................................... ........................ 80
Opšta struktura AVR programa ................................................. ........................................................ ......... 84
Rukovanje prekidima ................................................ ................................................... ........................................ 85
RESETOVATI ................................................. .... ................................................ ........................................ 89
Najjednostavniji program.................................................................. .... ................................................ ........................ 90
Kašnjenje................................................ ................................................................ ........................................ 92
Kontra program ................................................................ ........................................................ ........................ 94
Korišćenje prekida.................................................................. ................................................................ ........................ 96
Kašnjenje tajmera ................................................ ........................................................ .......................... 97
Program brojača koji koristi prekide.................................................. ........................ 98
O konfiguracijskim bitovima................................................... ................................................................... .......................... 101
Poglavlje 6. AVR komandni sistem ........................................ ........................................ 105
Upute za prijenos kontrole i registar SREG ...................................................................... 105
Naredbe za provjeru i prolaz.................................................. ................................................... ........................ 111
Komande logičkih operacija ................................................. ................................................................... .......................... 113
Instrukcije pomaka i bitne operacije ................................................. ........................................................ 114
Uputstva za aritmetičke operacije ................................................. .................................................... 116
Komande za prijenos podataka.................................................. ................................................................... ........................ 118
Komande za kontrolu sistema.................................................. ........................................................ ................ 122
Izvršavanje standardnih procedura u asembleru.................................................. .................................................... 123
O stogu, lokalnim i globalnim varijablama .................................................. ........................................ 125
Poglavlje 7. Aritmetičke operacije.................................................. ........................................ 127
Standardne aritmetičke operacije.................................................................. ................................................................... ..... 128
Množenje višecifrenih brojeva.................................................. ................................................................... ...... 129
Deljenje višecifrenih brojeva.................................................. ........................................................ .............. 131
Operacije sa razlomcima brojeva ................................................. ........................................................ 134
Generator slučajnih brojeva.................................................. ................................................................ ...... ...... 136
Operacije sa brojevima u BCD formatu ........................................ ........................................................ ..... 138
Negativni brojevi u MK.................................................. ........................................................ ........................ 143
Poglavlje 8. Programiranje tajmera.................................................. ........................ 147
8- i 16-bitni tajmeri........................................ ........................................................ ........................ 147
Formiranje date frekvencijske vrijednosti ................................................. ........................................ 149
Odbrojavanje ................................................ ................................................................ ........................................................ 153
Precizna korekcija vremena ................................................. ................................................................... ........................ 158
Merač frekvencije i merač perioda................................................... ........................................................ ............ 160
Merač frekvencije ................................................ ................................................... ........................................ 160
Mjerač perioda ................................................ ........................................................ ........................................ 164
Dinamička kontrola prikaza ................................................. ................................................................... ...... 167
LED indikatori i njihova veza ................................................. ........................................ 168
Programiranje dinamičkog prikaza ................................................. ................................... 171
Tajmeri u PWM modu .............................................. ........................................................ ............ 174
Poglavlje 9. Upotreba EEPROM-a ........................................ ........................................ 179
Još jednom o sigurnosti podataka u EEPROM-u ........................................ ........................................ 179
Pisanje i čitanje EEPROM-a ................................................... ........................................................ ............ 181
Pohranjivanje konstanti u EEPROM ................................................................ ................................................................ ........................ 183
Poglavlje 10. Analogni komparator i ADC........................................ ........................ 187
Analogno-digitalne operacije i njihove greške ........................................ ........................................ 187
Rad sa analognim komparatorom.................................................. ................................................................... ............. 190
Integracija ADC-a na komparator................................................ .................................................... 193
Princip rada i formule proračuna.................................................. ........................................ 194
Integracija ADC programa.................................................. ................................................................... ...... 198
Ugrađeni ADC.................................................. ........................................................ ........................................ 201
Primjer korištenja ADC-a................................................. ................................................................ ...................... .... 204
Program................................................................ ................................................................ ........................................ 206
Poglavlje 11. SPI programiranje ................................................. ........................................ 215
Osnovne operacije preko SPI ................................................ ........................................................ ............................ 215
Hardverska opcija................................................. ................................................... ........................ 216
Softverska opcija................................................. ................................................... ........................ 218
O vrstama nepromjenjive memorije........................................................ ........................................ 219
Upisivanje i čitanje fleš memorije putem SPI-a ................................................. ........................................................ .. 221
Program za razmjenu sa memorijom 45DB011B preko SPI ................................ .... ............... 224
Pisanje i čitanje fleš kartica.................................................. ........................................................ ............ ................ 225
Povezivanje MMS kartica.................................................. .... ................................................ .......... 225
Podnošenje komandi i inicijalizacija MMC-a.................................................. ........................................ 228
Snimanje i čitanje MMS-a.................................................. ........................................................ ........ 232
Poglavlje 12. TWI interfejs (I
C) i njegova praktična upotreba................ 237
Osnovni protokol I
C ................................................................ ................................................ ...... ......... 237
Softverska emulacija protokola I
C ................................................................ ........................ 240
Zapisivanje podataka u vanjsku nepromjenjivu memoriju ........................................ ........................ 241
Načini razmjene sa AT24 memorijom ........................................ ........................................................ 241
Program................................................................ ................................................................ ........................................ 243
Sat sa interfejsom I
C ................................................................ ................................................ ...... .... 247
Snimanje podataka ................................................ ........................................................ ........................ 255
Čitanje podataka................................................ ........................................................ ........................ 259
Poglavlje 13. UART/USART programiranje .............................................. ............ 261
UART inicijalizacija ................................................ ................................................... ........................ 262
Prijenos i prijem podataka ................................................. ........................................................ ........................ 263
Primjer podešavanja sata DS1307 pomoću UART-a ................................................ ........................ 266
Tehnike zaštite od kvarova u komunikaciji.................................................. ........................................ 271
Provjera pariteta ................................................ ................................................... ........................ 271
Kako organizovati ispravnu razmenu ................................................ ........................................................ ........ 273
Dodatne USART karakteristike ................................................. .................................................... 274
Implementacija RS-232 i RS-485 interfejsa ........................................ ............................................................ ..... 276
Konvertori nivoa za RS-232 ........................................ ......................................... 280
RS-485 ................................................. ........................................................ ........................................ 283
Poglavlje 14. Režimi uštede energije i Watchdog tajmer ................................ 285
Programiranje režima za uštedu energije ................................................. .................................................... 286
Primjer uređaja na baterije ........................................ ........................................ 287
Finalizacija programa ................................................................. ........................................................ ........................ 289
Korištenje watchdog tajmera ................................................. ........................................................ ........ 293
APLIKACIJE ................................................................ ........................................................ ........................ 299
Dodatak 1. Osnovni parametri Atmel AVR mikrokontrolera .......... 301
Dodatak 2. Atmel AVR komande ........................................ ........................................ 309
Aritmetičke i logičke komande.................................................................. ........................................ 310
Uputstva za bitne operacije ................................................. ................................................................... .......................... 311
Naredbe za poređenje ................................................................ ................................................... ........................ 312
Komande za prijenos kontrole ................................................ ........................................................ ............... .313
Komande za bezuslovni skok i pozivanje potprograma......................................... .......... 313
Upute za provjeru-preskakanje i instrukcije za uslovno preskakanje.......................................... .................... 314
Komande za prijenos podataka.................................................. ................................................................... ........................ 315
Komande za kontrolu sistema.................................................. ........................................................ ................ 316
Dodatak 3. Programski tekstovi.................................................. ........................................ 317
Flash Communication Demo Program 45DB011B
preko SPI interfejsa................................................ .... ................................................ ........................................ 317
Procedure razmene interfejsa I
C ................................................................ ........................ 321
Dodatak 4. Razmjena podataka sa personalnim računarom
i programi za otklanjanje grešaka putem UART-a ........................................ ........................................ 329
Rad sa COM portom u Delphiju ................................................ ................................................... ......... 329
Instaliranje RTS linije u DOS-u i Windows-u ............................................ ........................................................ 335
COM2000 program ................................................... ................................................... ........................ 337
Otklanjanje grešaka u programima pomoću emulatora terminala.................................. ........ ................. 339
Dodatak 5. Rječnik najčešće korištenih skraćenica i pojmova.......... 341
Književnost ................................................................. ................................................................ ........................ 347
Predmetni indeks ................................................ ................................................. 349
UVOD
mikrokontroleri,
njihovo porijeklo i primjena
Kažu da je 1960-ih gledao učesnike studentskih demonstracija
protestu, Gordon Moore je primijetio: "Mi smo pravi revolucionari." Studenti
zaposlenik jednog od pronalazača tranzistora, W. Shockleya, između ostalog,
skriveni osnivač čuvene Silicijumske doline, zauzvrat osnovan
tel i lider kompanija koje su bile predodređene da imaju vodeću ulogu u razvoju
mikroelektronike, Moore je znao o čemu govori. Paradoksalno, jeste
izumi Moorea i njegovih saradnika bili su predodređeni da postanu osnova tog svijeta
u kojoj su se kasnije koncentrisale aktivnosti „pobunjene omladine“.
1960-ih Moderni hakeri (ne kompjuterski huligani iz novina, već pravi)
informatičari strastveni za svoj posao) - direktni ideološki nasljednici
Studenti Sorbone i američki demonstranti, koji su promijenili moto „Napravi
ljubav ne rat"
na "Ne piši slogane - piši kod." Nije slučajno što su mnogi poznati
istaknute ličnosti u industriji elektronskih računara, autori izuma, osnivači
koji su oblikovali lice savremenog svijeta - dolaze iz sredine koja je bliska toj "buli-
malaksala mladost."
Naša priča o mikrokontrolerima počela je činjenicom da je 1957. godine Gordon Moore ko-
zajedno sa Robertom Nojsom, koji je kasnije postao jedan od pronalazača mikrofona
roschemy, i još šest zaposlenih u Shockley Semiconductor Labs (Shockley zove
njihova "izdajnička osmica"), osnovao kompaniju Fairchild Semiconductor. Njoj mi
duguju ne samo razvoju tržišta poluvodiča i uvođenju mikrokola
u inženjersku praksu, ali i zato što je postala svojevrsna kovačnica kadrova i
generator ideja za mladu industriju.
Evo samo nekih istorijskih činjenica. Moore i sam Noyce kasnih 1960-ih
stvorio kompaniju Integrated Electronics, koja je pod skraćenim imenom Intel
sada poznato svakom školarcu. Jeremy Sanders, osnivač još jedne poznate
najveća kompanija - AMD, takođe je napustio Fairchild, gde se istakao otvaranjem ko-
privremeni ekonomski model za proizvodnju i prodaju poluprovodnika
komponente, u kojima cijena proizvoda teži nuli kako raste
“Vodite ljubav, a ne rat” bio je slogan hipija iz 1960-ih koji su protestirali protiv rata u Vijetnamu.
Uvod
promenite zapreminu serije. Charlie Spork, jedan od Fairchildovih ključnih menadžera, 1967
postao direktor kompanije National Semiconductor, koju je kasnije vodio jednu četvrtinu
veka. Polovina od "izdajničke osmorice" - Gene Hoerney, Evgeniy Kleiner,
Jay Last i Sheldon Roberts - osnovali su Amelco 1961. godine, iz kojeg
kasnije su izrasli sada dobro poznati Intersil, Maxim i Ixys. Zaposleni
Fairchildu dugujemo Robertu Widlaru izum operacionih pojačala -
varijante mikro krugova, i do danas samo drugo po popularnosti
mikroprocesori. Štaviše, istorija Fairchilda povezana je s pojavom slavnih
novi model venture (tj. „rizično”) finansiranja, koji je odigrao odlučujuću ulogu
važnu ulogu u razvoju svih industrija vezanih za elektroniku, računare i
telekomunikacije. Nije uzalud što se Fairchild često naziva "pramajkom sve struje".
tronics".
Pozadina mikrokontrolera
Od svega ovog uragana događaja, ono što je važno za naš narativ jeste da je među
druge inovacije, zaposleni u Fairchild-u su bili prvi koji su promovisali poluprovodnike
krivotvorena memorija. Sada, u doba CD-ova i DVD-ova, tvrdih diskova i fleš kartica, mi
Teško je zamisliti da su ranih 1960-ih kompjuterski programi
pohranjeni su uglavnom na kartonskim listovima (bušenim karticama), konstruktorima za otpad
da li vam je glava preko skupih RAM modula na živinim linijama za kašnjenje, osciloskop
grafičke cijevi i feritni prstenovi, gdje je svaki bit ručno „prošiven“.
br. Najkompaktniji elektronski uređaj tih godina za pohranjivanje podataka na
magnetni diskovi pod nazivom RAMAC 305 sa kapacitetom od 5 MB bili su veličine
sa industrijskim frižiderom i iznajmljivan je za 5 hiljada dolara mesečno.
Jedina "zraka svjetlosti" u mračnom kraljevstvu ovih čudovišta bio je izum
Američki zaposlenik Bosch Arma Corporation Yen Chow, koji je 1956. primio
patent za uređaj koji je sada poznat kao "jednokratni programabilni ROM"
(OTP ROM
). U ovom patentu, inače, prvi put je upotrijebljen termin
"burn" - mikromodul se sastojao od matrice sa topljivim džamperima, koji
koji su izgorjeli tokom programiranja primjenom visokog napona na njih.
OTP ROM-ovi su dugo vremena ostali jedini uređaji za kompaktnost
skladištenje podataka, i nisu izgubili svoje značenje sve do nedavno -
najmanje četvrtina mikrokontrolera u svijetu, posebno onih koji su jednostavniji, do
se još uvijek proizvodi samo s takvim jednokratnim programiranim ugrađenim programom
naborana, zbog svoje ekstremne jeftine. I tek poslednjih godina je „pregorelo“ pa-
memorija je počela postepeno da se zamenjuje praktičnijom fleš memorijom, kada je ova druga
je toliko pojeftinio da gotovo da nema smisla koristiti OTP ROM.
No, vratimo se u šezdesete godine. Kompaktna poluvodička memorija je bila apsolutno potrebna
svi ga vole - od vojske i NASA-e do proizvođača kućanskih aparata. Kao prvo
Fairchild je predstavio ono što se danas naziva DRAM, posebno na takvim mikro-
Ruska kola (32.768 čipova sa kapacitetom od 256 bita svaki) izgrađena je memorija banera
Za objašnjenja nekih skraćenica, vidi Dodatak 5.
filamentni superkompjuter ILLIAC-IV, konkurent domaćem BESM-6. Osjetivši
na koji način vjetar duva, 1968. Moore i Noyce napuštaju Fairchild i osnivaju Intel, kao
specijalizovana kompanija za razvoj i proizvodnju memorije. Još nisu
znao da Intelov najpopularniji proizvod uopšte neće biti memorija, već mala
uređaj (slika B1), nazvan mikroprocesor, čiji je razvoj bio prvenstveno
je u početku zamišljen kao pomoćna faza u dizajnu konvencionalnog računa
Tora.
Rice. U 1. Mikroprocesor
I
IZUM MIKROPROCESORA
Godine 1969. nekoliko ljudi iz Busicoma, mlade japanske kompanije, pojavilo se u Intelu.
istraživački institut koji se bavi proizvodnjom kalkulatora. Trebao im je set od 12 inte-
gral šeme kao glavni element novog jeftinog desktop kalkulatora -
Tora. Projekat je razvio Masatoshi Shima, koji je predstavljao japansku kompaniju
Ron. Ted Hoff (Marcian E. Ted Hoff, r. 1937), šef odjela uključenog u
razvijajući aplikacije za Intelove proizvode, upoznavši se sa projektom, shvatio sam to
umjesto kreiranja kalkulatora sa nekim programskim mogućnostima
programiranje, možete učiniti suprotno, kompjuter programiran da radi kao
kalkulator. Razvijajući ideju, u jesen 1969. godine, Hoff se odlučuje za umjetnost
arhitektura budućeg mikroprocesora. U proljeće je Hoffa došao na odjel (svi iz istog
Fairchild, nama već poznat), novi zaposlenik Frederico Faggin, koji
ry i smislio ime za cijeli sistem: “porodica 4000”. Porodica se sastojala
od četiri 16-pinska čipa: 4001 sadrži 2 KB ROM-a; 4002 - RAM sa
4-
bit izlazni port za preuzimanje programa; 4003 je bio 10-bitni
I/O ekspander sa serijskim ulazom i paralelnim izlazom
dom za komunikaciju sa tastaturom, indikatorom i ostalim eksternim uređajima; kako god-
4004 je bio 4-bitni CPU (centralna procesorska jedinica). Ovo je CPU
sadržavao je 2300 tranzistora i radio na taktnoj frekvenciji od 108 kHz. 15. novembra
1971
Najavljeno je stvaranje prvog mikroprocesora. Kupljena kompanija Busicom
razvoj, plativši Intelu 60 000 dolara. Ali Intel je odlučio vratiti ovaj novac Busicomu,
da povrati prava na mikroprocesor.
i4004 je imao računarsku snagu uporedivu sa prvim elektronskim računarom.
Yuter ENIAC (1946). 4004 je našao svoju prvu praktičnu primenu u sistemu
kontrola semafora i analizatora krvi. Ovaj mikroproces
sor je korišten u brodskoj opremi interplanetarne sonde Pioneer-10, koja
ry je postavio rekord dugotrajnosti među sličnim uređajima: lansiran je u
1972
, a do septembra 2001. Pioneer-10 se udaljio 11,78 milijardi km od Zemlje i još uvijek je
radio i, vrlo vjerovatno, radi do danas, iako je u februaru 2003. NASA zvanično
društveno se oprostio od njega.
Uvod
Tako je započeo pobjednički marš mikroprocesora, koji su se kasnije razdvojili
u nekoliko varijanti, uglavnom koje pripadaju dvije glavne grupe:
sami mikroprocesori (MP) i mikrokontroleri (MC). Prvi
namenjeni su za upotrebu kao deo računarskih sistema, najčešćih
od kojih su većina personalni računari (PC), pa se i dalje često koriste
se nazivaju “PC procesori” (iako ova grupa obično uključuje i proizvedene
drajver MP za servere i neke druge). MK se po tome razlikuje od MP
da su prvenstveno dizajnirani za kontrolu različitih sistema,
stoga, sa relativno slabijim računarskim jezgrom, oni uključuju
postoji mnogo dodatnih čvorova. Činjenica da se za konvencionalnog poslanika pretpostavlja da je
rezervni u eksternim setovima čipova ili dodatnim modulima (memorija, ulazni portovi)
izlaz, tajmeri, kontroleri prekida, čvorovi za obradu analognog signala
ribolov itd.), u MK se nalazi direktno na čipu, zbog čega su nekada bili moderni
nazovite ga "mikrokompjuterom".
Zaista, u najjednostavnijem slučaju, izgraditi potpuno funkcionalan
za kompjuter, jedan MK čip sa povezanim
ulazno/izlaznih uređaja povezanih na njega. Moderni modeli običnih monokristala
čelični MK-ovi premašuju računarske mogućnosti IBM PC AT na 286.
procesor druge polovine 1980-ih. Postoje područja gdje je granica između MP i
MK je teško izvesti: takvi su, na primjer, procesori za mobilne uređaje, od
telefona i džepnih računara do digitalnih fotoaparata u kojima je procesor
čvor mora imati napredne računarske funkcije i upravljati višestrukim
brojne vanjske komponente.
Elektronika u grčkom stilu
1962. godine porodica Perlegos, grčki emigranti rođeni u
stanovnici grada Tripolisa. Roditelji su se bavili vinogradarstvom, kao u zavičaju, i sinovi
Novya, George i Gust Perlegos, odabrali su moderan specijalitet inženjerstva
inženjer elektronike: obojica su diplomirali prvo na Univerzitetu San Jose, a potom i na Stanfordu
univerzitet. Godine 1974., u dobi od 24 godine, najmlađi od braće George Perlegos,
Počeo je raditi u Intelu, gdje se našao u jednoj od najnaprednijih oblasti:
razvoj električne memorije koja se može izbrisati za zamjenu urezanog OTP ROM-a.
Čak i prije Perlegosa, gotovo istovremeno sa pronalaskom mikroprocesora 1971.
Zaposlenik Intela Don Frohman izumio je plutajuću kapu i stvorio prvi UV
2K izbrisivi EPROM (256 8).
Z
NAPOMENE NA MARGINI
U „običnom“ životu koristite skraćenice za jedinice informacija koje se sastoje od jednog slova
"K" (kao ni "M") se ne preporučuje: ponekad je vrlo teško shvatiti da li je
o kilobitima, kilobajtima, "kiloriječima" ili općenito kilobitima u sekundi. Ipak
takve se kratice često nalaze, uključujući iu tehničkoj dokumentaciji, a mi ćemo doći
Ponekad pokušavam slijediti ovaj primjer. Radi određenosti prihvatamo sljedeća pravila:
la: jedno veliko slovo "K" označava binarne kilobite (1024 bita), "M" označava binarne kilobite
binarni megabiti (1024 kbita). Iako se u literaturi često i dalje prihvata da su kilobajti
skraćeno kao "KB" i kilobita kao "KB", pokušaćemo da izbegnemo ovu zabunu, a u
Mikrokontroleri, njihovo porijeklo i primjena
U svim ostalim slučajevima upišite u cijelosti: kbyte i MB, kbit/s, MB/s. osim-
će biti oznaka količine memorije programa mikrokontrolera ako je proizvedena
mjereno u dvobajtnim riječima: na primjer, 4K riječi će značiti 4096 ćelija -
riječi (8 kbajta).
George Perlegos je bio aktivno uključen u ovaj proces, prvo svojim učešćem, i
tada su pod njegovim direktnim rukovodstvom stvorene dvije tehnologije,
koje su postale tačka rasta za čitavu industriju fleš memorija – jedna od
glavni stubovi moderne "digitalne revolucije". Prvo je izmišljen
čip 2716 - 16K (2048 8) EPROM sa jednim naponom napajanja +5 V, a zatim
2816 - prvi EEPROM, električni ROM koji se može izbrisati, koji je postao prototip
fleš memorija.
Godine 1981. Perlegos je napustio Intel i sa nekoliko zaposlenih (uključujući
bio je Gordon Campbell, budući tvorac još jedne poznate kompanije Chips &
Technologies) stvara kompaniju Seeq. Bilo je to vrijeme pada elektronske industrije.
industrijalizacije i tri godine kasnije kompanija je morala napustiti zbog potraživanja
mi investitori. Ne vjeruju im više, George i njegov brat Gust i nekoliko drugih
1984. godine, sa zaposlenima Seeq-a, stvorili smo kompaniju ličnim sredstvima,
čije puno ime zvuči kao Advanced Technology MEmory and Logic ili
skraćeno Atmel.
U početku su Atmelovi proizvodi bili nepostojani memorijski čipovi svih vrsta
nove funkcije - kao što su OTP EPROM i EEPROM sa serijskim i paralelnim
pristup i Flash. 1985. Atmel je objavio prvi na svijetu EEPROM kod kuće.
današnja CMOS tehnologija u nastajanju, a 1989. prva fleš memorija sa pogonom
od jednog napona +5 V. Krajem 1980-ih, Intel je krenuo da kazni brojne kompanije
Kompanije za proizvodnju EPROM-a, uključujući Atmel, zbog navodnog kršenja patenata,
ali je na kraju bilo moguće dogovoriti razmjenu dozvola. I na kraju-
Na kraju, Atmel je dobio licencu za proizvodnju klasičnih mikrokontrolera.
ler 8051, od čije podrške se Intel već u to vrijeme postepeno udaljavao, koncentrisao se
usavršavanje na PC procesorima.
P
DETALJI
Podsjetimo da se EEPROM razlikuje od flash memorije po tome što prva dozvoljava
odvojen pristup bilo kojoj proizvoljnoj ćeliji, a drugi - samo cijelim blokovima. By-
ovaj EEPROM je manje zapremine (tipična zapremina specijalizovanih mikro-
EEPROM kola - od jedinica kilobita do jedinica megabita) i skuplje, trenutno
koristi se uglavnom za skladištenje podataka, uključujući i kao dio mikrokontrolera
Lerov. Flash memorija je jednostavnija i jeftinija, a također pruža značajan dobitak u brzini.
rast sa velikim količinama informacija, posebno sa strimovanjem čitanja/pisanja,
tipično za medijske uređaje (kao što su digitalni fotoaparati ili MP3 plejeri). Uključeno
Flash memorija mikrokontrolera se koristi za pohranjivanje programa. Neki detalji
Za više informacija o različitim vrstama memorije i njihovom funkcioniranju, pogledajte Poglavlje 11.
Tako se Atmel našao "uvučen" u broj proizvođača mikrokontrolera, u kojima
rum se vrlo brzo našao na prvim pozicijama: proizvodnja je počela 1993. godine
prvi u industriji MCU AT89C51 sa ugrađenom fleš programskom memorijom. Ovo znači
započela je revolucija u cjelokupnoj inženjerskoj praksi, jer postojeća
Ranije su MK-ovi imali ili jednokratnu programabilnu OTP memoriju, ili
Uvod
UV-perive, što je mnogo skuplje za proizvodnju i rad sa njim dovodi do
dovodi do velikog gubitka vremena programera. Broj ciklusa ponovnog pisanja za UV
PROM ne prelazi nekoliko desetina, a direktna dnevna svjetlost pada
takav kristal može dovesti do brisanja informacija. Stoga, čak i male
uređaji su morali biti proizvedeni prvenstveno pomoću
jedite OTP ROM, što je mnogo rizičnije: promijeniti u slučaju i najmanjeg
greške u snimljenom programu više nisu bile moguće. Pojava fleš memorije iz
promijenio cijeli „pejzaž“ na ovom području: kao rezultat njegovog uvođenja taj čelik
moguće stvari kao što je ažuriranje softvera BIOS-a računara ili "ponovno
rješavanje" upravljačkih programa za potrošačke elektronske uređaje.
1995. dva studenta sa Norveškog univerziteta nauke i tehnologije u Tron-
Heime, Alf Bogen i Vegard Wollen, došli su na ideju o 8-bitnom RISC jezgru, koje
koji je predložen menadžmentu Atmela. Imena programera uključena su u naziv umjetnosti.
AVR arhitekture: Alf + Vergard + RISC. Ideja mi se toliko dopala da je 1996
Atmel istraživački centar je osnovan u Trondheimu i već krajem istog
Prvi eksperimentalni mikrokontroler nove AVR serije tzv
AT90S1200. U drugoj polovini 1997. Atmel Corporation je započela serijski rad
proizvodnja AVR porodice.
Zašto AVR?
AVR kontroleri "od rođenja" imaju dvije karakteristike koje ih izdvajaju
porodica iz ostatka MK. Prvo, skup instrukcija i arhitektura AVR jezgre
razvijeni su zajedno sa kompanijom koja razvija kompajlere za pro-jezike
IAR sistemi za programiranje visokog nivoa. Kao rezultat, to je postalo moguće
pisati AVR programe u C-u bez velikog gubitka u performansama
u poređenju sa programima napisanim na asemblerskom jeziku. Više detalja o ovome
raspravićemo o tome Poglavlje 5.
Drugo, jedna od značajnih prednosti AVR-a bila je upotreba transportera
ra. Kao rezultat toga, ne postoji koncept mašinskog ciklusa za AVR: većina
komande se izvršavaju u jednom taktu. Za poređenje, napominjemo da oni koji koriste
MK-ovi PIC familije su veoma popularni; izvršavaju komandu u 4 takta, a klasa
sical 8051 - uglavnom u 12 ciklusa (iako postoje i moderni modeli X 51 sa ma-
sabirni ciklus u jednom ciklusu).
Istina, u isto vrijeme smo morali malo žrtvovati jednostavnost komandnog sistema,
posebno uočljivo u poređenju sa x 51, gdje su, na primjer, sve operacije prosljeđivanja
podaci unutar kontrolera, bez obzira na način adresiranja, izvode se na isti način
reprezentacija
u raznim varijantama, dok u AVR-u skoro za
Svaka metoda ima svoju naredbu, a ponekad i sa ograničenim opsegom djelovanja.
viya. Postoje određene poteškoće u području operacija sa bitovima. Međutim, to nije
dovodi do primjetnih poteškoća prilikom učenja AVR asemblera: naprotiv, tekstova
programi su kraći i više podsjećaju na program na visokom jeziku
nivo. Takođe treba uzeti u obzir da je od ukupnog broja ekipa od 90 do 130, zavisno
ovisno o modelu, samo 50-60 je jedinstveno, ostali su zamjenjivi.
Mikrokontroleri, njihovo porijeklo i primjena
I na kraju, ovaj nedostatak je potpuno eliminisan kada se koristi jezik C,
zapravo izjednačavanje različitih arhitektura u smislu pro-
programiranje
Velika prednost AVR arhitekture je prisustvo 32 operativna registra,
nisu potpuno jednaki, ali dozvoljavaju u nekim slučajevima da se ne okreću
RAM i ne koristiti stek (što je u osnovi nemoguće u istom
porodica X 51), štaviše, u nižim AVR modelima stek općenito nije dostupan
programer Stoga je struktura asemblerskih programa za AVR postala sumnjiva.
veoma liče na programe jezika visokog nivoa u kojima iskazi rade
ne sa memorijskim ćelijama i registrima, već sa apstraktnim varijablama i konstantama.
Još jedna karakteristika AVR-a sa stanovišta dizajna kola je da su svi pinovi unutra
mogu biti u tri stanja (ulaz - isključeno - izlaz) i električno
skije su CMOS strukture (tj. postoji simetrija izlaza
signala i visokog otpora za ulaz). Generalno, ovo je značajno
zgodnije od portova X 51 (bi-stabilan i TTL-kompatibilan) i predlaže bolje
otpornost na buku (barem od smetnji na zemaljskoj sabirnici).
Saževši mišljenja iz različitih izvora i na osnovu sopstvenog iskustva,
autor je došao do otprilike sljedeće podjele područja primjene od tri najviše
zajedničke porodice kontrolora.
Kontroleri klasične arhitekture X 51 (prva mikrokola porodice
8051 su objavljeni početkom 1980-ih) najbolji su za općenito
proučavanje predmeta. Imajte na umu da pored Atmela, X 51 kompatibilan proizvod koji vi-
Pokreće se još desetak kompanija, uključujući gigante kao što su Philips i
Siemens, postoje i domaći analozi (serije 1816, 1830 itd.), što čini ovaj
arhitektura je najuniverzalnija.
AVR porodica se preporučuje početnicima koji se bave elektronikom,
zbog jednostavnosti i svestranosti uređaja, kontinuitet strukture za
razne vrste kontrolera, jednostavnost dizajna kola i programiranja
(u ovom slučaju, "programiranje" znači proces snimanja programa
gram po čipu).
Microchip PIC-ovi su idealni za dizajniranje jednostavnih uređaja.
rojeve, posebno one namijenjene razmnožavanju.
Ova klasifikacija je uglavnom subjektivna i autor neće osporiti druge
stanovište: razne porodice MK postepeno se približavaju u parametrima,
postaju potpuno zamjenjivi i, kao u svim modernim elektrotehnikama
Nick, izbor jedne ili druge porodice često ima „religijski“ karakter.
Osim toga, tri navedene porodice MK su samo najčešće
među univerzalnim kontrolerima, ali daleko od najpopularnijih općenito. Generale
broj postojećih familija mikrokontrolera procjenjuje se na cca.
Zapravo više od 100, a svake godine ih je sve više. Svaki od
ove porodice mogu uključivati desetine različitih modela. Ujedno i prvo mjesto
među proizvođačima 8-bitnih MK-a tradicionalno pripada Motorola,
uglavnom zbog kontrolera za mobilne uređaje. Kompanija Microchip
Uvod
Sa svojom PIC porodicom zauzima treće mjesto, a Atmel tek šesti. pri čemu,
Pored 8-bitnih AVR MCU-ova, Atmel proizvodi još nekoliko tipova MCU-a,
koji uključuju ne samo pomenute nasljednike 8051, već i ARM-
procesori i specijalizirani mikrokontroleri za različite primjene. Ipak
ova formalna statistika još ništa ne znači - na primjer, među MK-ovima sa ugrađenim
Atmelova fleš memorija već posjeduje trećinu globalnog tržišta.
Još 2002–2003. u svijetu se godišnje proizvodilo 3,2 milijarde komada mikrokontejnera.
kolica. Imajte na umu da se obim proizvodnje PC procesora može procijeniti na
200 miliona jedinica godišnje, tj. to je samo oko 6% tržišta (u finansijskom smislu)
Uopšteno govoreći, međutim, omjer je drugačiji, jer je tipična cijena običnog MK-a
iznosi 2-5 dolara, a procesor za PC je barem red veličine veći, i
ponekad dostiže stotine dolara). Stoga, ne bi bilo pretjerano reći
da je specijalnost inženjera elektronike specijaliziranog za mikro-
kontrolera, nije ništa manje važan i oskudan od kompjuterskog programera -
sistemski inženjer ili kreator prilagođenih aplikacija.
Ova knjiga je namenjena čitaocu koji želi da proučava strukturu i dizajn kola
posebne karakteristike AVR MK i naučite kako pravilno koristiti njihove glavne funkcije
mogućnosti. Stoga se autor ograničava na asemblerski jezik (pročitajte više pitanje
Razmotrićemo izbor okruženja za programiranje Poglavlje 5). Naglasak u knjizi je
dati čitaocu praktičan savjet, opisati gotove algoritme za
tipični zadaci koji se javljaju kod programera prilikom implementacije određenih
MK funkcije. Autor, zajedno sa čitaocima, detaljno razmatra niz pitanja koja
obično nadilaze opseg MK priručnika za programiranje: rad sa naknadnim
praktični interfejsi, aritmetičke operacije, interfejs sa računarom, praktičan
tehnička implementacija režima uštede energije.
Istovremeno, autor nije imao namjeru da detaljno analizira apsolutno sve moguće -
STI MK AVR: čak i nekoliko tomova ne bi bilo dovoljno za ovo. Primorani smo da idemo okolo
pitanja kao što su otklanjanje grešaka i programiranje pomoću JTAG interfejsa obećavaju
vi, koji otkrivate samoprogramiranje kontrolera, samo slučajno
Radujemo se najzanimljivijem problemu sinteze zvuka i drugim primjenama PWM modova
tajmeri.
U ovoj knjizi većina primjera je fokusirana na upotrebu mola
(sa kapacitetom memorije od 8 MB) modeli iz podfamilije Mega, budući da su oni najviše
Svestraniji i pogodniji za širok spektar zadataka bez nepotrebne složenosti
shema. U jednostavnijim slučajevima, autor se fokusirao na najuniverzalnije
od mlađih modela ATtiny2313 (o njegovoj kompatibilnosti sa "klasičnom" verzijom
AT90S2313 cm. odjeljak Poglavlje "Program brojača koji koristi prekide".
ti 5). Većina navedenih primjera može se uraditi gotovo bez modifikacija.
prilagođen drugim AVR modelima sa odgovarajućom konfiguracijom
cija.
PART
Opći principi uređaja
i funkcionisanje Atmel AVR-a
Poglavlje 1. Pregled Atmel AVR mikrokontrolera
Poglavlje 2. Opća struktura, organizacija memorije,
taktiranje, resetovanje
Poglavlje 3. Uvod u periferne uređaje
Poglavlje 4. Režimi prekida i uštede energije
Č A P T E R
Pregled mikrokontrolera
Atmel AVR
Atmel AVR je porodica svestranih 8-bitnih mikrokon-
kolica zasnovana na zajedničkoj jezgri sa različitim ugrađenim periferijama
rojevi. Mogućnosti AVR MK vam omogućavaju da riješite mnoge tipične probleme,
koji nastaju pred programerima radio-elektronske opreme.
Karakteristike Atmel AVR mikrokontrolera.
Performanse su oko 1 MIPS/MHz. MIPS (milioni instrukcija po
Drugo, milion komandi u sekundi) jedna je od najstarijih i na mnogo načina
loša karakteristika performansi procesora, jer skupovi instrukcija
za različite procesore su različiti i, shodno tome, isti broj
uputstva na različitim sistemima će dati različite korisne rezultate. Ipak
za jednostavne 8-bitne računarske sisteme koji ne sadrže uputstva, rad
koji se bave velikim brojevima, brojevima s pokretnim zarezom i nizovima
podataka, ovo je dobar pokazatelj za poređenje njihovog učinka. Compute
Performanse jezgra AVR-a na brojnim zadacima premašuju 16 puta
in-line 80286 procesor.
Napredna RISC arhitektura. RISC (redukovani) koncept
Poželjno je računanje skupa instrukcija, proračuni sa smanjenim skupom instrukcija).
zahtijeva prisustvo skupa naredbi koje se sastoje od minimuma kompaktnih i brzih
izvršavanje instrukcija; u isto vrijeme, glomaznije operacije kao što su
izračunavanja s pomičnim zarezom ili višebitna aritmetika
u realnim brojevima, trebalo bi da se implementira na nivou potprograma. Koncept
RISC pojednostavljuje dizajn jezgre (tipično AVR jezgro sadrži samo 32 hiljade jedinica).
tranzistori, za razliku od desetina miliona u PC procesorima) i ubrzano
demonstrira njegov rad: tipična instrukcija se izvršava u jednom taktu (osim komandi
grananje programa, pristup memoriji i neki drugi koji rade s njima
dugi podaci). AVR ima jednostavnu dvostepenu kon-
Weir, kada se naredba izvrši u jednom ciklusu takta dok se sljedeći dohvati.
Za razliku od Intelovih arhitektura, “klasični” AVR nema hardverski množitelj
deljenje/deljenje, međutim, Mega potfamilija sadrži operacije množenja.
Odvojene komandne i memorijske magistrale podataka. AVR (kao i većina drugih
mikrokontroleri) ima tzv. Harvard arhitektura, gdje su memorijska područja