Programiranje avr u asembleru. Praktično programiranje Atmel AVR mikrokontrolera u asemblerskom jeziku. (3. izdanje). Elektronika u grčkom stilu


Dakle, nadam se da je savjesni čitatelj već sastavio programator, eksperimentalnu ploču, te također instalirao i konfigurirao potrebni softver.

Sada, nakon što sam napisao prvi članak u seriji, shvaćam da sam se malo uzbudio i napravio istu grešku kao i moji prethodnici, stavljajući izraz "za početnike". Bilo bi točnije formulirati temu "Za početnike u programiranju asemblerskog jezika", odnosno pretpostavljam da čitatelj već ima barem površno razumijevanje o tome što je mikrokontroler, inače će nam trebati puno vremena samo da upoznajte se s ovom temom. Za one koji nisu uopće upoznati s njima, mogu preporučiti seriju članaka S. Ryumika, "AVR mikrokontroleri", koja je po mom mišljenju apsolutno prekrasna, objavljena u časopisu Radioamator (br. 1-11 za 2005.) . U ovom ciklusu, ATmega8 je odabran kao osnovni kontroler, međutim, opće funkcionalne jedinice gore spomenutog kontrolera i ATtiny13 su praktički iste.

Za izravno upoznavanje s mikrokontrolerom ATtiny13 preporučujem knjigu A.V. Evstifeeva "Mikrokontroleri" AVR obitelj sitan. Korisnički priručnik" (M.: Izdavačka kuća "Dodeka-XXI", 2007. - 432 str.). Sadrži prevedene i sistematizirane podatkovne tablice za cijeli niz kontrolera malene obitelji i, po mom mišljenju, trebao bi biti stolno računalo štivo za one koji se bave programiranjem mikrokontrolera.

Međutim, kako priča bude napredovala, dat ću neke informacije o onim čvorovima i modulima kontrolera koji će se koristiti u napisanim programima.

Ali sve je ovo lirska digresija. Vratimo se izravno na priču.

ATtiny13 kontroler, unatoč malim dimenzijama, ima vrlo dobre funkcionalne karakteristike. A mali broj pinova više je nego nadoknađen brojem funkcija koje svaki od njih obavlja. Pinout i opis igala prikazani su u nastavku:

Tablica je preuzeta iz gore navedene 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 osnovnu - digitalni ulaz/izlaz.

Kao što je vidljivo iz slike i tablice, svi pinovi, osim pinova za napajanje, imaju naziv PB iza kojeg slijedi serijski broj. Što to znači? Svi pinovi kontrolera kombinirani su u 8 dijelova radi lakšeg rada s njima, a svakoj grupi od 8 pinova dodijeljena su tri posebna I/O registra. Općenito, koncept registara je ključan kada se radi s kontrolerima, posebno u asembleru. Pogledajmo pobliže svaki od tri gore navedena registra. Sve su one jednobajtne ćelije u memoriji kontrolera. Svaki bit odgovara jednom od izlaza kontrolera, a broj bita u registru podudara se s brojem izlaza (na primjer, 0. bit je odgovoran za izlaz PB0, 1. bit je odgovoran za izlaz PB1 itd.). Svi registri imaju svoje ime pod kojim im se pristupa prilikom pisanja programa. Kakva su to 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", tada će biti izlaz. Štoviše, svaki se izlaz konfigurira zasebno i bilo gdje u programu. To znači da pod različitim uvjetima ili u različito vrijeme, isti pin može biti konfiguriran kao ulaz ili kao izlaz, neovisno o drugim pinovima.

2. PINB registar sadrži trenutno stanje svih pinova: ako je napon doveden na pin, tada se u odgovarajući bit upisuje logička "1", ako nema napona, upisuje se logička "0". Ovaj registar se uglavnom koristi za očitavanje stanja pina koji je u načinu unosa.

3. Registar PORTB obavlja dvostruku funkciju ovisno o smjeru prijenosa informacija. Ako pin radi kao digitalni izlaz, tada zapisivanje "1" u bilo koji bit PORTB registra uzrokuje pojavu napona na odgovarajućem pinu, a zapisivanje "0" uzrokuje nestanak napona. Dakle, u izlaznom modu, ovaj registar je taj koji određuje stanje svakog pina. U načinu digitalnog unosa, zapisivanje logičke "1" na bilo koji bit uzrokuje spajanje ugrađenog otpornika za privlačenje na odgovarajući pin, a zapisivanje "0" za njegovo onemogućavanje. Kakav je to “pull-up otpornik” i za što je namijenjen? Ako pin djeluje kao digitalni ulaz, tada je otpor ulaznog međuspremnika 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, otpornik s otporom od nekoliko desetaka kilo-ohma spojen je između ulaza i izvora napajanja, "povlačeći" ulazni potencijal do napona napajanja (otuda naziv). Struja koja teče kroz ovaj otpornik dovoljno je mala da ne ometa ostatak kruga, ali dovoljno velika da spriječi slučajno prebacivanje pinova. Pri radu s tipkama često ćemo koristiti pull-up otpornike, jer kada nisu pritisnuti, pinovi na koje su spojeni u biti "vise" u zraku i podložni su smetnjama.

Treba spomenuti da se pri uključivanju svi registri resetiraju na 0 i svaki pin djeluje kao digitalni ulaz bez pull-up otpornika.

Sada kada imamo barem neku ideju o tome ŠTO je potrebno za rad s ulazima kontrolera, vrijeme je da saznamo KAKO raditi s njima.

Napišimo naš prvi program rada u asembleru. Prvo ću dati potpuni algoritam za stvaranje novog projekta, ali u budućnosti ću ga izostaviti, fokusirajući se samo na tekst samog programa.

1. Idite u mapu asm i kreirajte novu mapu u njoj. Preimenujte ga u ime koje nam odgovara. Da budem konkretan, nazivat ću ih našim brojem koraka. U ovom slučaju "korak 2".

