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.

Ono što je potrebno da postanete profesionalni programer za mikrokontrolere i postignete nivo vještine koji će vam omogućiti da lako pronađete i dobijete posao sa visokom platom (prosječna plata programera mikrokontrolera u Rusiji početkom 2015. je
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