2. Desnom tipkom miša kliknite datoteku build.bat i promijenite stazu do izvorne datoteke, pokazujući na novostvorenu mapu (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 raspakirali arhivu.

3. Idite u mapu Asmedit i pokrenite program ASM_Ed.exe

4. U prozoru koji se otvori upišite tekst programa. Zadržat ću se na ovoj točki detaljnije, jer je ona glavna u našoj današnjoj lekciji, kao iu sljedećim.

Što je tekst asemblerskog programa? Može uključivati ​​nekoliko elemenata napisanih prema određenim pravilima:

Instrukcije asemblera sa ili bez operanda, ovisno o sintaksi instrukcije. Između naziva naredbe i prvog operanda mora postojati ili razmak, tabulator ili bilo koji broj oboje. Operandi su odvojeni zarezom, ispred ili iza kojeg također može stajati proizvoljan broj razmaka ili tabulatora;

Direktive, od kojih svaka počinje s ".";

Oznake, mjesta u programu koje je korisnik proizvoljno nazvao do kojih će možda trebati doći. Svaka oznaka završava znakom ":";

Komentari koji počinju s ";". Sav tekst od početka komentara do kraja retka zanemaruje se prilikom izrade heksadecimalne datoteke i može biti potpuno proizvoljan;

Prazni redovi za bolju strukturu i čitljivost programa.

U svakom retku ne može biti više od jedne naredbe. Međutim, dopuštena je istovremena prisutnost oznake u retku iza koje slijede naredba i komentar.

Koristeći se ovim pravilima, napisat ćemo program koji će uključiti LED2 dok je tipka SB1 pritisnuta, a ugasiti je ako se tipka otpusti. Tekst programa donosimo 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 (tipka SB1)
sbic PINB, 2 ; Ako je PB2=0 (gumb pritisnut), preskoči sljedeće. crta
sbi PORTB, 4 ; Instaliranje PB4 u 1 (gašenje LED-a)
sbis PINB, 2 ; Ako je PB2=1 (gumb pušten), preskoči sljedeće. crta
cbi PORTB, 4 ; Postavljanje PB4 na 0 (LED uključen)

Pogledajmo to detaljnije. Prvi red sadrži direktivu "include", napisanu prema gornjim pravilima s točkom na početku. Njegova je svrha uključiti datoteku navedenu iza njega u tekst programa. Kao što sam rekao u prvom koraku, trebat će nam datoteka "tn13def.inc". U ovom retku morat ćete promijeniti put do lokacije mape Appnotes na računalu. Zašto trebamo uključiti ovu datoteku? Znatiželjni čitatelj može ga zaviriti i pročitati njegov sadržaj, ali najvjerojatnije će u početku malo toga razumjeti. Za sada ću reći da sadrži korespondenciju između naziva registara, koje asembler ne zna po defaultu, s njihovim fizičkim adresama u kontroleru.

Sljedeći redovi su asemblerske naredbe. Pažljivi čitatelj primijetit će da se koriste ukupno četiri različite naredbe. Pogledajmo svrhu svakog od njih.

Instrukcija sbi ima dva operanda: prvi je ime registra, drugi je broj bita. Kao rezultat njegovog izvođenja, navedeni bit u navedenom registru postavlja se na "1".

Naredba cbi je u sintaksi slična gornjoj i izvodi točno suprotnu funkciju - resetira navedeni bit u navedenom registru na "0".

Naredba sbis također je u sintaksi slična gornjoj. No, za razliku od njih, ne obavlja nikakve operacije s registrima, već samo provjerava stanje navedenog bita u navedenom registru, a ako je jednako "1", preskače redak koji slijedi nakon naredbe. U suprotnom, izvršava se redak koji slijedi, kao i svi ostali nakon njega.

Naredba sbis je suprotna naredbi sbis. Preskače sljedeći red ako je navedeni bit registra "0".

Sada, sumirajući sve gore navedeno, pokušajmo razumjeti algoritam programa. Za početak, napravit ću ovo doslovno red po red.

1 redak. Direktiva uključivanja uključuje datoteku tn13def.inc, koja sadrži definicije registara.

2. linija. Naredba sbi postavlja "1" u bit 4 DDRB registra, prebacujući na taj način pin PB4 na izlaz. Ako pogledate dijagram ploče (slika 1 prethodnog koraka), možete vidjeti da je LED2 spojen na ovaj pin. Iza naredbe i znaka ";" napisan je komentar koji ukratko objašnjava značenje radnji izvedenih u retku.

3 linija. Ista naredba sbi postavlja "1" u bitu 2 registra PORTB, povezujući unutarnji otpornik za privlačenje na PB2 pin, na koji je spojen gumb SB1. Budući da nismo promijenili stanje bita 2 DDRB registra, ovaj pin će ostati ulaz, što nam zapravo treba.

4 linija. Naredba sbic provjerava prisutnost logičke "0" na PB2 ulazu pomoću PINB registra. Ako pažljivo pogledate dijagram, možete vidjeti da tipke, kada se pritisnu, zatvaraju odgovarajući terminal zajedničkom žicom. Ovo je standardna tehnika, budući da kada se tipka otpusti, na izlazu je prisutna logička "1" zbog pull-up otpornika, a kada se tipka pritisne, pojavljuje se logička "0" zbog spoja izlaz na zajedničku žicu. Dakle, ako je na pinu PB2 logička “0”, odnosno tipka je pritisnuta, preskačemo sljedeći red, a ako je tipka otpuštena, onda je izvršavamo.

5 linija. U njemu naredba sbi postavlja logičku "1" u bitu 4 PORTB registra, čime se gasi LED2. Pronicljivi čitatelj mogao bi se zapitati zašto se LED gasi ako na izlazu dodamo napon. Odgovor leži u dizajnu. LED dioda je spojena anodom na strujnu žicu, a katodom na izlaz kontrolera. Stoga, ako na izlazu primijenite napon, potencijali anode i katode bit će jednaki, a LED će se ugasiti. Ako je logička "0" izlaz na izlazu, tada će se na LED staviti napon i ona će svijetliti. Dakle, par linija 4 i 5 isključuje LED2 kada se tipka otpusti.

6 linija. Značenje je suprotno 4. Naredba sbis provjerava postojanje logičke “1” na ulazu PB2, odnosno provjerava je li tipka otpuštena. Ako se gumb otpusti, sljedeći redak se preskače i sljedeći redak prelazi na sljedeći. Ali budući da je 7. redak posljednji, postoji prijelaz u 2. redak. Ako se pritisne tipka, tada se izvršava linija 7.

7 linija. Suprotno od 5. Naredba cbi resetira bit 4 PORTB registra na "0", čime uključuje LED2. Dakle, par linija 6 i 7 uključuje LED2 kada se pritisne tipka SB1.

Kao što vidite, nismo učinili ništa posebno komplicirano. Koristeći znanje o samo 3 registra i 4 instrukcije, napisali smo naš prvi program. Što dalje s njom? Ako još niste zaboravili, nastavljamo pisati algoritam za izradu programa.

5. Nakon što ste napisali programski tekst u prozor uređivača, odaberite stavku izbornika "Datoteka" i na popisu koji se otvori kliknite "Spremi kao...". U prozoru za spremanje datoteke odaberite mapu step2 koju smo stvorili i navedite naziv datoteke "main", jer je to naziv koji smo naveli u datoteci "build.bat"

Nakon spremanja, prozor programa trebao bi izgledati ovako:

6. Napravite hex datoteku. Da biste to učinili, kliknite gumb "II" na alatnoj traci. Trebao bi se pojaviti sljedeći prozor:

Obavještava nas da je sklapanje završeno bez grešaka i stvorena je firmware datoteka “main.hex” s volumenom od 6 riječi, odnosno 12 bajtova. napominjem da sličan program u jeziku C imao bi barem 5 puta veći volumen.

7. Nakon što smo otišli u mapu step2, nalazimo joj dodatak u obliku novostvorene main.hex datoteke, koja se sada može ušiti u kontroler bilo kojim programatorom, što je potrebno učiniti kako bi se vidjeli rezultati program koji smo napisali. Nakon bljeskanja kontrolera, ako je krug pravilno sastavljen, sve bi trebalo raditi prema algoritmu koji smo razvili: kada se tipke otpuste, LED2 bi trebao biti ugašen, a dok je tipka SB1 pritisnuta, trebao bi biti uključen.

Prije sljedećeg koraka predlažem da napravite sljedeće zadatke:

1. U program dodati obradu pritiska na tipku SB2 sa suprotnim algoritmom: kada se tipka SB2 otpusti, LED1 treba svijetliti, a kada se pritisne, mora biti ugašena.

2. Napišite program za upravljanje LED2 pomoću oba gumba. Kada se pritisne tipka SB1, LED bi trebala svijetliti i ostati upaljena dok se ne pritisne tipka SB2, koja se isključuje do sljedećeg pritiska na tipku SB1.

Sastavljač 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đer generira kod koji se može izravno programirati u AVR mikrokontrolere.

Kompajler generira kod koji ne zahtijeva povezivanje.

Kompajler radi pod Microsoft Windows 3.11, Microsoft Windows95 i Microsoft Windows NT. Osim toga, postoji i konzolna verzija za MS-DOS.

Obiteljski set instrukcija AVR mikrokontroleri ukratko opisano u ovom dokumentu, za potpunije upute pogledajte potpune upute i dokumentaciju za vaš specifični mikrokontroler.

Izvorni kodovi

Prevodilac radi s izvornim datotekama koje sadrže upute, oznake i direktive. Upute i direktive obično imaju jedan ili više operanda.

Redak koda ne smije biti dulji od 120 znakova.

Svaki red može započeti oznakom, koja je niz znakova koji završava dvotočkom. Oznake se koriste za označavanje mjesta na koje se kontrola prenosi tijekom prijelaza, kao i za specificiranje imena varijabli.

Ulazni niz može imati jedan od četiri oblika:

[oznaka:] direktiva [operandi] [Komentar][oznaka:] instrukcija [operandi] [Komentar]KomentarPrazna linija

Komentar ima sljedeći oblik:

; [Tekst]

Pozicije u uglatim zagradama nisu obavezne. Prevoditelj zanemaruje tekst nakon točke-zareza (;) i do kraja retka. Oznake, upute i smjernice detaljnije su 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 ; Beskrajna petlja (Ovo je instrukcija) ; Linija sa samo jednim komentarom

; Još jedan redak s komentarom

Kompajler ne zahtijeva da oznake, direktive, komentari ili upute budu u određenom stupcu retka.

upute za avr procesor

Ispod je skup naredbi za AVR procesore; njihov detaljniji opis može se pronaći u AVR Data Book.

Aritmetika i logične upute

Mnemotehnika

Operandi

Opis

Operacija

Zastave

Ciklusi

Rd,Rr

Zbrajanje bez prijenosa

Rd,Rr

Zbrajanje s prijenosom

Rd = Rd + Rr + C

Rd,Rr

Oduzimanje bez noš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čki I s konstantom

Rd,Rr

Logički ILI

Rd,K8

Logički ILI s konstantom

Rd,Rr

Logički isključivi ILI

Inverzija bitova

Promjena predznaka (dodatni kod)

Rd,K8

Postavite bit(ove) u registar

Rd,K8

Očisti bit(ove) u registru

Rd = Rd ($FF - K8)

Povećaj vrijednost 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 brojeva bez predznaka

R1:R0 = Rd * Rr

Rd,Rr

Množenje brojeva s predznakom

R1:R0 = Rd * Rr

Rd,Rr

Množenje broja s predznakom s brojem bez predznaka

R1:R0 = Rd * Rr

Rd,Rr

Množenje razlomaka bez predznaka

R1:R0 = (Rd * Rr)<< 1

Rd,Rr

Množenje razlomaka s predznakom

R1:R0 = (Rd *Rr)<< 1

Rd,Rr

Množenje razlomka s predznakom i brojem bez predznaka

R1:R0 = (Rd * Rr)<< 1

Upute za podružnice

Mnemotehnika

Operandi

Opis

Operacija

Zastave

Ciklusi

Relativni prijelaz

Neizravni prijelaz na ( Z)

Produženi neizravni prijelaz na ( Z)

STAK = PC+1, PC(15:0) = Z, PC(21:16) = EIND

Relativni poziv potprograma

STAK = PC+1, PC = PC + k + 1

Indirektan poziv ( Z)

SKUP = PC+1, PC = Z

Produženi neizravni poziv ( Z)

STAK = PC+1, PC(15:0) = Z, PC(21:16) =EIND

Pozivanje potprograma

STOP = PC+2, PC = k

Povratak iz potprograma

Povratak iz prekida

Rd,Rr

Usporedi, preskoči ako je jednako

ako je (Rd ==Rr) PC = PC 2 ili 3

Rd,Rr

Usporedi

Rd,Rr

Usporedi s prijenosom

Rd,K8

Usporedi s konstantom

Rr,b

Preskoči ako je bit u registru izbrisan

if(Rr(b)==0) PC = PC + 2 ili 3

Rr,b

Preskoči ako je postavljen bit u registru

if(Rr(b)==1) PC = PC + 2 ili 3

P,b

Preskoči ako je bit u portu izbrisan

if(I/O(P,b)==0) PC = PC + 2 ili 3

P,b

Preskoči ako je bit priključka postavljen

if(I/O(P,b)==1) PC = PC + 2 ili 3

s,k

Skoči ako je zastavica u SREG-u izbrisana

if(SREG(s)==0) PC = PC + k + 1

s,k

Idi ako je postavljena zastavica u SREG-u

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 odobren

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 minus

if(N==1) PC = PC + k + 1

Idi ako plus

if(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 manje (potpisano)

if(S==1) PC = PC + k + 1

Skoči ako je postavljena unutarnja zastavica za prijenos

if(H==1) PC = PC + k + 1

Skoči ako je interna zastavica za prijenos izbrisana

if(H==0) PC = PC + k + 1

Skoči ako je postavljena zastavica T

if(T==1) PC = PC + k + 1

Skoči ako je T zastavica izbrisana

if(T==0) PC = PC + k + 1

Skoči ako je postavljena zastavica prelijevanja

if(V==1) PC = PC + k + 1

Skoči ako je zastavica prelijevanja uklonjena

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 unutarnjoj podatkovnoj memoriji i nije točan kada se radi s vanjskim RAM-om. Za instrukcije CALL, ICALL, EICALL, RCALL, RET i RETI potrebno je dodati tri ciklusa plus dva ciklusa za svako čekanje u kontrolerima s PC manje 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.

Upute 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

Konstanta opterećenja

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

Izravno spremanje

x,Rr

Neizravno očuvanje

X+,Rr

(X) = Rr, X=X+1

-X,Rr

Y,Rr

Neizravno očuvanje

Y+,Rr

Neizravna štednja s postinkrementom

(Y) = Rr, Y=Y+1

-Y,Rr

Neizravna konzervacija s preddekrementom

Y=Y-1, (Y) = Rr

Y+q,Rr

Z,Rr

Neizravno očuvanje

Z+,Rr

Neizravna štednja s postinkrementom

(Z) = Rr, Z=Z+1

-Z,Rr

Neizravna konzervacija s preddekrementom

Z=Z-1, (Z) = Rr

Z+q,Rr

Neizravno 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

Spremanje u memoriju programa

(Z) = R1:R0

Proširena pohrana u programskoj memoriji

(RAMPZ: Z) = R1:R0

Rd,P

Pročitaj port

P,Rr

Pišite u priključak

Guranje registra na stog

Izbacivanje registra iz stoga

* Za operacije pristupa podacima, broj ciklusa je naznačen kada se pristupa unutarnjoj podatkovnoj memoriji i nije točan kada se radi s vanjskim RAM-om. Za upute LD, ST, LDD, STD, LDS, STS, PUSH i POP morate dodati jedan ciklus plus jedan ciklus za svako čekanje.

Upute za rad s bitovima

Mnemotehnika

Operandi

Opis

Operacija

Zastave

Ciklusi

Logičan pomak lijevo

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 priključak

P,b

Očisti bit u portu

Rr,b

Rd,b

Učitaj bit iz T u registar

Postavite oznaku za nošenje

Clear Carry Flag

Postavite oznaku negativnog broja

Obriši oznaku negativnog broja

Postavite oznaku nula

Obriši oznaku nule

Postavite zastavu prekida

Obriši oznaku prekida

Postavite oznaku potpisanog broja

Jasno potpisana brojčana zastavica

Postavi oznaku preljeva

Očisti oznaku preljeva

Postavite zastavu T

Obriši T zastavicu

Postavite unutarnju oznaku prijenosa

Jasna unutarnja zastavica za prijenos

Bez operacije

Spavanje (smanjenje potrošnje energije)

Pogledajte opis uputa

Poništavanje Watchdog Timera

Pogledajte opis uputa

Asembler ne razlikuje velika i mala slova.

Operandi mogu biti ovih vrsta.

Dobra večer svima! Emitiram iz ugodnog svijeta zvanog "montažer". Odmah ću pojasniti da se tema odnosi na AVR mikrokontrolere - i još ne znam hoće li ovaj post biti koristan onima koji žele koristiti asembler za bilo koji drugi zadatak. Činjenica je da sam doslovno prije nekoliko dana počeo učiti asembler od nule - moram napraviti jedan uređaj - i odlučio sam sve u njemu napraviti sam. Pa sam to jednog lijepog dana shvatio Učenje asemblera je apsolutno beskorisno! Asemblerski jezik se može samo razumjeti! Odnosno, svima onima koji žele programirati u asemblerskom jeziku, toplo preporučam da se detaljno udube u FIZIČKI rad mikrokontrolera, a zatim prouče zamršenost naredbi.
Dakle, vjerojatno ću započeti malu seriju članaka u kojima ću vam reći od samog početka kako točno Razumio sam neke stvari u programiranju na asemblerskom jeziku - mislim da ću za one koji uopće ne razumiju što je ASM biti upravo takav "prevoditelj" s jezika onih koji su jako dobri u ovoj stvari.

Odmah ću reći da sam više-manje ušao u ovu temu na poticaj DIHALT-a - stoga će ovi članci biti svojevrsni prijevod sa jezika super-duper sklopa mikrokontrolera na jezik razumljiv većini ljudi. Pa, nadam se da će me gurui ispraviti kako predstava bude odmicala, a ako iznenada nešto netočno objasnim, ispravit će me.
Dakle, prvi zaključci o asembleru koje sam iznio prije par dana šokirali su me do srži - sjedio sam čitajući DI HALT članke od 23 do 5 ujutro - nakon čega sam zadovoljan i sretan otišao spavati. Shvatio sam bit programiranje u asemblerskom jeziku za mikrokontrolere.
Kako to još jednostavnije objasniti? Mislim da treba krenuti 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 lika:
1. Mikrokontroler - Ovo je Englez Steve, koji je došao do Rusa. Engleski zna savršeno, ali ruski uopće ne razumije - ni jednu jedinu riječ. Samo engleski. Izgubio je svađu i obećao učiniti sve što Rus zatraži od njega bez pitanja.
2. Asembler - Ovo je prevoditeljica Vasya, čija je majka Engleskinja, a otac Rus. Savršeno zna i engleski i ruski.
3. Mi - Ovo je Rus kod kojeg je došao Englez. Pa, to jest, mi smo mi =) U isto vrijeme, savršeno znamo ruski i (!!!) malo engleski - samo malo, s rječnikom.
***
Zamislite ovu situaciju – u vašoj sobi na stolici sjedi Englez. I sjedite za svojim računalom i čitate ovaj post, kad se odjednom vaš prozor odjednom otvori! To je loša sreća! Vjetar puše, zavjesa se pretvorila u jedro... Bilo bi lijepo zatvoriti je! Ali previše je lijeno ustati sa stolice, skinuti noge sa sistemske jedinice, staviti ih u papuče, odložiti šalicu kave (piva) i ići se boriti protiv elemenata. A onda odjednom shvatite da imamo Engleza u sobi koji je izgubio okladu i da je vrijeme da ga potjeramo! A ti mu tako slatko kažeš: “Stari! Molim vas, zatvorite prozor i onda možete ponovno sjesti na stolicu!” a on sjedi, začuđeno te gleda i ništa ne radi! Možete, naravno, pogoditi juhu od kupusa - ali tada vas i dalje neće razumjeti! Onda pozovete svog prijatelja prevoditelja Vasilija - on dolazi i sjeda do Engleza na stolicu. I kažeš - Prevedi: "Steve, idi i zatvori prozor, a onda sedi na stolicu!" Prevoditelj prevodi na engleski – Englez razumije i ode i zatvori prozor, a onda dođe i sjedne na stolicu.
U ovom trenutku samo trebate razumjeti ulogu asemblera u ovom lancu "Mi-Assembler-Kontroler"
Odnosno, kako bi svi razumjeli što je asembler? Zatim čitajte dalje.
***

Dakle, zamislimo ovu situaciju. Kažete Vasji - "Slušaj, dobro, ukratko, ovo je slučaj - zaboravio sam kalkulator kod kuće, podijeli 56983 sa 2 i reci Steveu da napravi toliko sklekova sa šakama", a Vasja računa na kalkulator i kaže Steveu na engleskom “Radi sklekove šakama 28491 puta” Zove se "DIREKTIVA"- drugim riječima, direktiva je zadatak za Vasyu, čiji je rezultat Steveov postupak.

Postoji još jedna situacija - kažete Vasji "Reci Steveu da napravi 28491 sklekova", a Vasja jednostavno prevodi vaše riječi na engleski. To se zove OPERATER

Jednostavno je – postoji direktiva i postoji operator. Operater je vaša izravna uputa Steveu što da radi - Vasya ovdje samo prevodi vaš zahtjev na engleski. A Direktiva je zadatak za samog Vasju - i Vasja prvo napravi ono što ste mu rekli, a zatim, ovisno o rezultatu, nešto kaže Steveu.

Sada ćemo Engleza redovito mučiti! Ali prvo moramo bolje upoznati našeg prevoditelja Vasju. Morate znati sljedeće - Vasya vas uvijek bespogovorno sluša - ono što mu je rečeno, on i čini. Vasjin kalkulator nema decimalna mjesta - ako pogledate primjer sa sklekovima, onda je 56983 \ 2 = 28491,5 - ali Vasjin sve nakon decimalne točke je odrezano - 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, bit će 28491 u oba slučaja. Ništa nije zaokruženo. Važnije informacije o Vasji. Vasya je okrutan - nije ga briga što Steve jebeno radi sklekove dvadeset osam tisuća puta. Rekli su mu da Vasja prevodi. I ne samo da je preveo, nego me je i prisilio da učinim ono što ste tražili. Dakle, ako Steve umre na dvadeset tri tisuće petsto trinaestom skleku, to će biti isključivo tvoja krivnja.

Zapravo, to je sve za sada. U sljedećem postu ćemo kopati dublje - za sada je dovoljno samo razumjeti ovo. Samo zamislite ovu situaciju i shvatite što je što, tko igra koju ulogu i kako se direktiva razlikuje od operatora.
A onda ćemo sve pokušati nazvati pravim imenom i otprilike procijeniti kako asembler radi s mikrokontrolerom kao odrasla osoba.

Što je potrebno da postanete profesionalni programer za mikrokontrolere i postignete razinu vještine koja će vam omogućiti da lako pronađete i dobijete posao s visokom plaćom (prosječna plaća programera mikrokontrolera u Rusiji početkom 2015.
80 000 rubalja).

DODATI

Sintaksa: ADD reg1, reg2 Ova naredba dodaje sadržaj registara reg1 i reg2, pohranjujući rezultat u registar reg1. Mijenja stanje zastavica H, S, V, N, Z, C.

I

Sintaksa: AND reg1, reg2 Ova naredba izvodi logičku operaciju AND između registara reg1 i reg2, pohranjujući rezultat u registar reg1. Mijenja stanje zastavica S, V, N, Z.

ANDI

Sintaksa: ANDI hreg, broj Ova naredba izvodi logičku operaciju I između sadržaja visokog registra hreg i konstantnog broja (0...255), pohranjujući rezultat u registar. Mijenja stanje zastavica S, V, N, Z.

BRBC

Sintaksa: BRBC bit, oznaka Ova naredba provjerava stanje bita SREG registra ($3F) i skače na oznaku ako je bit prazan. Oznaka mora biti unutar 63 naredbe naredbe brbc.

BRBS

Sintaksa: BRBS bit, oznaka Ova naredba provjerava stanje bita SREG registra ($3F) i skače na oznaku ako je bit postavljen. Oznaka mora biti unutar 63 naredbe brbs naredbe.

BRCC

Sintaksa: BRCC bit, oznaka Ova naredba provjerava oznaku prijenosa (C) i skače na oznaku ako je jasna.

BRCS

Sintaksa: BRCS bit, oznaka Ova naredba provjerava oznaku prijenosa (C) i skače na oznaku ako je postavljena.

BREQ

Sintaksa: BREQ bit, oznaka Ova naredba provjerava oznaku nula (Z) i skače na oznaku ako je postavljena.

BRNE

Sintaksa: BRNE bit, oznaka Ova naredba provjerava oznaku nula (Z) i skače na oznaku ako je jasna.

C.B.I.

Sintaksa: CBI ioreg, bit Ova naredba resetira bit I/O registra ioreg ($00...$1F) na 0. Bitni broj određuje bitni operand.

CLR

Sintaksa: CLR reg Ova naredba resetira sve bitove reg registra na 0. Mijenja stanje zastavica S, V, N, Z.

C.P.

Sintaksa: CP reg1, reg2 Ova naredba uspoređuje sadržaje registara reg1 i reg2 oduzimanjem reg2 od reg1. Sadržaj upisnika se ne mijenja. Mijenja stanje zastavica H, S, V, N, Z, C.

CPI

Sintaksa: CPI hreg, broj Ova naredba uspoređuje sadržaj hreg registra s konstantom broja oduzimanjem konstante od registra. Sadržaj upisnika se ne mijenja. Mijenja stanje zastavica H, S, V, N, Z, C. Naredba radi samo s registrima R16…R31.

PROS

Sintaksa: DEC reg Ova naredba smanjuje sadržaj registra reg za jedan, upisujući rezultat natrag u registar. Mijenja stanje zastavica S, V, N, Z.

U

Sintaksa: IN reg, ioreg Ova naredba prenosi sadržaj I/O registra ioreg u RON reg.

INC

Sintaksa: INC reg Ova naredba povećava sadržaj registra reg za jedan, upisujući rezultat natrag u registar. Mijenja stanje zastavica S, V, N, Z.

LD

Sintaksa: LD reg, longreg Ova naredba učitava jedan bajt iz podatkovne memorije (memorijska adresa sadržana u dužem registru) u reg registar (za model 1200).

LDI

Sintaksa: LDI hreg, broj Ova naredba učitava neposrednu vrijednost broja u visoki registar hreg (naredba može raditi samo s registrima R16...R31). Broj mora biti u rasponu 0…255.

LSR

Sintaksa: LSR reg Ova naredba izvodi logički desni pomak sadržaja registra reg. U ovom slučaju, 0. bit se kopira u zastavu C, 7. bit se resetira na 0. Mijenja stanje zastavica S, V, N, Z, C.

ORI

Sintaksa: ORI hreg, broj Ova naredba izvodi logičku operaciju ILI između sadržaja visokog registra hreg i brojčane konstante (0...255), pohranjujući rezultat u registar. Mijenja stanje zastavica S, V, N, Z.

VAN

Sintaksa: OUT ioreg, reg Ova naredba prenosi sadržaj registra opće namjene reg u I/O registar ioreg.

POZOVI

Sintaksa: RCALL oznaka Ova naredba poziva potprogram identificiran oznakom, koja mora biti unutar 2048 naredbi naredbe rcall (relativni poziv).

RET

Sintaksa: RET Ova se naredba vraća iz potprograma skakanjem na naredbu koja slijedi nakon izvorne naredbe poziva.

RETI

Sintaksa: RETI Ova naredba vraća se iz potprograma i postavlja opću oznaku za uključivanje prekida.

RJMP

Sintaksa: RJMP oznaka Relativni skok. Skače na odjeljak programa označen oznakom, koja mora biti unutar 2048 od RJMP naredbe.

SBI

Sintaksa: SBI ioreg, bit Ova naredba postavlja bit I/O registra ioreg ($00...$1F) na 1. Bitni broj određuje bitni operand.

SBIC

Sintaksa: SBIC ioreg, bit Ova naredba provjerava bit I/O registra ioreg ($00...$1F) i preskače sljedeću naredbu ako je ovaj bit prazan. Bitni broj određuje bitni operand.

SBIS

Sintaksa: SBIS ioreg, bit Ova naredba provjerava bit ioreg I/O registra ($00...$1F) i preskače sljedeću naredbu ako je taj bit postavljen. Bitni broj određuje bitni operand.

SEI

Sintaksa: SEI Ova naredba postavlja opću oznaku za uključivanje prekida.

SER

Sintaksa: SER reg Ova naredba postavlja sve bitove reg registra na 1. Mijenja stanje zastavica S, V, N, Z. Naredba može raditi samo s registrima R16...R31.

ST

Sintaksa: ST reg, longreg Za model 1200, ova naredba pohranjuje sadržaj reg registra u podatkovnu memoriju (memorijska lokacija je sadržana u duljem registru), tj. neizravno prosljeđuje sadržaj PON reg na adresu pohranjenu u dužem registru.

SUBI

Sintaksa: SUBI hreg, broj Oduzima konstantni broj od visokog registra hreg. Rezultat se pohranjuje u isti registar. Mijenja stanje zastavica H, S, V, N, Z, C. Naredba može raditi samo s registrima R16…R31.

Revic Yu. V.

Praktično programiranje Atmel AVR mikrokontrolera na jeziku
asembler - 2. izdanje, rev. -

Navedeni su principi rada, arhitektonske značajke i tehnike

programiranje Atmel AVR mikrokontrolera. Daju se gotovi recepti
za programiranje osnovnih funkcija suvremene mikroelektroničke opreme
rature: od reakcije do pritiskanja gumba ili konstrukcije dinamičkog prikaza
na složene protokole za snimanje podataka u vanjsku memoriju ili značajke
veza sa satom realnog vremena. Posebna pažnja posvećena je razmjeni podataka
dani su numerički mikroelektronički uređaji s osobnim računalom
primjeri programa. Knjiga uzima u obzir značajke modernih AVR modela i ko-
putujući mikrosklopovi iz zadnjih godina proizvodnje. Prijave sadrže osnovne
parametri AVR mikrokontrolera, popis naredbi i programski tekstovi za njih,
kao i popis korištenih pojmova i kratica.

Za studente, inženjere i radio amatere

Grupa za pripremu publikacije:

Glavni urednik

Ekaterina Kondukova

Zamjenik glavni urednik

Igor Šišigin

glava od strane urednika

Grigorij Dobin

Urednik

Jurij Rožko

Izgled računala

Olga Sergienko

Korektor

Zinaida Dmitrijeva

Dizajn naslovnice

Elena Belyaeva

glava proizvodnja

Nikolaja Tverskih

Mikrokontroleri, njihov nastanak i primjena............................................ ......... 7

Pozadina mikrokontrolera..................................................... .... ................................................ ... 8

Elektronika u grčkom stilu.................................................. ...... ............................................ ............ ... 10

Zašto AVR? ................................................. ...... ............................................ ............ ............................ 12

DIO I. OPĆI PRINCIPI UREĐAJA
I RAD ATMEL AVR-a ............................................ ....... ............... 17

Poglavlje 1. Pregled Atmel AVR mikrokontrolera .............................................. ......... 19

AVR obitelji ................................................. .... ................................................ .......... ........................ 21

Značajke praktične upotrebe AVR MK .............................................. .......... ................. 23

O potrošnji..................................................... ... ................................................ ......... .................... 23

Neke značajke korištenja AVR-a u krugovima..................................................... ................. ............. 25

Poglavlje 2. Opća struktura, organizacija memorije, taktiranje, resetiranje........... 27

Programska memorija..................................................... ......................................................... ........................................ 27

Memorija podataka (RAM, SRAM) .............................................. .... ................................................ .......... ......... 29

Trajna podatkovna memorija (EEPROM) ............................................ .......... 31

Metode sata..................................................... ......................................................... ............................... 32

Ponovno postavljanje................................................. ................................................. ..................................................... 34

Poglavlje 3: Uvod u periferne uređaje............................................ ......... 37

I/O portovi .................................................. .......... ............................................ ................ .................... 38

Brojači vremena..................................................... ......... ................................................ ............................................ 39

Analogno-digitalni pretvarač ............................................ ......................................................... 41

Serijski priključci..................................................... ... ................................................ ......... .......... 42

UART................................................. .. ................................................ ......................................... 43

SPI sučelje ................................................. ... ................................................ ......... .................... 46

TWI sučelje (I

C) ..................................... ......... ............................................ ..... ..... 50

Univerzalno serijsko sučelje USI .............................................. .............. ............. 50

Poglavlje 4. Prekidi i načini uštede energije.................................................. .......... ... 53

Prekidi..................................................... ......................................................... ............. ................................ 53

Vrste prekida..................................................... ................. ................................. ....................... 57

Načini uštede energije..................................................... ................. ................................. ........................ 58

DIO II. PROGRAMIRANJE MIKROKONTROLERA
ATMEL AVR ................................................. ... ................................................ ......... ................ 61

Poglavlje 5. Opća načela programiranja MCU-ova AVR obitelji ................................................. 63

Skupština ili C? ................................................. ...... ............................................ ............ 63

Metode i alati za programiranje AVR-a ............................................. ......................................... 67

Uređivač koda..................................................... ... ................................................ ......................................... 67

O AVR Studiju ................................................. ..................................................... ......................... 68

Raspored montera ................................................. .......... ............................................ ................ ... 70

Programeri..................................................... ......................................................... ............. ............... 71

O heksadecimalnim datotekama..................................................... ......... ................................................ ................................................. 75

Naredbe, upute i notacija AVR asemblera..................................... ......................................... 78

Brojevi i izrazi..................................................... ......... ................................................ ................................. 79

Upute i funkcije ............................................................ .................... .............................. ........................ 80

Opća struktura AVR programa..................................................... ......................................................... ......... 84

Rukovanje prekidima..................................................... ................... .............................. ......................... 85

RESETIRANJE ................................................. .... ................................................ .......... ................................ 89

Najjednostavniji program..................................................... .... ................................................ .......... .............. 90

Odgoditi................................................. ................................................. ......................................... 92

Program brojača..................................................... ......................................................... ............ 94

Korištenje prekida................................................. ................ ................................. ...................... 96

Odgoda mjerača vremena..................................................... ......................................................... .......................... 97

Program brojača koji koristi prekide.................................................. ................... ............ 98

O konfiguracijskim bitovima..................................................... .................... .............................. ........................ ...... 101

Poglavlje 6. AVR sustav naredbi ............................................ ......................................... 105

Upute za prijenos kontrole i registar SREG ...................................................................... 105

Naredbe za provjeru prolaza..................................................... ................... .............................. ......................... 111

Naredbe logičkih operacija................................................. .................... .............................. .......................... 113

Instrukcije pomaka i radnje s bitovima ............................................ ......................................................... 114

Upute za aritmetičke operacije ............................................. ..................................................... 116

Naredbe za prijenos podataka..................................................... .................... .............................. ........................ 118

Kontrolne naredbe sustava..................................................... .......... ............................................ ................ 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šeznamenkastih brojeva................................................. .................... .............................. ...... 129

Dijeljenje višeznamenkastih brojeva................................................. ................................................... .............. 131

Operacije s razlomačkim brojevima..................................................... ......................................................... 134

Generator slučajnih brojeva..................................................... ................................................. ...... ...... 136

Operacije s brojevima u BCD formatu ............................................ ......................................................... ..... 138

Negativni brojevi u MK.................................................. ..................................................... .......... 143

Poglavlje 8. Programiranje mjerača vremena............................................. ....... .................... 147

8- i 16-bitni mjerači vremena..................................................... ......... ................................................ ............... .......... 147

Formiranje zadane frekvencijske vrijednosti..................................................... ......................................... 149

Odbrojavanje................................................. ............... ................................... .................................................... 153

Točna korekcija vremena..................................................... .................... .............................. ................... 158

Mjerač frekvencije i mjerač perioda ............................................. ...... ............................................ ............ 160

Mjerač frekvencije..................................................... ... ................................................ ......................................... 160

Mjerač perioda................................................. ......................................................... ............................... 164

Kontrola dinamičkog prikaza..................................................... .................... .............................. ...... 167

LED indikatori i njihov spoj................................................. ...... ................................. 168

Programiranje dinamičkog prikaza..................................................... .................... ............... 171

Tajmeri u PWM modu .............................................. ...... ............................................ ............ 174

Poglavlje 9. Korištenje EEPROM-a ............................................ ......................................... 179

Još jednom o sigurnosti podataka u EEPROM-u ................................................ ...... ................................... 179

Zapisivanje i čitanje EEPROM-a .............................................. ...... ............................................ ............ .......... 181

Pohranjivanje konstanti u EEPROM .............................................. ............... ................................... ................... .. 183

Poglavlje 10. Analogni komparator i ADC.................................................. ......... ................. 187

Analogno-digitalne operacije i njihove pogreške............................................. ......................................... 187

Rad s analognim komparatorom............................................. .................... .............................. ............. 190

Integriranje ADC-a na komparator................................................. ......................................................... 193

Princip rada i formule za izračun............................................. ......................................... 194

Integracija ADC programa..................................................... .................... .............................. ...... 198

Ugrađeni ADC ............................................. ..................................................... ......................................... 201

Primjer korištenja ADC-a..................................................... ................ ................................. ...................... .... 204

Program................................................. ................................................. ...... ........................ 206

Poglavlje 11. SPI programiranje ............................................ ......................................... 215

Osnovne operacije putem SPI-ja ................................................. ................................................... ........................ ... 215

Hardverska opcija ................................................ ... ................................................ ......... ......... 216

Softverska opcija ................................................ ... ................................................ ......... 218

O vrstama trajne memorije..................................................... .......... 219

Zapisivanje i čitanje flash memorije preko SPI-a .............................................. ......... ................................................ .. 221

Program za razmjenu s memorijom 45DB011B preko SPI-a .................................. .... ............... 224

Pisanje i čitanje flash kartica................................................. ...... ............................................ ............ ............ 225

Spajanje MMS kartica................................................. .... ................................................ .......... ... 225

Slanje naredbi i inicijalizacija MMC-a..................................... ......................................... 228

Snimanje i čitanje MMS-a..................................................... ..................................................... .......... 232

Poglavlje 12. TWI sučelje (I

C) i njegova praktična upotreba................ 237

Osnovni protokol I

C ..................................... ............ ............................................ ...... ......... 237

Softverska emulacija Protokola I

C ..................................... ............ ........................ 240

Zapisivanje podataka u vanjsku trajnu memoriju..................................... .......... .......... 241

Načini razmjene s AT24 memorijom ............................................ ......................................................... 241

Program................................................. ................................................. ...... ........................ 243

Sat sa sučeljem I

C ..................................... ............ ............................................ ...... .... 247

Snimanje podataka ................................................. ......................................................... .............................. 255

Čitanje podataka ................................................. ......................................................... .............................. 259

Poglavlje 13. UART/USART programiranje .............................................. .... ............. 261

Inicijalizacija UART-a ................................................. ... ................................................ ......................... 262

Prijenos i prijem podataka ............................................................. ..................................................... ........... .......... 263

Primjer postavljanja sata DS1307 pomoću UART-a .............................................. ..... ................... 266

Tehnike zaštite od komunikacijskih kvarova ................................................. ................................................... 271

Provjera pariteta..................................................... ................... .............................. ......................... 271

Kako organizirati pravilnu razmjenu................................................. ........................ ........................ ......... 273

Dodatne značajke USART-a .............................................. ...... ................................. 274

Implementacija RS-232 i RS-485 sučelja ............................................ ............ ................................... ..... 276

Pretvarači razine za RS-232 ............................................ ......................................... 280

RS-485 ................................................. ..................................................... ........... ................................ 283

Poglavlje 14. Načini uštede energije i Watchdog mjerač vremena................................. 285

Programiranje načina rada za uštedu energije............................................. ................................................. 286

Primjer uređaja na baterije..................................................... ......... ................................. 287

Finalizacija programa..................................................... ......................................................... ................. ...... 289

Korištenje nadzornog mjerača vremena..................................................... ................................................... ........... 293

PRIMJENE................................................. ......................................................... ............. 299

Dodatak 1. Osnovni parametri Atmel AVR mikrokontrolera .......... 301

Dodatak 2. Atmel AVR naredbe ............................................ ..................................... 309

Aritmetičke i logičke naredbe ................................................. ...... ................................. 310

Upute za rad s bitovima ............................................. .................... .............................. ........................ ...... 311

Naredbe za usporedbu................................................. ... ................................................ ......... ............... 312

Naredbe prijenosa kontrole..................................................... ......... ................................................ ............... .313

Naredbe za bezuvjetni skok i poziv potprograma.................................................. .......... ... 313

Upute za provjeru-preskakanje i upute za uvjetni skok.................................................. .................... 314

Naredbe za prijenos podataka..................................................... .................... .............................. ........................ 315

Kontrolne naredbe sustava..................................................... .......... ............................................ ................ 316

Dodatak 3. Programski tekstovi............................................. ...... ................................. 317

Flash komunikacijski demo program 45DB011B
preko SPI sučelja..................................................... .... ................................................ ......................................... 317

Postupci razmjene sučelja I

C ..................................... ............ ........................ 321

Dodatak 4. Razmjena podataka s osobnim računalom
i programi za otklanjanje pogrešaka putem UART-a ............................................ ....... ................................ 329

Rad s COM portom u Delphiju ............................................ ... ................................................ ......... 329

Instaliranje RTS linije u DOS i Windows .............................................. ......................................................... 335

Program COM2000 ................................................. ... ................................................ ......... ............... 337

Otklanjanje pogrešaka u programu pomoću emulatora terminala..................................... ......... ................. 339

Prilog 5. Rječnik često korištenih kratica i pojmova....... 341

Književnost................................................. ................................................. ...... ............... 347

Indeks predmeta................................................. ................................................. 349

UVOD

mikrokontroleri,
njihov nastanak i primjenu

Kažu da je 1960-ih, gledajući sudionike studentskih demonstracija
protesta, Gordon Moore je primijetio: "Mi smo pravi revolucionari." Studenti
zaposlenik jednog od izumitelja tranzistora W. Shockleya, između ostalog,
skriveni osnivač poznate Silicijske doline, pak osnovane
tel i vođa tvrtki kojima je suđeno da igraju vodeću ulogu u razvoju
mikroelektronike, Moore je znao o čemu govori. Paradoksalno, jest
izumi Moorea i njegovih suradnika bili su predodređeni da postanu osnova tog svijeta
u kojem se naknadno koncentriralo djelovanje “buntovne omladine”.
1960-ih godina Moderni hakeri (ne računalni huligani iz novina, već pravi)
informatičari strastveni u svom poslu) – izravni ideološki nasljednici
Studenti Sorbone i američki demonstranti, koji su promijenili moto „Make
ljubav a ne rat"

na "Nemoj pisati slogane - piši kod." Nije slučajno da su mnogi poznati

istaknute osobe u industriji elektroničkih računala, autori izuma, osnivači
koji su oblikovali lice suvremenog svijeta - dolaze iz sredine bliske upravo toj "bun-
klonula mladost."
Naša priča o mikrokontrolerima započela je činjenicom da je 1957. Gordon Moore ko-
zajedno s Robertom Noyceom, koji je kasnije postao jedan od izumitelja mikrofona
roschemy, i još šest zaposlenika Shockley Semiconductor Labs (Shockley zove
njihova "izdajnička osmorka"), osnovao tvrtku Fairchild Semiconductor. Njoj mi
duguju ne samo razvoju tržišta poluvodiča i uvođenju mikrosklopova
u inženjersku praksu, ali i zato što je postala svojevrsna kovačnica kadrova i
generator ideja za mladu industriju.
Evo samo nekih povijesnih činjenica. Sam Moore s Noyceom u kasnim 1960-ima
stvorio tvrtku Integrated Electronics koja je pod skraćenim nazivom Intel
sada poznat svakom školarcu. Jeremy Sanders, osnivač još jednog poznatog
najveća tvrtka - AMD, također je napustio Fairchild, gdje se istaknuo otvaranjem ko-
privremeni ekonomski model za proizvodnju i prodaju poluvodiča
komponente, u kojima trošak proizvoda teži nuli kako se povećava

“Vodite ljubav, a ne rat” bio je slogan hipija iz 1960-ih koji su protestirali protiv Vijetnamskog rata.

Uvod

promijeniti volumen šarže. Charlie Spork, jedan od Fairchildovih ključnih menadžera, 1967
postao direktor tvrtke National Semiconductor, koju je kasnije vodio četvrtinu
stoljeća. Polovina "izdajničke osmorke" - Gene Hoerney, Evgeniy Kleiner,
Jay Last i Sheldon Roberts - osnovali su 1961. Amelco iz kojeg
naknadno su rasli sada dobro poznati Intersil, Maxim i Ixys. Zaposlenik
Fairchildu Robertu Widlaru dugujemo izum operacijskih pojačala -
vrste mikro krugova, a do danas tek drugi po popularnosti
mikroprocesori. Štoviše, povijest Fairchilda povezana je s pojavom slavnih
novi venture (tj. "rizični") model financiranja, koji je odigrao odlučujuću ulogu
važnu ulogu u razvoju svih industrija vezanih uz elektroniku, računala i
telekomunikacija. Nije uzalud Fairchild često nazivana "pramajkom sve elektriciteta".
tronika".

Pozadina mikrokontrolera

Od čitavog tog uragana događaja, ono što je važno za našu pripovijest je da među
ostale inovacije, zaposlenici Fairchilda prvi su promovirali poluvodič
krivotvoreno sjećanje. Sada, u doba CD-ova i DVD-ova, tvrdih diskova i flash kartica, mi
Teško je zamisliti da su ranih 1960-ih računalni programi
pohranjeni su uglavnom na kartonskim listovima (bušenim karticama), otpadnim konstruktorima
da li vam je glava nad skupim RAM modulima na živinim linijama kašnjenja, osciloskop
grafičke cijevi i feritne prstenove, gdje je svaki bit ručno “šivan”.
Ne. Najkompaktniji elektronički uređaj tih godina za pohranjivanje podataka
magnetski diskovi nazvani RAMAC 305 kapaciteta 5 MB bili su veličine
s industrijskim hladnjakom i iznajmljivana je za 5 tisuća dolara mjesečno.
Jedini "zraka svjetla" u mračnom kraljevstvu ovih čudovišta bio je izum
Američki zaposlenik Bosch Arma Corporationa Yen Chow, koji je 1956. primio
patent za uređaj sada poznat kao "jednokratno programabilni ROM"
(OTP ROM

). U ovom je patentu, inače, pojam prvi put korišten

"burn" - mikromodul se sastojao od matrice s topljivim kratkospojnicima, koji
koji su izgorjeli tijekom programiranja dovođenjem visokog napona na njih.
OTP ROM-ovi dugo su ostali jedini uređaji za kompakt
pohranjivanje podataka i nisu izgubili svoje značenje sve do nedavno -
najmanje četvrtina mikrokontrolera u svijetu, osobito onih jednostavnijih, do
još uvijek se proizvodi upravo s takvim jednokratnim programabilnim ugrađenim programom
naboran, zbog svoje izrazite jeftinoće. I tek je posljednjih godina “pregorjelo” pa-
memorija se počela postupno zamjenjivati ​​prikladnijom flash memorijom, kada je potonja
je toliko pojeftinio da gotovo da nema smisla koristiti OTP ROM.
No, vratimo se u šezdesete godine prošlog stoljeća. Kompaktna poluvodička memorija bila je apsolutno potrebna
svi ga vole - od vojske i NASA-e do proizvođača kućanskih aparata. Isprva
Fairchild je predstavio ono što se danas naziva DRAM, posebno na takvim mikro-
Ruski sklopovi (32.768 čipova s ​​kapacitetom od 256 bita svaki) izgrađena je memorija natpisa

Za objašnjenja nekih kratica, vidi Dodatak 5.

filament superračunalo ILLIAC-IV, konkurent domaćem BESM-6. Naslutivši
na koju stranu vjetar puše, 1968. Moore i Noyce napuštaju Fairchild i osnivaju Intel, kao
specijalizirana tvrtka za razvoj i proizvodnju memorije. Još nisu
znao da Intelov najpopularniji proizvod uopće neće biti memorija, već mali
uređaj (sl. B1), nazvan mikroprocesor, čiji je razvoj primarno
je u početku zamišljen kao pomoćna faza u dizajnu konvencionalnog računa
Tora.

Riža. U 1. Mikroprocesor

I

IZUM MIKROPROCESORA

Godine 1969. nekoliko ljudi iz Busicoma, mlade japanske tvrtke, pojavilo se u Intelu.
istraživački institut koji se bavi proizvodnjom kalkulatora. Trebao im je set od 12 inte-
gral sheme kao glavni element novog jeftinog stolnog kalkulatora -
Tora. Projekt je razvio Masatoshi Shima, koji je predstavljao japansku tvrtku
Rone. Ted Hoff (Marcian E. Ted Hoff, r. 1937.), voditelj odjela uključenog u
razvoj aplikacija za Intelove proizvode, nakon što sam se upoznao s projektom, shvatio sam da
umjesto stvaranja kalkulatora s nekim mogućnostima programiranja
programiranje, možete učiniti suprotno, računalo programirano da radi kao
kalkulator. Razvijajući ideju, tijekom jeseni 1969. Hoff se odlučuje za umjetnost
arhitektura budućeg mikroprocesora. U proljeće je na odjel došao Hoffa (sve iz istog
Fairchild, nama već poznati), novi zaposlenik Frederico Faggin, koji
ry i smislio naziv za cijeli sustav: “obitelj 4000”. Obitelj se sastojala
od četiri 16-pinska čipa: 4001 je sadržavao 2 KB ROM-a; 4002 - RAM sa
4-

bitni izlazni port za preuzimanje programa; 4003 je bio 10-bitni

I/O ekspander sa serijskim ulazom i paralelnim izlazom
dom za komunikaciju s tipkovnicom, indikatorom i drugim vanjskim uređajima; međutim-
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. studenoga
1971

Najavljeno je stvaranje prvog mikroprocesora. Kupljen Busicom

razvoj, plativši Intelu 60 000 dolara. Ali Intel je odlučio vratiti taj novac Busicomu,
za ponovno dobivanje prava na mikroprocesor.
I4004 imao je procesorsku snagu usporedivu s prvim elektroničkim računalom.
Yuter ENIAC (1946). 4004 pronašao je svoju prvu praktičnu primjenu u sustavu
kontrola semafora i analizatora krvi. Ovaj mikroproces
sor je korišten u opremi na brodu međuplanetarne sonde Pioneer-10, koja
ry je postavio rekord dugovječnosti među sličnim uređajima: lansiran je u
1972

, a do rujna 2001. Pioneer-10 se udaljio 11,78 milijardi km od Zemlje i još uvijek

radio i, vrlo vjerojatno, radi i dan danas, iako je NASA službeno u veljači 2003
društveno se oprostio od njega.

Uvod

Tako je započeo pobjednički marš mikroprocesora, koji su se kasnije podijelili
u nekoliko varijanti, koje uglavnom pripadaju dvije glavne skupine:
sami mikroprocesori (MP) i mikrokontroleri (MC). Prvi
namijenjeni su za korištenje kao dio računalnih sustava, najčešći
od kojih su većina osobna računala (PC), pa se još uvijek često koriste
nazivaju se "PC procesori" (iako ova skupina također obično uključuje proizvedene
driver MP za poslužitelje i neki drugi). MK se po tome razlikuju od MP
da su prvenstveno dizajnirani za upravljanje različitim sustavima,
dakle, s relativno slabijom računalnom jezgrom, uključuju
postoji mnogo dodatnih čvorova. Činjenica da se za konvencionalnog zastupnika pretpostavlja
rezervni u vanjskim čipsetovima ili dodatnim modulima (memorija, ulazni portovi)
izlaz, mjerači vremena, kontroleri prekida, čvorovi za analognu obradu signala
ribolov itd.), u MK se nalazi izravno na čipu, zbog čega su nekada bili moderni
nazvati "mikroračunalom".
Doista, u najjednostavnijem slučaju, izgraditi potpuno funkcionalan
za računalo, jedan MK čip s povezanim
ulazno/izlazni uređaji spojeni na njega. Moderni modeli običnog monokristala
čelični MK nadmašuju računalne mogućnosti IBM PC AT na 286. pro-
procesor druge polovice 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čunala do digitalnih fotoaparata u kojima procesor
čvor mora imati napredne računalne funkcije i upravljati višestrukim
brojne vanjske komponente.

Elektronika u grčkom stilu

Godine 1962. obitelj Perlegos, grčki iseljenici rođena u
stanovnici grada Tripolisa. Roditelji su se bavili vinogradarstvom, kao u domovini, a sinovi
Novya, George i Gust Perlegos, odabrali su modernu specijalnost inženjerstva
inženjer elektronike: oboje su prvo diplomirali na Sveučilištu San Jose, a zatim na Stanfordu
sveučilište. 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 jednom od najnaprednijih područja:
razvoj električni izbrisive memorije za zamjenu burn-in OTP ROM-a.
Čak i prije Perlegosa, gotovo istodobno s izumom mikroprocesora 1971.
Intelov zaposlenik Don Frohman izumio je plutajući zatvarač i napravio prvi UV
2K EPROM koji se može izbrisati (256 8).

Z

BILJEŠKE NA MARGINI

U “običnom” životu koristite kratice za jedinice informacija koje se sastoje od jednog slova
"K" (kao i "M") se ne preporučuje: ponekad je vrlo teško razumjeti je li
o kilobitima, kilobajtima, "kiloriječima" ili općenito kilobitima u sekundi. Štoviše
takve se kratice često nalaze, uključujući iu tehničkoj dokumentaciji, a mi ćemo doći
Ponekad pokušavam slijediti ovaj primjer. Definitivno prihvaćamo sljedeća pravila:
la: jedno veliko slovo "K" označava binarne kilobite (1024 bita), "M" označava binarne kilobite
binarnih megabita (1024 kbita). Iako se u literaturi često još uvijek prihvaća da su kilobajti
skratiti kao "KB", a kilobite kao "KB", pokušat ćemo izbjeći ovu zabunu, au

Mikrokontroleri, njihov nastanak i primjena

U svim ostalim slučajevima pišite u cijelosti: kbajt i MB, kbit/s, MB/s. Osim-
bit će oznaka količine memorije programa mikrokontrolera ako se proizvodi
mjereno dvobajtnim riječima: na primjer, 4K riječi značit će 4096 ćelija -
riječi (8 kbajta).

George Perlegos bio je aktivno uključen u ovaj proces, najprije svojim sudjelovanjem, a
tada su pod njegovim izravnim vodstvom stvorene dvije tehnologije,
koji su postali točka rasta za cijelu industriju flash memorije - jedan od
glavni stupovi moderne "digitalne revolucije". Prvo je izumljeno
čip 2716 - 16K (2048 8) EPROM s jednim naponom napajanja +5 V, a zatim
2816 - prvi EEPROM, električni brisljivi ROM, koji je postao prototip
brza memorija.
Godine 1981. Perlegos je napustio Intel i s nekoliko zaposlenika (uključujući
bio je Gordon Campbell, budući kreator još jedne poznate tvrtke Chips &
Technologies) stvara tvrtku Seeq. Bilo je to vrijeme pada elektroničke industrije.
industrijalizaciju, a tri godine kasnije tvrtka je morala otići zbog tužbe
mi investitori. Ne vjerujući im više, George i njegov brat Gust i nekoliko drugih
Godine 1984. sa zaposlenicima Seeqa osobnim smo sredstvima stvorili tvrtku,
čije puno ime zvuči kao Advanced Technology MEmory and Logic ili
skraćeno Atmel.
U početku su proizvodi Atmela bili trajni memorijski čipovi svih vrsta
nove značajke - poput OTP EPROM i EEPROM sa serijskim i paralelnim
pristup i Flash. Godine 1985. Atmel je izdao prvi kućni EEPROM na svijetu.
današnja CMOS tehnologija u nastajanju, a 1989. prva flash memorija s pogonom
od jednog napona +5 V. U kasnim 1980-ima Intel je krenuo kazniti brojne tvrtke
Tvrtke za proizvodnju EPROM-a, uključujući Atmel, zbog navodnog kršenja patenata,
ali se na kraju uspjelo dogovoriti zamjenu licenci. I na kraju-
Na kraju je Atmel dobio licencu za proizvodnju klasičnih mikrokontrolera.
ler 8051, od kojega se Intel u to vrijeme već postupno udaljavao od podrške, koncentrirao se
usavršavanje na PC procesorima.

P

DETALJI

Podsjetimo se da se EEPROM razlikuje od flash memorije po tome što prva dopušta
zasebni pristup bilo kojoj proizvoljnoj ćeliji, a drugi - samo cijelim blokovima. Po-
ovaj EEPROM je manjeg volumena (tipičan volumen specijaliziranih mikro-
EEPROM sklopovi - od jedinica kilobita do jedinica megabita) i skuplji, trenutno
koristi se uglavnom za pohranu 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 s velikim količinama informacija, posebno sa strujanjem čitanja/pisanja,
tipično za medijske uređaje (kao što su digitalni fotoaparati ili MP3 playeri). Uključeno
Flash memorija mikrokontrolera služi 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" među proizvođače mikrokontrolera, u kojima
rum se vrlo brzo našao na prvim pozicijama: proizvodnja je počela 1993. godine
prvi MCU AT89C51 u industriji s ugrađenom flash programskom memorijom. To znači
započela je revolucija u cijeloj inženjerskoj praksi, jer je postojeći
Ranije su MK-ovi imali jednokratnu programabilnu OTP memoriju ili

Uvod

UV perivo, što je puno skuplje za proizvodnju i rad s njim dovodi do
dovodi do velikog gubitka vremena programera. Broj ciklusa prepisivanja za UV
PROM ne prelazi nekoliko desetaka, a izravno dnevno svjetlo pada na
takav kristal može dovesti do brisanja informacija. Stoga, čak i male
ry uređaji su morali biti proizvedeni prvenstveno korištenjem
jesti OTP ROM, što je puno riskantnije: promijeniti u slučaju čak i najmanjeg
greške u snimljenom programu više nisu bile moguće. Pojava flash memorije iz
promijenio cjelokupni “pejzaž” na ovim prostorima: upravo je njegovim uvođenjem čelik
moguće stvari kao što je softversko ažuriranje BIOS-a računala ili "ponovno
rješavanje" upravljačkih programa za potrošačke elektroničke uređaje.
Godine 1995. dva studenta s Norveškog sveučilišta znanosti i tehnologije u Tron-
Heime, Alf Bogen i Vegard Wollen, došli su na ideju o 8-bitnoj RISC jezgri, koja
koji je predložen upravi Atmela. Imena programera uključena su u naziv umjetnosti.
AVR arhitekture: Alf + Vergard + RISC. Ideja mi se toliko svidjela da sam 1996. god
Atmel istraživački centar osnovan je u Trondheimu i već krajem iste
Prvi eksperimentalni mikrokontroler nove AVR serije tzv
AT90S1200. U drugoj polovici 1997. Atmel Corporation je započela serijsku proizvodnju
proizvodnja obitelji AVR.

Zašto AVR?

AVR kontroleri "od rođenja" imaju dvije karakteristike koje ih izdvajaju
obitelj iz ostatka MK. Prvo, skup instrukcija i arhitektura AVR jezgre
razvijeni su zajedno s tvrtkom koja razvija prevoditelje za pro-jezike
programiranje visoke razine IAR Systems. Kao rezultat toga, postalo je moguće
pisati AVR programe u C-u bez velikih gubitaka u performansama
u usporedbi s programima napisanim u asemblerskom jeziku. Više detalja o ovome
raspravit ćemo o tome u poglavlje 5.
Drugo, jedna od značajnih prednosti AVR-a bila je upotreba pokretne trake
ra. Kao rezultat toga, ne postoji koncept strojnog ciklusa za AVR: većina
naredbe se izvršavaju u jednom taktu. Usporedbe radi, napominjemo da oni koji koriste
MK iz obitelji PIC vrlo su popularni; oni izvršavaju naredbu u 4 takta, a klasa
sical 8051 - općenito u 12 ciklusa (iako postoje i moderniji modeli x 51 s ma-
ciklus sabirnice u jednom ciklusu).
Istina, u isto vrijeme smo morali malo žrtvovati jednostavnost sustava zapovijedanja,
posebno uočljivo u usporedbi s x 51, gdje, na primjer, bilo koji otpremnički poslovi
podaci unutar kontrolera, bez obzira na način adresiranja, izvode se na isti način
reprezentacija

u raznim varijantama, dok u AVR gotovo za

Svaka metoda ima svoju naredbu, a ponekad i s ograničenim opsegom djelovanja.
viya. Postoje neke poteškoće u području rada s bitovima. Međutim, ovo nije
dovodi do primjetnih poteškoća pri učenju AVR asemblera: naprotiv, tekstovi
programi su kraći i više podsjećaju na program na visokom jeziku
razini. Također treba uzeti u obzir da od ukupnog broja ekipa od 90 do 130, ovisno
ovisno o modelu, samo 50-60 je jedinstveno, ostali su zamjenjivi.

Mikrokontroleri, njihov nastanak i primjena

I konačno, ovaj nedostatak je potpuno eliminiran kada se koristi jezik C,
zapravo izjednačavanje različitih arhitektura u smislu pro-
programiranje
Velika prednost AVR arhitekture je prisutnost 32 operativna registra,
nije posve jednaka, ali dopušta u nekim slučajevima da se ne obraćaju
RAM-a i ne koristiti stog (što je u principu nemoguće u istom
obitelj x 51), štoviše, u nižim AVR modelima stog općenito nije dostupan
programer Stoga je struktura asemblerskih programa za AVR postala sumnjiva.
vrlo nalikuju jezičnim programima visoke razine u kojima iskazi rade
ne s memorijskim ćelijama i registrima, već s apstraktnim varijablama i konstantama.
Još jedna značajka AVR-a sa stajališta dizajna strujnog kruga je da su svi pinovi unutra
mogu biti u tri stanja (ulaz - isključeno - izlaz) i električni
skije su CMOS strukture (tj. postoji simetrija izlaza
signali i veliki otpor za ulaz). Općenito, ovo je značajno
praktičniji od luka 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 raznih izvora i na temelju vlastitog iskustva,
autor je došao do otprilike sljedeće podjele područja primjene triju naj
uobičajene obitelji kontrolora.

Kontroleri klasične arhitekture x 51 (prvi mikro krugovi obitelji
8051 izdani su ranih 1980-ih) najbolji su za opće
proučavajući predmet. Imajte na umu da osim Atmela, x 51 kompatibilan proizvod vi-
još oko desetak tvrtki pokreće, uključujući divove poput Philipsa i
Siemens, postoje i domaći analozi (serije 1816, 1830, itd.), što ovo čini
arhitektura je najuniverzalnija.

Obitelj AVR preporučuje se početnicima u elektronici,
zbog jednostavnosti i svestranosti uređaja, kontinuitet strukture za
razne vrste kontrolera, jednostavnost dizajna sklopova i programiranja
(u ovom slučaju, "programiranje" znači proces snimanja programa
gram po čipu).

Microchip PIC-ovi su idealni za projektiranje jednostavnih uređaja.
rojevi, posebno oni namijenjeni razmnožavanju.

Ova klasifikacija je u velikoj mjeri subjektivna, a autor neće osporavati druge
gledište: razne obitelji MK postupno se približavaju parametrima,
postaju potpuno zamjenjivi i, kao u svim modernim električnim
Nick, odabir jedne ili druge obitelji često ima “vjerski” karakter.
Osim toga, tri navedene obitelji MK samo su najčešće
među univerzalnim kontrolerima, ali daleko od najpopularnijih općenito. Općenito
broj postojećih obitelji mikrokontrolera procjenjuje se na cca.
Zapravo više od 100, a svake godine ih se sve više pojavljuje. Svaki od
te obitelji mogu uključivati ​​desetke različitih modela. Ujedno i prvo mjesto
među proizvođačima 8-bitnih MK-ova tradicionalno pripada Motorola,
uglavnom zbog kontrolera za mobilne uređaje. Microchip tvrtka

Uvod

Sa svojom PIC obitelji zauzima treće mjesto, a Atmel tek šesti. pri čemu,
Osim 8-bitnih AVR MCU-ova, Atmel proizvodi još nekoliko vrsta MCU-ova,
koji uključuju ne samo spomenute nasljednike 8051, već i ARM-
procesori i specijalizirani mikrokontroleri za različite primjene. Štoviše
ova formalna statistika još ništa ne znači - na primjer, među MK s ugrađenim
Atmelova flash memorija već posjeduje trećinu svjetskog tržišta.
Od 2002. do 2003. u svijetu se godišnje proizvodilo 3,2 milijarde komada mikrokontejnera.
troleri. Imajte na umu da se obujam proizvodnje PC procesora može procijeniti na
200 milijuna jedinica godišnje, tj. to je samo oko 6% tržišta (u financijskom smislu)
Općenito, međutim, omjer je drugačiji, jer je tipična cijena običnog MK
je 2–5 dolara, a PC procesor je barem red veličine viši, i
ponekad doseže stotine dolara). Stoga ne bi bilo pretjerano reći
da je specijalnost inženjera elektronike specijalizirana za mikro-
kontroleri, nije ništa manje važan i rijedak od računalnog programera -
sistemski inženjer ili kreator prilagođenih aplikacija.

Ova je knjiga namijenjena čitatelju koji želi proučavati strukturu i dizajn sklopova
posebne značajke 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
Razmotrit ćemo odabir programskog okruženja u poglavlje 5). Naglasak u knjizi je
dati čitatelju praktične savjete, opisati gotove algoritme za
tipični zadaci koji se javljaju programerima prilikom implementacije određenih
MK funkcije. Autor zajedno s čitateljima detaljno razmatra niz pitanja koja
ry obično nadilaze opseg priručnika za programiranje MK: rad s naknadnim
praktična sučelja, aritmetičke operacije, sučelje s računalom, praktič
tehnička provedba načina rada za uštedu energije.
U isto vrijeme, autor nije htio detaljno analizirati apsolutno sve što je moguće -
STI MK AVR: čak i nekoliko svezaka ne bi bilo dovoljno za ovo. Prisiljeni smo ići okolo
pitanja kao što su debugging i programiranje korištenjem JTAG sučelja su obećavajuća
ti, koji otkrivaš samoprogramiranje kontrolera, samo slučajno
Radujemo se najzanimljivijem problemu sinteze zvuka i drugim primjenama PWM modova
mjerači vremena.
U ovoj je knjizi većina primjera usredotočena na upotrebu minora
(s kapacitetom memorije od 8 MB) modelima podobitelji Mega, budući da su najviše
Svestraniji i pogodniji za širok raspon zadataka bez nepotrebne složenosti
shema. U jednostavnijim slučajevima autor se usredotočio na najuniverzalnije
od mlađih modela ATtiny2313 (o njegovoj kompatibilnosti s “klasičnom” verzijom
AT90S2313 cm. odjeljak Poglavlje "Program brojača koji koristi prekide".
ti 5
). Većina navedenih primjera može se napraviti gotovo bez ikakvih izmjena.
prilagođen drugim AVR modelima uz odgovarajuću konfiguraciju
cija.

DIO

Opća načela uređaja

i funkcioniranje Atmel AVR-a

Poglavlje 1. Pregled Atmel AVR mikrokontrolera

2. Poglavlje. Opća struktura, organizacija pamćenja,

taktiranje, resetiranje

Poglavlje 3. Uvod u periferije

Poglavlje 4. Prekidi i načini uštede energije

POGLAVLJE

Pregled mikrokontrolera
Atmel AVR

Atmel AVR je obitelj svestranih 8-bitnih mikrokontrolera
troleri temeljeni na zajedničkoj jezgri s različitim ugrađenim periferijama
rojevi. Mogućnosti AVR MK omogućuju vam rješavanje mnogih tipičnih problema,
koji nastaju pred razvijačima radio-elektroničke opreme.
Značajke Atmel AVR mikrokontrolera.

Performanse su oko 1 MIPS/MHz. MIPS (Milijuni instrukcija po
Drugo, milijun naredbi u sekundi) jedan je od najstarijih i to na mnoge načine
loša karakteristika performansi procesora, jer skupovi instrukcija
za različite procesore su različiti, i, prema tome, isti broj
upute za različite sustave dat će različite korisne rezultate. Štoviše
za jednostavne 8-bitne računalne sustave koji ne sadrže upute, operativni
rad s velikim brojevima, brojevima s pomičnim zarezom i nizovima
podataka, to je dobar pokazatelj za usporedbu njihove izvedbe. Izračunaj
Jezgra performansi AVR-a na nizu zadataka premašuje 16 puta
linijski 80286 procesor.

Napredna RISC arhitektura. RISC (Reduced) koncept
Instruction Set Computing, izračuni sa smanjenim skupom instrukcija) imaju prednost
zahtijeva prisutnost skupa naredbi koji se sastoji od minimalno kompaktnog i brzog
izvršavanje instrukcija; u isto vrijeme, takve glomaznije operacije kao što su
izračuni s pomičnim zarezom ili višebitna aritmetika
u realnim brojevima, trebao bi biti implementiran na razini potprograma. Koncept
RISC pojednostavljuje strukturu jezgre (tipična AVR jezgra sadrži samo 32 tisuće jedinica).
tranzistora, za razliku od desetaka milijuna u PC procesorima) i ubrzanih
demonstrira svoj rad: tipična instrukcija se izvršava u jednom taktu (osim naredbi
grananje programa, pristup memoriji i neki drugi koji rade s
dugi podaci). AVR ima jednostavan dvostupanjski kon-
Weir, kada se naredba izvršava u jednom taktu dok se sljedeća dohvaća.
Za razliku od Intelovih arhitektura, “klasični” AVR nema hardverski množitelj
dijeljenje/dijeljenje, međutim, podfamilija Mega sadrži operacije množenja.

Odvojene sabirnice memorije za naredbe i podatke. AVR (kao i većina drugih
mikrokontroleri) ima tzv. Harvardska arhitektura, gdje su memorijska područja