Programiranje avr v asemblerju. Praktično programiranje mikrokontrolerjev Atmel AVR v zbirnem jeziku. (3. izdaja). Elektronika v grškem slogu


Torej, upam, da je vestni bralec že sestavil programator, poskusno ploščo in tudi namestil in konfiguriral potrebno programsko opremo.

Zdaj, ko sem napisal prvi članek v seriji, razumem, da sem bil malo navdušen in naredil enako napako kot moji predhodniki, ko sem dal besedno zvezo "za začetnike". Bolj natančno bi bilo oblikovati temo "Za začetnike v programiranju v zbirnem jeziku", torej predvidevam, da bralec že vsaj površno razume, kaj je mikrokrmilnik, sicer nam bo vzelo veliko časa samo za se seznanite s to temo. Za tiste, ki jih sploh ne poznate, lahko priporočim serijo člankov S. Ryumika, "Mikrokontrolerji AVR", ki je po mojem mnenju popolnoma čudovita, objavljena v reviji Radioamator (št. 1-11 za 2005) . V tem ciklu je bil kot osnovni krmilnik izbran ATmega8, vendar so splošne funkcionalne enote zgoraj omenjenega krmilnika in ATtiny13 praktično enake.

Za neposredno seznanitev z mikrokontrolerjem ATtiny13 priporočam knjigo A.V. Evstifeeva "Mikrokontrolerji" Družina AVR majhen. Uporabniški priročnik" (M.: Založba "Dodeka-XXI", 2007. - 432 str.). Vsebuje prevedene in sistematizirane podatkovne liste za celotno paleto krmilnikov majhne družine in bi po mojem mnenju moral biti namizje branje za tiste, ki se ukvarjajo s programiranjem mikrokontrolerjev.

Ko pa zgodba napreduje, bom podal nekaj informacij o tistih vozliščih in modulih krmilnika, ki bodo uporabljeni v napisanih programih.

Toda vse to je lirična digresija. Vrnimo se neposredno k zgodbi.

Krmilnik ATtiny13 ima kljub svoji majhnosti zelo dobre funkcionalne lastnosti. In majhno število zatičev je več kot kompenzirano s številom funkcij, ki jih vsak od njih opravlja. Pinout in opis zatičev sta predstavljena spodaj:

Tabela je vzeta iz zgoraj omenjene knjige A.V. Evstifejeva.

Kot lahko vidite, lahko vsak zatič opravlja vsaj tri funkcije ali celo veliko več. Na začetku ne bomo obravnavali alternativnih funkcij, ampak samo osnovno - digitalni vhod/izhod.

Kot je razvidno iz slike in tabele, imajo vsi zatiči, z izjemo močnostnih zatičev, ime PB, ki mu sledi serijska številka. Kaj to pomeni? Vsi pini krmilnika so združeni v 8 kosov za lažje delo z njimi, vsaki skupini 8 pinov pa so dodeljeni trije posebni I/O registri. Na splošno je koncept registrov ključen pri delu s krmilniki, zlasti v asemblerju. Oglejmo si podrobneje vsakega od treh zgoraj omenjenih registrov. Vse so enobajtne celice v pomnilniku krmilnika. Vsak bit ustreza enemu od izhodov krmilnika, številka bita v registru pa sovpada z izhodno številko (na primer 0. bit je odgovoren za izhod PB0, 1. bit je odgovoren za izhod PB1 itd.). Vsi registri imajo svoje ime, s katerim dostopamo pri pisanju programov. Kakšna imena so to?

1. Register DDRB je odgovoren za smer prenosa informacij vsakega pina krmilnika. Če je katerikoli bit tega registra »0«, bo ustrezen izhod vhod, če pa »1«, potem izhod. Poleg tega je vsak izhod konfiguriran posebej in kjer koli v programu. To pomeni, da je pod različnimi pogoji ali ob različnih časih lahko isti zatič konfiguriran kot vhod ali izhod, neodvisno od drugih zatičev.

2. Register PINB vsebuje trenutno stanje vseh nožic: če je na nožici napetost, se v ustrezni bit zapiše logična »1«, če napetosti ni, se zapiše logična »0«. Ta register se uporablja predvsem za branje stanja zatiča, ki je v načinu vnosa.

3. Register PORTB opravlja dvojno funkcijo glede na smer prenosa informacij. Če zatič deluje kot digitalni izhod, potem pisanje "1" v kateri koli bit registra PORTB povzroči, da se pojavi napetost na ustreznem zatiču, pisanje "0" pa povzroči, da napetost izgine. Tako je v izhodnem načinu ta register tisti, ki določa stanje vsakega zatiča. V načinu digitalnega vnosa zapisovanje logične "1" v kateri koli bit povzroči, da se vgrajeni vlečni upor poveže z ustreznim zatičem, pisanje "0" pa ga onemogoči. Kakšna stvar je ta “pull-up resistor” in čemu je namenjen? Če zatič deluje kot digitalni vhod, je upor vhodnega medpomnilnika precej visok in vhodni tok precej majhen. Zato lahko vsaka električna motnja privede do spontanega preklopa izhoda v poljubno stanje. Da se to ne bi zgodilo, je med vhodom in virom napajanja priključen upor z uporom več deset kiloohmov, ki "potegne" vhodni potencial na napajalno napetost (od tod tudi ime). Tok, ki teče skozi ta upor, je dovolj majhen, da ne moti preostalega vezja, vendar dovolj velik, da prepreči nenamerno preklapljanje nožic. Pri delu z gumbi bomo pogosto uporabljali vlečne upore, saj ko niso pritisnjeni, zatiči, na katere so povezani, v bistvu "visijo" v zraku in so podvrženi motnjam.

Omeniti je treba, da se ob vklopu vsi registri ponastavijo na 0 in vsak pin deluje kot digitalni vhod brez vlečnega upora.

Zdaj, ko imamo vsaj nekaj pojma o tem, KAJ je potrebno za delo z vhodi krmilnika, je čas, da ugotovimo, KAKO delati z njimi.

Napišimo prvo program dela v monterju. Najprej bom podal celoten algoritem za ustvarjanje novega projekta, vendar ga bom v prihodnosti izpustil in se osredotočil le na besedilo samega programa.

1. Pojdite v mapo asm in v njej ustvarite novo mapo. Preimenujte ga v ime, ki nam ustreza. Če sem natančen, jih bom imenoval z našo številko koraka. V tem primeru "step2".

2. Z desno miškino tipko kliknite datoteko build.bat in spremenite pot do izvorne datoteke, ki kaže na novo ustvarjeno mapo (2. korak). Po tem je moja vsebina videti takole:

"F:\Prog\AVR\asm\avrasm32 -fI %F:\Prog\AVR\asm\step2\main.asm
pavza"

Za vas se lahko razlikuje glede na to, kam ste razpakirali arhiv.

3. Pojdite v mapo Asmedit in zaženite program ASM_Ed.exe

4. V okno, ki se odpre, napišite besedilo programa. Na tej točki se bom podrobneje posvetil, saj je glavna v naši današnji lekciji, pa tudi v naslednjih.

Kaj je besedilo asemblerskega programa? Lahko vključuje več elementov, napisanih po določenih pravilih:

Navodila za sestavljanje z ali brez operandov, odvisno od sintakse navodil. Med imenom ukaza in prvim operandom mora biti presledek, tabulator ali poljubno število obojega. Operandi so ločeni z vejico, pred ali za njo pa je lahko tudi poljubno število presledkov ali zavihkov;

Direktive, od katerih se vsaka začne z ".";

Oznake, ki so mesta v programu, ki jih uporabnik poljubno poimenuje in do katerih bo morda treba navigirati. Vsaka oznaka se konča z znakom ":";

Komentarji, ki se začnejo z ";". Vse besedilo od začetka komentarja do konca vrstice je pri ustvarjanju hex datoteke prezrto in je lahko povsem poljubno;

Prazne vrstice za boljšo strukturo in berljivost programa.

V vsaki vrstici je lahko največ en ukaz. Dovoljena pa je sočasna prisotnost oznake v vrstici, ki ji sledi ukaz in komentar.

S pomočjo teh pravil bomo napisali program, ki bo med držanjem gumba SB1 prižgal LED2 in ga izklopil, če gumb spustimo. Besedilo programa je predstavljeno spodaj:

.include "F:\Prog\AVR\asm\Appnotes\tn13def.inc"
sbi DDRB, 4 ;РВ4 - izhod (LED2)
sbi PORTB, 2 ; Vklopite vlečni upor na PB2 (gumb SB1)
sbic PINB, 2 ;Če je PB2=0 (pritisnjen gumb), preskoči naslednje. linija
sbi PORTB, 4 ; Namestitev PB4 v 1 (izklop LED)
sbis PINB, 2 ;Če je PB2=1 (gumb sproščen), preskoči naslednje. linija
cbi PORTB, 4 ; Nastavitev PB4 na 0 (LED sveti)

Oglejmo si ga podrobneje. Prva vrstica vsebuje direktivo "include", napisano po zgornjih pravilih s piko na začetku. Njegov namen je vključiti datoteko, ki je navedena za njim, v besedilo programa. Kot sem rekel v prvem koraku, bomo potrebovali datoteko "tn13def.inc". V tej vrstici boste morali spremeniti pot do lokacije mape Appnotes v računalniku. Zakaj moramo vključiti to datoteko? Radovedni bralec lahko pogleda vanj in prebere njegovo vsebino, a najverjetneje bo sprva le malo razumel. Zaenkrat bom rekel, da vsebuje ujemanje imen registrov, ki jih asembler privzeto ne pozna, z njihovimi fizičnimi naslovi v krmilniku.

Naslednje vrstice so ukazi asemblerja. Pozoren bralec bo opazil, da so uporabljeni skupaj štirje različni ukazi. Poglejmo si namen vsakega.

Ukaz sbi ima dva operanda: prvi je ime registra, drugi je bitna številka. Kot rezultat njegove izvedbe je podani bit v podanem registru nastavljen na "1".

Ukaz cbi je v sintaksi podoben zgornjemu in opravlja ravno nasprotno funkcijo - podani bit v podanem registru ponastavi na "0".

Ukaz sbis je tudi po sintaksi podoben zgornjemu. Vendar za razliko od njih ne izvaja nobenih operacij z registri, ampak samo preveri stanje podanega bita v podanem registru in če je enako "1", preskoči vrstico, ki sledi ukazu. V nasprotnem primeru se izvrši vrstica, ki ji sledi, kot tudi vse ostale za njo.

Ukaz sbiс je nasprotje ukaza sbis. Naslednjo vrstico preskoči, če je podani bit registra "0".

Zdaj, če povzamemo vse zgoraj navedeno, poskusimo razumeti algoritem programa. Za začetek bom to naredil dobesedno vrstico za vrstico.

1 vrstica. Direktiva include vključuje datoteko tn13def.inc, ki vsebuje definicije registrov.

2. vrstica. Ukaz sbi nastavi "1" v bitu 4 registra DDRB in s tem preklopi pin PB4 na izhod. Če pogledate diagram plošče (slika 1 prejšnjega koraka), lahko vidite, da je LED2 priključen na ta pin. Za ukazom in znakom ";" napisan je bil komentar, ki na kratko pojasnjuje pomen dejanj, izvedenih v vrstici.

3 vrstica. Isti ukaz sbi nastavi "1" v bitu 2 registra PORTB, s čimer poveže notranji vlečni upor s priključkom PB2, na katerega je priključen gumb SB1. Ker nismo spremenili stanja bita 2 registra DDRB, bo ta pin ostal vhod, kar pravzaprav potrebujemo.

4 vrstica. Ukaz sbic preveri prisotnost logične "0" na vhodu PB2 z uporabo registra PINB. Če natančno pogledate diagram, lahko vidite, da gumbi, ko pritisnete, zaprejo ustrezen terminal s skupno žico. To je standardna tehnika, saj je ob izpustitvi gumba na izhodu zaradi vlečnega upora prisotna logična “1”, ob pritisku na gumb pa se zaradi povezave vtičnice pojavi logična “0”. izhod na skupno žico. Torej, če je na pinu PB2 logična "0", to je, da je gumb pritisnjen, preskočimo naslednjo vrstico, in če je gumb izpuščen, ga nato izvedemo.

5 vrstica. V njem ukaz sbi nastavi logično “1” v bitu 4 registra PORTB in s tem izklopi LED2. Bistroumni bralec se lahko vpraša, zakaj se LED dioda ugasne, če na izhod priključimo napetost. Odgovor je v dizajnu. LED je z anodo povezan z napajalno žico, katoda pa z izhodom krmilnika. Torej, če na izhod priključite napetost, bosta potenciala anode in katode enaka in LED bo ugasnila. Če je na izhodu logična »0«, bo LED napetost priključena na LED in bo zasvetila. Tako par vrstic 4 in 5 izklopi LED2, ko se gumb sprosti.

6 vrstica. Pomen je nasproten 4. Ukaz sbis preveri prisotnost logične "1" na vhodu PB2, torej preveri, ali je gumb izpuščen. Če gumb izpustite, se naslednja vrstica preskoči in naslednja vrstica preide na naslednjo. Ker pa je 7. vrstica zadnja, pride do prehoda v 2. vrstico. Če je gumb pritisnjen, se izvede vrstica 7.

7 vrstica. Nasprotje 5. Ukaz cbi ponastavi bit 4 registra PORTB na "0" in s tem vklopi LED2. Tako par vrstic 6 in 7 vklopi LED2 ob pritisku na tipko SB1.

Kot lahko vidite, nismo naredili nič posebej zapletenega. Z znanjem le 3 registrov in 4 navodil smo napisali svoj prvi program. Kaj storiti z njo naprej? Če še niste pozabili, nadaljujemo s pisanjem algoritma za ustvarjanje programa.

5. Ko napišete besedilo programa v okno urejevalnika, izberite menijsko postavko »Datoteka« in na seznamu, ki se odpre, kliknite »Shrani kot ...«. V oknu za shranjevanje datoteke izberite mapo step2, ki smo jo ustvarili, in podajte ime datoteke »main«, saj je to ime, ki smo ga navedli v datoteki »build.bat«.

Po shranjevanju mora biti okno programa videti takole:

6. Ustvarite hex datoteko. Če želite to narediti, kliknite gumb "II" v orodni vrstici. Prikazati bi se moralo naslednje okno:

Obvešča nas, da je bila sestava končana brez napak in da je bila ustvarjena firmware datoteka “main.hex” z obsegom 6 besed, to je 12 bajtov. ugotavljam, da podoben program v jeziku C bi imel vsaj 5-krat večji obseg.

7. Ko gremo v mapo step2, najdemo dodatek k njej v obliki novo ustvarjene datoteke main.hex, ki jo je zdaj mogoče všiti v krmilnik s katerim koli programatorjem, kar je treba storiti, da vidimo rezultate program, ki smo ga napisali. Po utripanju krmilnika, če je vezje pravilno sestavljeno, bi moralo vse delovati v skladu z algoritmom, ki smo ga razvili: ko so gumbi spuščeni, bi morala LED2 biti ugasnjena, medtem ko je gumb SB1 pritisnjen, bi moral biti prižgan.

Pred naslednjim korakom predlagam, da opravite naslednje naloge:

1. Programu dodamo obdelavo pritiska na tipko SB2 z nasprotnim algoritmom: ko tipko SB2 spustimo, naj sveti LED1, ob pritisku pa ugasne.

2. Napišite program za krmiljenje LED2 z uporabo obeh gumbov. Ob pritisku na tipko SB1 mora LED zasvetiti in svetiti do pritiska na tipko SB2, ki ugasne do naslednjega pritiska na tipko SB1.

Prevajalnik prevaja izvorne kode od zbirnega jezika do objektne kode. Nastala objektna koda se lahko uporabi v simulatorju ATMEL AVR Studio, ali v ATMEL AVR In-Circuit Emulator. Prevajalnik tudi generira kodo, ki jo je mogoče neposredno programirati v mikrokontrolerje AVR.

Prevajalnik ustvari kodo, ki ne zahteva povezovanja.

Prevajalnik deluje pod Microsoft Windows 3.11, Microsoft Windows95 in Microsoft Windows NT. Poleg tega obstaja konzolna različica za MS-DOS.

Komplet družinskih navodil AVR mikrokontrolerji na kratko opisano v tem dokumentu, za popolnejša navodila si oglejte popolna navodila in dokumentacijo za vaš specifični mikrokrmilnik.

Izvorne kode

Prevajalnik deluje z izvornimi datotekami, ki vsebujejo navodila, oznake in direktive. Navodila in direktive imajo običajno enega ali več operandov.

Vrstica kode ne sme biti daljša od 120 znakov.

Vsaka vrstica se lahko začne z oznako, ki je niz znakov, ki se konča z dvopičjem. Oznake se uporabljajo za označevanje mesta, kamor se prenese nadzor med prehodi, kot tudi za določanje imen spremenljivk.

Vhodni niz ima lahko eno od štirih oblik:

[oznaka:] direktiva [operandi] [Komentar][oznaka:] navodilo [operandi] [komentar]KomentarPrazna vrstica

Komentar ima naslednjo obliko:

; [Besedilo]

Položaji v oglatih oklepajih niso obvezni. Besedilo za podpičjem (;) in do konca vrstice prevajalnik ignorira. Oznake, navodila in smernice so podrobneje opisane spodaj.

Primeri:

oznaka: .EQU var1=100 ; Nastavi var1 na 100 (To je direktiva) .EQU var2=200 ; Nastavi var2 na 200

test: rjmp test ; Neskončna zanka (To je navodilo) ; Vrstica samo z enim komentarjem

; Še ena vrstica s komentarjem

Prevajalnik ne zahteva, da so oznake, direktive, komentarji ali navodila v določenem stolpcu vrstice.

navodila za procesor avr

Spodaj je nabor ukazov za AVR procesorje; njihov podrobnejši opis je na voljo v AVR Data Book.

Aritmetika in logična navodila

Mnemotehnika

Operandi

Opis

Delovanje

Zastave

Cikli

Rd,Rr

Seštevanje brez prenašanja

Rd,Rr

Seštevanje s prenašanjem

Rd = Rd + Rr + C

Rd,Rr

Odštevanje brez prenašanja

Rd,K8

Odštevanje konstante

Rd,Rr

Odštevanje s prenašanjem

Rd = Rd - Rr - C

Rd,K8

Odštevanje konstante s prenosom

Rd = Rd - K8 - C

Rd,Rr

Logični IN

Rd,K8

Logični IN s konstanto

Rd,Rr

Logični ALI

Rd,K8

Logični ALI s konstanto

Rd,Rr

Logični izključujoči ALI

Bitna inverzija

Sprememba znaka (dodatna koda)

Rd,K8

Nastavite bit(e) v register

Rd,K8

Počisti bit(e) v registru

Rd = Rd ($FF - K8)

Povečanje vrednosti registra

Zmanjšajte vrednost registra

Preverjanje ničle ali negativnosti

Počisti register

Nastavite register

Rdl,K6

Dodajte konstanto in besedo

Rdh:Rdl = Rdh:Rdl + K6

Rdl,K6

Odštejte konstanto od besede

Rdh:Rdl = Rdh:Rdl - K 6

Rd,Rr

Množenje nepredznačenih števil

R1:R0 = Rd * Rr

Rd,Rr

Množenje predpisanih števil

R1:R0 = Rd * Rr

Rd,Rr

Množenje predznačenega števila z nepredznačenim

R1:R0 = Rd * Rr

Rd,Rr

Množenje nepredznačenih ulomkov

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

Rd,Rr

Množenje predznačenih ulomkov

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

Rd,Rr

Množenje predznačenega ulomka z nepredznačenim številom

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

Navodila podružnice

Mnemotehnika

Operandi

Opis

Delovanje

Zastave

Cikli

Relativni prehod

Posredni prehod na ( Z)

Podaljšan posredni prehod na ( Z)

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

Relativni klic podprograma

SKUP = PC+1, PC = PC + k + 1

Indirekten klic ( Z)

SKUP = PC+1, PC = Z

Podaljšan posredni klic ( Z)

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

Klicanje podprograma

SKUP = PC+2, PC = k

Vrnitev iz podprograma

Vrnitev iz prekinitve

Rd,Rr

Primerjaj, preskoči, če je enako

če (Rd ==Rr) PC = PC 2 ali 3

Rd,Rr

Primerjaj

Rd,Rr

Primerjaj s prenosom

Rd,K8

Primerjaj s konstanto

Rr,b

Preskoči, če je bit v registru počiščen

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

Rr,b

Preskoči, če je bit v registru nastavljen

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

p,b

Preskoči, če je bit v vratih počiščen

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

p,b

Preskoči, če je bit vrat nastavljen

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

s,k

Skoči, če je zastavica v SREG počiščena

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

s,k

Pojdi, če je zastavica v SREG nastavljena

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

Pojdi, če je enak

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

Preskoči, če ni enako

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

Pojdi, če je prenos nameščen

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

Pojdi, če je prenos odobren

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

Skoči, če je enako ali večje

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

Preskoči, če manj

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

Pojdi, če minus

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

Pojdi, če plus

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

Skoči, če je večje ali enako (podpisano)

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

Skoči, če manj (podpisano)

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

Skok, če je nastavljena notranja zastavica za prenos

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

Skoči, če je notranja zastavica za prenos počiščena

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

Skoči, če je nastavljena zastavica T

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

Skoči, če je zastavica T počiščena

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

Skoči, če je nastavljena zastavica za prelivanje

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

Skoči, če je zastavica za prelivanje počiščena

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

Pojdi, če so prekinitve omogočene

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

Pojdi, če so prekinitve onemogočene

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

* Za operacije dostopa do podatkov je število ciklov prikazano pri dostopu do notranjega podatkovnega pomnilnika in ni pravilno pri delu z zunanjim RAM-om. Za ukaze CALL, ICALL, EICALL, RCALL, RET in RETI je potrebno dodati tri cikle plus dva cikla za vsako čakanje v krmilnikih z osebnim računalnikom manj kot 16 bitov (128KB programskega pomnilnika). Za naprave s programskim pomnilnikom, večjim od 128 KB, dodajte pet ciklov plus tri cikle za vsako čakanje.

Navodila za prenos podatkov

Mnemotehnika

Operandi

Opis

Delovanje

Zastave

Cikli

Rd,Rr

Kopiraj register

Rd,Rr

Kopirajte nekaj registrov

Rd+1:Rd = Rr+1:Rr, r,d sodo

Rd,K8

Konstanta obremenitve

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

Neposredno varčevanje

X,Rr

Posredno ohranjanje

X+,Rr

(X) = Rr, X=X+1

-X,Rr

Y,Rr

Posredno ohranjanje

Y+,Rr

Posredno varčevanje s postinkrementom

(Y) = Rr, Y=Y+1

-Y,Rr

Posredna konzervacija s preddekrementom

Y=Y-1, (Y) = Rr

Y+q,Rr

Z,Rr

Posredno ohranjanje

Z+,Rr

Posredno varčevanje s postinkrementom

(Z) = Rr, Z=Z+1

-Z,Rr

Posredna konzervacija s preddekrementom

Z=Z-1, (Z) = Rr

Z+q,Rr

Posredno shranjevanje z zamenjavo

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

Shranjevanje v programski pomnilnik

(Z) = R1:R0

Razširjeno shranjevanje v programskem pomnilniku

(RAMPZ: Z) = R1:R0

Rd,p

Preberi vrata

p,Rr

Pišite v vrata

Potiskanje registra na sklad

Izpiranje registra iz sklada

* Za operacije dostopa do podatkov je število ciklov prikazano pri dostopu do notranjega podatkovnega pomnilnika in ni pravilno pri delu z zunanjim RAM-om. Za navodila LD, ST, LDD, STD, LDS, STS, PUSH in POP morate dodati en cikel in en cikel za vsako čakanje.

Navodila za delo z nastavki

Mnemotehnika

Operandi

Opis

Delovanje

Zastave

Cikli

Logičen premik v levo

Rd(n+1)=Rd(n), Rd(0)=0, C=Rd(7)

Logičen premik v desno

Rd(n)=Rd(n+1), Rd(7)=0, C=Rd(0)

Zavrtite levo preko C

Rd(0)=C, Rd(n+1)=Rd(n), C=Rd(7)

Zavrtite desno preko C

Rd(7)=C, Rd(n)=Rd(n+1), C=Rd(0)

Aritmetični premik v desno

Rd(n)=Rd(n+1), n=0,...,6

Preurejanje zvezkov

Rd(3..0) = Rd(7..4), Rd(7..4) = Rd(3..0)

Postavitev zastave

Čiščenje zastave

p,b

Nastavite bit na vrata

p,b

Počisti bit v vratih

Rr,b

Rd,b

Naloži bit iz T v register

Nastavi zastavico za prenos

Počisti zastavico za prenos

Nastavi zastavico negativnega števila

Počisti zastavico negativnega števila

Nastavite ničelno zastavico

Počisti ničelno zastavico

Nastavite zastavico za prekinitev

Počisti zastavico prekinitve

Nastavite oznako s podpisano številko

Počisti podpisano številko

Nastavi zastavico za prelivanje

Počisti zastavico za prelivanje

Nastavite zastavo T

Počisti zastavico T

Nastavite notranjo zastavico za prenos

Jasna notranja zastavica za prenos

Brez operacije

Spanje (zmanjšajte porabo energije)

Glej opis navodil

Ponastavitev nadzornega časovnika

Glej opis navodil

Asembler ne razlikuje med velikimi in malimi črkami.

Operandi so lahko teh vrst.

Dober večer vsi skupaj! Oddajam iz prijetnega sveta, imenovanega "montažer". Takoj bom pojasnil, da se tema nanaša na mikrokontrolerje AVR - in še ne vem, ali bo ta objava koristna za tiste, ki želijo uporabljati asembler za katero koli drugo nalogo. Dejstvo je, da sem se dobesedno pred nekaj dnevi začel učiti asemblerja iz nič - narediti moram eno napravo - in odločil sem se, da bom vse v njej naredil sam. Tako sem nekega lepega dne to spoznal Učenje asemblerja je popolnoma neuporabno! Zbirni jezik je mogoče le razumeti! Se pravi, vsem tistim, ki želite programirati v zbirnem jeziku, toplo priporočam, da se podrobno poglobite v FIZIČNO delovanje mikrokontrolerja in nato preučite zapletenost ukazov.
Zato bom verjetno začel majhno serijo člankov, v katerih vam bom povedal od samega začetka kako točno Razumel sem določene stvari v programiranju zbirnega jezika - mislim, da bom za tiste, ki sploh ne razumejo, kaj je ASM, ravno tak "prevajalec" iz jezika tistih, ki so zelo dobri v tej zadevi.

Takoj bom rekel, da sem bolj ali manj prišel v to temo na pobudo DIHALT - zato bodo ti članki nekakšen prevod iz super-duper montažno-mikrokontrolerskega jezika v jezik, ki je razumljiv večini ljudi. No, upam, da me bodo guruji popravili, ko bo igra napredovala, in če bom kar naenkrat razložil kaj narobe, me bodo popravili.
Prvi sklepi o assemblerju, ki sem jih naredil pred nekaj dnevi, so me torej šokirali do srži - in bral sem DI HALT članke od 23.00 do 5.00 - nakar sem šel zadovoljen in srečen spat.Razumel sem bistvo programiranje v zbirnem jeziku za mikrokontrolerje.
Kako to še bolj preprosto razložiti? Mislim, da moramo izhajati iz samega bistva.
***
Sprva se ne bomo spuščali v tehnične podrobnosti (o njih bomo govorili v naslednjem članku) - samo predstavljajte si, da obstajajo 3 znaki:
1. Mikrokrmilnik - To je Anglež Steve, ki je prišel k Rusu. Angleško zna odlično, rusko pa sploh ne razume - niti ene besede. Samo angleško. Izgubil je prepir in se zavezal, da bo brez vprašanj naredil vse, kar bo od njega zahteval Rus.
2. Sestavljalec - To je prevajalec Vasya, katerega mati je Angležinja, oče pa Rusin. Odlično zna angleško in rusko.
3. Mi - To je Rus, h kateremu je prišel Anglež. No, to je, mi smo mi =) Hkrati znamo odlično rusko in (!!!) malo angleško - samo malo, s slovarjem.
***
Predstavljajte si to situacijo - v vaši sobi na stolu sedi Anglež. In sedite za računalnikom in berete to objavo, ko se nenadoma nenadoma odpre vaše okno! To je smola! Veter piha, zavesa se je spremenila v jadro ... Lepo bi jo bilo zapreti! Toda preveč je leno, da bi vstal s stola, odstranil noge s sistemske enote, jih nataknil v copate, odložil vrček kave (piva) in se boril proti elementom. In potem se nenadoma zaveš, da imamo v sobi Angleža, ki je izgubil stavo in da je čas, da ga lovimo! In tako sladko mu rečeš: »Stari! Prosim, zaprite okno in potem se lahko spet usedete na stol!« on pa sedi, te začudeno gleda in ne naredi nič! Seveda lahko udarite po zeljni juhi - a potem vas še vedno ne bo razumel! Potem pokličeš prijatelja prevajalca Vasilija - pride in se usede k Angležu na stol. In rečeš - Prevedi: "Steve, pojdi in zapri okno, nato pa sedi nazaj na stol!" Prevajalec prevaja v angleščino - Anglež razume in gre in zapre okno, potem pa pride in sede na stol.
Na tej točki morate samo razumeti vlogo sestavljalca v tej verigi »Mi-Sestavljalec-krmilnik«.
Se pravi, kako bi vsi razumeli, kaj je asembler? Potem berite naprej.
***

Torej, predstavljajmo si to situacijo. Rečeš Vasji - "Poslušaj, no, skratka, tako je - doma sem pozabil kalkulator, deli 56983 z 2 in reci Stevu, naj naredi toliko sklec s pestmi" in Vasja računa na kalkulator in pove Stevu v angleščini "Naredite sklece s pestmi 28491-krat" Imenuje se "DIREKTIVE"- z drugimi besedami, direktiva je naloga za Vasjo, rezultat katere je Stevovo dejanje.

Obstaja še ena situacija - rečete Vasji "Reci Stevu, naj naredi 28491 sklec" in Vasja preprosto prevede vaše besede v angleščino. Se imenuje OPERATER

Preprosto je - obstaja direktiva in obstaja operater. Operater je vaše neposredno navodilo Stevu, kaj naj naredi - Vasya tukaj samo prevede vašo zahtevo v angleščino. In Direktiva je naloga za Vasjo samega - in Vasja najprej naredi, kar ste mu rekli, nato pa, odvisno od rezultata, nekaj pove Stevu.

Zdaj bomo Angleža redno mučili! Toda najprej moramo bolje spoznati našega prevajalca Vasjo. Vedeti morate naslednje - Vasya vas vedno brezpogojno uboga - kar mu je bilo rečeno, naredi. Vasyin kalkulator nima decimalnih mest - če pogledate primer s sklecami, potem je 56983 \ 2 = 28491,5 - vendar je Vasya vse za decimalno vejico odrezana - in vidi samo celo število - in ni pomembno ali bo 28491.000001 ali bo 28491.9999999 - za Vasya je to ena velika zadeva, v obeh primerih bo 28491. Nič ni zaokroženo. Več pomembnih informacij o Vasji. Vasja je krut - vseeno mu je, da Steve dela sklece osemindvajset tisočkrat. Povedali so mu, da je Vasya prevedel. In ne samo, da je prevajal, ampak me je tudi prisilil, da naredim, kar ste zahtevali. Torej, če Steve umre na triindvajset tisoč petsto trinajstem skleci, bo to v celoti vaša krivda.

Pravzaprav je to za zdaj vse. V naslednji objavi se bomo poglobili - zaenkrat je dovolj, da to razumemo. Predstavljajte si to situacijo in razumejte, kaj je kaj, kdo ima kakšno vlogo in kako se direktiva razlikuje od operaterja.
In potem bomo poskušali vse poimenovati s pravim imenom in približno oceniti, kako asembler deluje z mikrokontrolerjem kot odrasel.

Kaj potrebujete, da postanete profesionalni razvijalec programov za mikrokrmilnike in dosežete raven spretnosti, ki vam bo omogočila enostavno iskanje in zaposlitev z visoko plačo (povprečna plača programerja mikrokrmilnikov v Rusiji na začetku leta 2015 je
80.000 rubljev).

DODAJ

Sintaksa: ADD reg1, reg2 Ta ukaz doda vsebino registrov reg1 in reg2 ter shrani rezultat v register reg1. Spremeni stanje zastavic H, S, V, N, Z, C.

IN

Sintaksa: AND reg1, reg2 Ta ukaz izvede operacijo logičnega IN med registroma reg1 in reg2 ter shrani rezultat v register reg1. Spremeni stanje zastavic S, V, N, Z.

IN JAZ

Sintaksa: ANDI hreg, število Ta ukaz izvede operacijo logičnega IN med vsebino visokega registra hreg in konstantnim številom (0...255), pri čemer shrani rezultat v register. Spremeni stanje zastavic S, V, N, Z.

BRBC

Sintaksa: bit BRBC, oznaka Ta ukaz preveri stanje bita registra SREG ($3F) in skoči na oznako, če je bit prazen. Oznaka mora biti znotraj 63 ukazov ukaza brbc.

BRBS

Sintaksa: BRBS bit, label Ta ukaz preveri stanje bita registra SREG ($3F) in skoči na oznako, če je bit nastavljen. Oznaka mora biti znotraj 63 ukazov ukaza brbs.

BRCC

Sintaksa: BRCC bit, oznaka Ta ukaz preveri zastavico za prenos (C) in skoči na oznako, če je jasna.

BRCS

Sintaksa: BRCS bit, oznaka Ta ukaz preveri zastavico za prenos (C) in skoči na oznako, če je nastavljena.

BREQ

Sintaksa: BREQ bit, oznaka Ta ukaz preveri zastavico nič (Z) in skoči na oznako, če je nastavljena.

BRNE

Sintaksa: bit BRNE, oznaka Ta ukaz preveri zastavico nič (Z) in skoči na oznako, če je jasna.

C.B.I.

Sintaksa: CBI ioreg, bit Ta ukaz ponastavi bit V/I registra ioreg ($00...$1F) na 0. Bitna številka določa bitni operand.

CLR

Sintaksa: CLR reg Ta ukaz ponastavi vse bite registra reg na 0. Spremeni stanje zastavic S, V, N, Z.

C.P.

Sintaksa: CP reg1, reg2 Ta ukaz primerja vsebino registrov reg1 in reg2 z odštevanjem reg2 od reg1. Vsebina registrov se ne spreminja. Spremeni stanje zastavic H, S, V, N, Z, C.

CPI

Sintaksa: CPI hreg, število Ta ukaz primerja vsebino registra hreg s konstanto števila z odštevanjem konstante od registra. Vsebina registrov se ne spreminja. Spremeni stanje zastavic H, S, V, N, Z, C. Ukaz deluje samo z registri R16…R31.

DEC

Sintaksa: DEC reg Ta ukaz zmanjša vsebino registra reg za eno in rezultat zapiše nazaj v register. Spremeni stanje zastavic S, V, N, Z.

IN

Sintaksa: IN reg, ioreg Ta ukaz prenese vsebino V/I registra ioreg v RON reg.

INC

Sintaksa: INC reg Ta ukaz poveča vsebino registra reg za eno in rezultat zapiše nazaj v register. Spremeni stanje zastavic S, V, N, Z.

LD

Sintaksa: LD reg, longreg Ta ukaz naloži en bajt iz podatkovnega pomnilnika (pomnilniški naslov v daljšem registru) v reg register (za model 1200).

LDI

Sintaksa: LDI hreg, število Ta ukaz naloži takojšnjo vrednost števila v visoki register hreg (ukaz lahko deluje samo z registri R16...R31). Število mora biti v območju 0…255.

LSR

Sintaksa: LSR reg Ta ukaz izvede logični desni premik vsebine registra reg. V tem primeru se 0. bit kopira v zastavo C, 7. bit pa se ponastavi na 0. Spremeni stanje zastavic S, V, N, Z, C.

ORI

Sintaksa: ORI hreg, število Ta ukaz izvede operacijo logičnega ALI med vsebino visokega registra hreg in številsko konstanto (0...255), pri čemer shrani rezultat v register. Spremeni stanje zastavic S, V, N, Z.

VEN

Sintaksa: OUT ioreg, reg Ta ukaz prenese vsebino registra splošnega namena reg v V/I register ioreg.

KLIC

Sintaksa: oznaka RCALL Ta ukaz pokliče podprogram, označen z oznako, ki mora biti znotraj 2048 ukazov ukaza rcall (relativni klic).

RET

Sintaksa: RET Ta ukaz se vrne iz podprograma tako, da skoči na ukaz, ki sledi izvirnemu klicnemu ukazu.

RETI

Sintaksa: RETI Ta ukaz se vrne iz podprograma in nastavi splošno zastavico za omogočanje prekinitve.

RJMP

Sintaksa: Oznaka RJMP Relativni skok. Skoči na razdelek programa, označen z oznako, ki mora biti znotraj 2048 od ukaza RJMP.

SBI

Sintaksa: SBI ioreg, bit Ta ukaz nastavi V/I register bit ioreg ($00...$1F) na 1. Bitna številka določa bitni operand.

SBIC

Sintaksa: SBIC ioreg, bit Ta ukaz preveri V/I register bit ioreg ($00...$1F) in preskoči naslednji ukaz, če je ta bit prazen. Bitna številka določa bitni operand.

SBIS

Sintaksa: SBIS ioreg, bit Ta ukaz preveri V/I register bit ioreg ($00...$1F) in preskoči naslednji ukaz, če je ta bit nastavljen. Bitna številka določa bitni operand.

SEI

Sintaksa: SEI Ta ukaz nastavi splošno zastavico za omogočanje prekinitve.

SER

Sintaksa: SER reg Ta ukaz nastavi vse bite registra reg na 1. Spremeni stanje zastavic S, V, N, Z. Ukaz lahko deluje samo z registri R16...R31.

ST

Sintaksa: ST reg, longreg Za model 1200 ta ukaz shrani vsebino registra reg v podatkovni pomnilnik (pomnilniška lokacija je v daljšem registru), tj. posredno posreduje vsebino PON reg na naslov, shranjen v daljšem registru.

SUBI

Sintaksa: SUBI hreg, število Odšteje konstantno število od visokega registra hreg. Rezultat se shrani v isti register. Spremeni stanje zastavic H, S, V, N, Z, C. Ukaz lahko deluje le z registri R16…R31.

Revič Ju V.

Praktično programiranje mikrokontrolerjev Atmel AVR v jeziku
sestavljalec - 2. izd., rev. -

Opisani so principi delovanja, arhitekturne značilnosti in tehnike

programiranje mikrokontrolerjev Atmel AVR. Na voljo so že pripravljeni recepti
za programiranje osnovnih funkcij sodobne mikroelektronske opreme
hitrost: od odziva do pritiska na gumb ali konstrukcije dinamičnega zaslona
do zapletenih protokolov za snemanje podatkov v zunanji pomnilnik ali funkcije
povezava ure realnega časa. Posebna pozornost je namenjena izmenjavi podatkov
podane so numerične mikroelektronske naprave z osebnim računalnikom
primeri programov. Knjiga upošteva značilnosti sodobnih modelov AVR in so-
potujoča mikrovezja iz zadnjih let proizvodnje. Aplikacije vsebujejo osnovne
parametri mikrokontrolerjev AVR, seznam ukazov in programska besedila zanje,
kot tudi seznam uporabljenih izrazov in okrajšav.

Za študente, inženirje in radioamaterje

Skupina za pripravo objave:

Glavni urednik

Ekaterina Kondukova

Namestnik urednik

Igor Šišigin

glava s strani urednikov

Grigorij Dobin

Urednik

Jurij Rožko

Računalniška postavitev

Olga Sergienko

Korektor

Zinaida Dmitrijeva

Oblikovanje naslovnice

Elena Belyaeva

glava proizvodnja

Nikolaja Tverskih

Mikrokrmilniki, njihov izvor in uporaba ............................................ ........ 7

Ozadje mikrokrmilnikov ............................................. .... .............................................. ... 8

Elektronika v grškem slogu................................................. ...... ............................................ ............ ... 10

Zakaj AVR? ................................................. ...... ............................................ ............ 12

DEL I. SPLOŠNA NAČELA NAPRAVE
IN DELOVANJE ATMEL AVR .................................................. ....... ............... 17

Poglavje 1. Pregled mikrokrmilnikov Atmel AVR .............................................. ..... 19

Družine AVR ................................................. .... .............................................. .......... 21

Značilnosti praktične uporabe AVR MK .............................................. .......... ................. 23

O porabi..................................................... ... ................................................ ......... 23

Nekatere funkcije uporabe AVR v tokokrogih..................................... ................. ............. 25

Poglavje 2. Splošna struktura, organizacija pomnilnika, taktiranje, ponastavitev........... 27

Programski pomnilnik ................................................ ......................................................... ........................................ 27

Podatkovni pomnilnik (RAM, SRAM) ............................................ .... .............................................. .......... ......... 29

Nehlapni podatkovni pomnilnik (EEPROM) ............................................ .......... 31

Metode ure ................................................... ......................................................... ............................ 32

Ponastaviti................................................ . ................................................. ..................................................... 34

3. poglavje: Uvod v periferne naprave..................................... ........ 37

V/I vrata ............................................. .......... ............................................ .................................. 38

Časovniki-števci..................................................... ......... ................................................ ................................................. 39

Analogno-digitalni pretvornik ............................................. ......................................................... 41

Serijska vrata..................................................... ... ................................................ ......... .......... 42

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

SPI vmesnik ................................................. ... ................................................ ......... 46

TWI vmesnik (I

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

Univerzalni serijski vmesnik USI .............................................. .............. ............. 50

Poglavje 4. Prekinitve in načini varčevanja z energijo.................................................. .......... ... 53

Prekinitve ................................................. ......................................................... ............. ................................ 53

Vrste prekinitev ............................................. ................. ................................. ....................... 57

Načini varčevanja z energijo ............................................. ................. ................................. ....................... 58

DEL II. PROGRAMIRANJE MIKROKONTROLERJEV
ATMEL AVR ................................................. ... ................................................ ......... ................ 61

Poglavje 5. Splošna načela programiranja MCU-jev družine AVR .................................. 63

Montaža ali C? ................................................. ...... ............................................ ............ 63

Metode in orodja za programiranje AVR ............................................. ....... 67

Urejevalnik kod ................................................... ... ................................................ ......................................... 67

O programu AVR Studio ............................................... ..................................................... ......................... 68

Razporeditev sestavljalnika ............................................. .......... ............................................ ................ ... 70

Programerji..................................................... ......................................................... ............. ............... 71

O šestnajstiških datotekah..................................... ......... ................................................ .................................................. 75

Ukazi, navodila in notacija AVR asemblerja..................................... ......................................... 78

Števila in izrazi..................................................... ......... ................................................ ................................. 79

Navodila in funkcije..................................................... .................... .............................. ........................ 80

Splošna struktura programa AVR............................................. ......................................................... ......... 84

Upravljanje prekinitev ................................................. ................... ............................... ......................... 85

PONASTAVITI ................................................. .... .............................................. .......... ................................ 89

Najenostavnejši program..................................................... .... .............................................. .......... .............. 90

Zamuda................................................. ................................................. ...... 92

Program števca..................................................... ......................................................... ............ 94

Uporaba prekinitev................................................. ................ ................................. ...................... 96

Zamik časovnika ................................................. ......................................................... .......................... 97

Program števca z uporabo prekinitev ............................................. ........................ 98

O konfiguracijskih delih ............................................. .................... .............................. ........................ ...... 101

Poglavje 6. Ukazni sistem AVR ............................................ ......................................... 105

Navodila za prenos nadzora in registracija SREG ...................................................................... 105

Ukazi za preverjanje in prehod ............................................. ................... ............................... ......................... 111

Ukazi logičnih operacij................................................. .................... .............................. .......................... 113

Navodila za premik in bitne operacije ............................................. ......................................................... 114

Navodila za aritmetične operacije ............................................. ..................................................... 116

Ukazi za prenos podatkov..................................................... .................... .............................. ........................ 118

Ukazi za nadzor sistema..................................................... .......... ............................................ ................ 122

Izvajanje standardnih postopkov v asemblerju............................................. .................................................. 123

O skladu, lokalnih in globalnih spremenljivkah..................................... .......... 125

Poglavje 7. Aritmetične operacije............................................. ....... 127

Standardne aritmetične operacije..................................................... .................... .............................. ..... 128

Množenje večmestnih števil............................................. .................... .............................. ...... 129

Deljenje večmestnih števil............................................. ................................................... .............. 131

Operacije z ulomki ................................................... ...................................................... 134

Generator naključnih števil................................................. ................................................. ...... ...... 136

Operacije s števili v zapisu BCD ............................................ ......................................................... ..... 138

Negativna števila v MK............................................. ..................................................... ........... 143

Poglavje 8. Programiranje časovnikov............................................. ....... 147

8- in 16-bitni časovniki ............................................. ......... ................................................ ............. 147

Oblikovanje dane frekvenčne vrednosti ............................................. ......................................... 149

Odštevanje ................................................... ............... ................................... .................................................... 153

Popravek natančnega časa..................................................... .................... .............................. ................... 158

Merilnik frekvence in merilnik periode ............................................. ...... ............................................ ............ 160

Merilnik frekvence..................................................... ... ................................................ ......................................... 160

Merilnik obdobja..................................................... ......................................................... ............................... 164

Dinamični nadzor zaslona..................................................... .................... .............................. ...... 167

LED indikatorji in njihova povezava............................................. ...... ................................. 168

Programiranje dinamičnega prikaza ............................................. .................. ............... 171

Časovniki v načinu PWM .............................................. ...... ............................................ ............ 174

Poglavje 9. Uporaba EEPROM-a ............................................ ....... 179

Še enkrat o varnosti podatkov v EEPROM-u ..................................... ...... ................................... 179

Zapisovanje in branje EEPROM-a .............................................. ...... ............................................ ............ 181

Shranjevanje konstant v EEPROM .............................................. ............... ................................... ................... .. 183

Poglavje 10. Analogni primerjalnik in ADC.................................................. ......... ................. 187

Analogno-digitalne operacije in njihove napake............................................. ......................................... 187

Delo z analognim primerjalnikom ............................................. .................... .............................. ............. 190

Integracija ADC na primerjalniku................................................. ...................................................... 193

Načelo delovanja in formule za izračun............................................. ....... 194

Vključevanje programa ADC..................................................... .................... .............................. ...... 198

Vgrajeni ADC............................................. ..................................................... ......................................... 201

Primer uporabe ADC..................................................... ................ ................................. ...................... 204

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

Poglavje 11. Programiranje SPI ............................................ ....... 215

Osnovne operacije prek SPI .............................................. ................................................... ........................ ... 215

Strojna možnost ................................................ ... ................................................ ......... 216

Programska možnost ................................................ ... ................................................ ......... 218

O vrstah obstojnega pomnilnika..................................... .......... 219

Zapisovanje in branje bliskovnega pomnilnika prek SPI .............................................. ......... ................................................ .. 221

Program za izmenjavo s pomnilnikom 45DB011B prek SPI .................................. .... ............... 224

Pisanje in branje bliskovnih kartic ................................. ...... ............................................ ............ ............ 225

Povezovanje kartic MMS..................................................... .... .............................................. .......... ... 225

Oddaja ukazov in inicializacija MMC..................................................... ......................................... 228

Snemanje in branje sporočil MMS .............................................. ..................................................... .......... 232

Poglavje 12. Vmesnik TWI (I

C) in njegova praktična uporaba................ 237

Osnovni protokol I

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

Programska emulacija protokola I

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

Zapisovanje podatkov v zunanji obstojni pomnilnik..................................... .......... .......... 241

Načini izmenjave s pomnilnikom AT24 ............................................. ......................................................... 241

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

Ura z vmesnikom I

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

Snemanje podatkov................................................. ......................................................... .............................. 255

Branje podatkov..................................................... ......................................................... .............................. 259

Poglavje 13. Programiranje UART/USART .................................. .... ............. 261

Inicializacija UART ................................................. ... ................................................ ......................... 262

Pošiljanje in sprejemanje podatkov ............................................. ..................................................... ........... .......... 263

Primer nastavitve ure DS1307 z uporabo UART .............................................. ..... 266

Tehnike za zaščito pred izpadi komunikacije..................................... ................................................... 271

Preverjanje parnosti ................................................ ................... ............................... ......................... 271

Kako organizirati pravilno menjavo............................................. ........................ ........................ ......... 273

Dodatne funkcije USART ............................................... ...... ................................. 274

Implementacija vmesnikov RS-232 in RS-485 ............................................ ............ ................................... ..... 276

Pretvorniki nivojev za RS-232 ............................................ ......................................... 280

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

Poglavje 14. Načini varčevanja z energijo in nadzorni časovnik.................................. 285

Programiranje načina varčevanja z energijo............................................. ................................................. 286

Primer baterije napajane naprave..................................................... ......... ................................. 287

Dokončanje programa.................................................. ......................................................... ................. ...... 289

Uporaba nadzornega časovnika ............................................. ................................................... ........... 293

APLIKACIJE................................................. ......................................................... ............. 299

Dodatek 1. Osnovni parametri mikrokontrolerjev Atmel AVR .......... 301

Dodatek 2. Ukazi Atmel AVR ............................................ ..................................... 309

Aritmetični in logični ukazi ............................................. ...... ................................. 310

Navodila za delovanje bitov ............................................. .................... .............................. ........................ ...... 311

Ukazi za primerjavo..................................................... ... ................................................ ......... 312

Ukazi za prenos nadzora..................................................... ......... ................................................ ............... .313

Ukazi za brezpogojni skok in klic podprogramov.................................................. .......... 313

Navodila za preverjanje in preskok ter navodila za pogojni skok.................................................. .................... 314

Ukazi za prenos podatkov..................................................... .................... .............................. ........................ 315

Ukazi za nadzor sistema..................................................... .......... ............................................ ................ 316

Dodatek 3. Programska besedila............................................. ...... ................................. 317

Predstavitveni program Flash Communication 45DB011B
prek vmesnika SPI..................................................... .... .............................................. .......... 317

Postopki izmenjave vmesnikov I

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

Dodatek 4. Izmenjava podatkov z osebnim računalnikom
in programi za odpravljanje napak prek UART ............................................. ....... ................................ 329

Delo z vrati COM v Delphiju ............................................ ... ................................................ ......... 329

Namestitev vrstice RTS v DOS in Windows ............................................ ......................................................... 335

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

Razhroščevanje programov z uporabo terminalskega emulatorja..................................... ......... ................. 339

Priloga 5. Slovar pogosteje uporabljenih okrajšav in izrazov....... 341

Literatura..................................................... ................................................. ...... 347

Predmetno kazalo................................................. .............................................. 349

UVOD

mikrokontrolerji,
njihov izvor in uporaba

Pravijo, da je v šestdesetih letih opazoval udeležence študentskih demonstracij
Gordon Moore pripomnil: "Mi smo pravi revolucionarji." Študenti
med drugim uslužbenec enega izmed izumiteljev tranzistorja W. Shockleyja.
skriti ustanovitelj slovite Silicijeve doline, po vrsti ustanovil
tel in vodja podjetij, ki jim je bila usojena vodilna vloga pri razvoju
mikroelektronike, je Moore vedel, o čem govori. Paradoksalno je
izumom Moora in njegovih sodelavcev je bilo usojeno, da postanejo osnova tega sveta
v katerem se je pozneje koncentriralo delovanje »uporniške mladine«.
1960 Sodobni hekerji (ne računalniški huligani iz časopisov, ampak pravi)
računalničarji, navdušeni nad svojim delom) – neposredni ideološki dediči
Študenti Sorbone in ameriški demonstranti, ki so spremenili moto »Make
ljubezen ne vojna"

na "Ne piši sloganov - piši kodo." Ni naključje, da mnogi slavni

ugledne osebnosti v elektronski računalniški industriji, avtorji izumov, ustanovitelji
ki so krojile podobo sodobnega sveta – izhajajo iz okolja, ki je blizu prav tej »bun-
čedna mladost."
Naša zgodba o mikrokontrolerjih se je začela z dejstvom, da je leta 1957 Gordon Moore so-
skupaj z Robertom Noyceom, ki je kasneje postal eden od izumiteljev mikrofona
roschemy in še šest zaposlenih v Shockley Semiconductor Labs (Shockley poklical
njihova "zahrbtna osmica"), ustanovil podjetje Fairchild Semiconductor. Njej mi
ne dolgujemo le razvoju trga polprevodnikov in uvedbi mikrovezij
v inženirsko prakso, temveč tudi zato, ker je postal nekakšna kovačnica kadrov in
generator idej za mlado industrijo.
Tukaj je le nekaj zgodovinskih dejstev. Sam Moore z Noyceom v poznih šestdesetih
ustanovil podjetje Integrated Electronics, ki je pod skrajšanim imenom Intel
zdaj pozna vsak šolar. Jeremy Sanders, ustanovitelj še enega znanega
največje podjetje AMD je zapustil tudi Fairchild, kjer se je odlikoval z odprtjem ko-
začasni ekonomski model za proizvodnjo in prodajo polprevodnikov
komponente, pri katerih se stroški izdelka z naraščanjem nagibajo k ničli

"Make love, not war" je bil slogan hipijev iz šestdesetih let, ki so protestirali proti vietnamski vojni.

Uvod

spremenite količino serije. Charlie Spork, eden ključnih menedžerjev Fairchilda, leta 1967
postal direktor družbe National Semiconductor, ki jo je kasneje vodil četrtino
stoletja. Polovica "zahrbtne osmerice" - Gene Hoerney, Evgeniy Kleiner,
Jay Last in Sheldon Roberts sta leta 1961 ustanovila podjetje Amelco, iz katerega
kasneje so zrasli zdaj dobro znani Intersil, Maxim in Ixys. Zaposleni
Fairchild Robertu Widlarju dolgujemo izum operacijskih ojačevalnikov -
različic mikrovezij in do danes le na drugem mestu po priljubljenosti
mikroprocesorji. Poleg tega je zgodovina Fairchilda povezana z nastankom slavnih
nov venture (t. i. »risky«) model financiranja, ki je imel odločilno vlogo
pomembno vlogo pri razvoju vseh industrij, povezanih z elektroniko, računalništvom in
telekomunikacije. Ni zaman, da Fairchild pogosto imenujejo "pramati vse elektrike."
tronika".

Ozadje mikrokontrolerjev

V vsem tem orkanu dogodkov je za našo pripoved pomembno to, da med
druge inovacije, zaposleni v Fairchildu so prvi promovirali polprevodnike
ponarejen spomin. Zdaj, v dobi CD-jev in DVD-jev, trdih diskov in bliskovnih kartic, mi
Težko si je predstavljati, da so v zgodnjih šestdesetih letih prejšnjega stoletja računalniški programi
so bile shranjene predvsem na kartonskih listih (luknjane karte), odpadnih konstruktorjih
ali imate glavo nad dragimi RAM moduli na živosrebrnih zakasnitvenih linijah, osciloskop
grafičnih cevi in ​​feritnih obročev, kjer je bil vsak bit ročno “zašit”.
št. Najkompaktnejša elektronska naprava tistih let za shranjevanje podatkov na
magnetni diski imenovani RAMAC 305 s kapaciteto 5 MB so bili velikosti
z industrijskim hladilnikom in je bil najet za 5 tisoč dolarjev na mesec.
Edini "žarek svetlobe" v temnem kraljestvu teh pošasti je bil izum
Ameriški uslužbenec Bosch Arma Corporation Yen Chow, ki je 1956 prejel
patent za napravo, ki je zdaj znana kot "enkratno programabilni ROM"
(OTP ROM

). Mimogrede, v tem patentu je bil izraz uporabljen prvič

"burn" - mikromodul je sestavljala matrika s taljivimi mostički, ki
ki so zgoreli med programiranjem z visoko napetostjo.
OTP ROM-i so dolgo časa ostali edine naprave za kompaktne
shranjevanje podatkov in svoj pomen niso izgubili do nedavnega -
vsaj četrtina mikrokontrolerjev na svetu, predvsem tistih enostavnejših, do
se še vedno proizvaja s takšnim vgrajenim programom, ki ga je mogoče enkratno programirati
naguban, zaradi svoje izjemne cenenosti. In šele v zadnjih letih je "pregorelo" pa-
pomnilnik je začel postopoma nadomeščati priročnejši flash pomnilnik, ko je slednji
se je tako pocenil, da skoraj nima smisla uporabljati OTP ROM.
A vrnimo se v šestdeseta leta prejšnjega stoletja. Kompakten polprevodniški pomnilnik je bil nujno potreben
obožujejo ga vsi – od vojske in Nase do proizvajalcev gospodinjskih aparatov. Najprej
Fairchild je predstavil tisto, kar danes imenujemo DRAM, zlasti na takih mikro-
Ruska vezja (32.768 čipov z zmogljivostjo 256 bitov vsak) je bil zgrajen spomin na pasico

Za razlago nekaterih okrajšav glejte Dodatek 5.

filamentni superračunalnik ILLIAC-IV, konkurent domačemu BESM-6. Ob zaznavi
v katero smer veter piha, sta leta 1968 Moore in Noyce zapustila Fairchild in ustanovila Intel, kot
specializirano podjetje za razvoj in proizvodnjo pomnilnikov. Niso še
vedel, da Intelov najbolj priljubljen izdelek sploh ne bo pomnilnik, ampak majhen
naprava (slika B1), imenovana mikroprocesor, katere razvoj je bil predvsem
je bil prvotno zamišljen kot pomožna stopnja pri načrtovanju običajnega računa
Tora.

riž. V 1. Mikroprocesor

IN

IZUM MIKROPROCESORJA

Leta 1969 se je pri Intelu pojavilo več ljudi iz mladega japonskega podjetja Busicom.
raziskovalni inštitut, ki se ukvarja s proizvodnjo kalkulatorjev. Potrebovali so komplet 12 inte-
sheme gral kot glavni element novega poceni namiznega kalkulatorja -
Tora. Projekt je razvil Masatoshi Shima, ki je zastopal japonsko podjetje
Ron. Ted Hoff (Marcian E. Ted Hoff, r. 1937), vodja oddelka, ki se ukvarja z
razvoj aplikacij za izdelke Intel, ko sem se seznanil s projektom, sem ugotovil, da
namesto da ustvarite kalkulator z nekaj programskimi zmožnostmi
programiranje, lahko storite nasprotno, računalnik programiran za delo kot
kalkulator. Pri razvoju ideje se je Hoff jeseni 1969 odločil za umetnost
arhitektura bodočega mikroprocesorja. Spomladi je na oddelek prišel Hoffa (vsi iz istega
Nam že znani Fairchild), novozaposleni Frederico Faggin, ki
ry in prišel do imena za celoten sistem: "družina 4000". Družino so sestavljali
štirih 16-pinskih čipov: 4001 je vseboval 2 KB ROM; 4002 - RAM z
4-

bitna izhodna vrata za nalaganje programov; 4003 je bil 10-bitni

I/O ekspander s serijskim vhodom in vzporednim izhodom
dom za komunikacijo s tipkovnico, indikatorjem in drugimi zunanjimi napravami; vendar-
4004 je bil 4-bitni CPE (centralna procesna enota). To je CPU
vsebovala je 2300 tranzistorjev in delovala pri taktni frekvenci 108 kHz. 15. november
1971

Napovedano je bilo ustvarjanje prvega mikroprocesorja. Prevzeto podjetje Busicom

Intelu je plačal 60.000 dolarjev, vendar se je Intel odločil ta denar vrniti Busicomu,
za ponovno pridobitev pravic do mikroprocesorja.
I4004 je imel procesorsko moč, primerljivo s prvim elektronskim računalnikom.
Yuter ENIAC (1946). 4004 je našel svojo prvo praktično uporabo v sistemu
nadzor semaforjev in krvnih analizatorjev. Ta mikroproces
sor je bil uporabljen v opremi na krovu medplanetarne sonde Pioneer-10, ki
ry je med podobnimi napravami postavil rekord v dolgoživosti: lansirali so ga l
1972

in do septembra 2001 se je Pioneer-10 premaknil 11,78 milijard km stran od Zemlje in je še vedno

deloval in zelo verjetno deluje še danes, čeprav je NASA februarja 2003 uradno
družabno poslovili od njega.

Uvod

Tako se je začel zmagoviti pohod mikroprocesorjev, ki so se kasneje razšli
na več vrst, ki večinoma spadajo v dve glavni skupini:
sami mikroprocesorji (MP) in mikrokrmilniki (MC). Prvi
so namenjeni uporabi kot del računalniških sistemov, najpogostejši
med katerimi so večinoma osebni računalniki (PC), zato se še vedno pogosto uporabljajo
se imenujejo "PC procesorji" (čeprav ta skupina običajno vključuje tudi proizvedene
voznik MP za strežnike in nekateri drugi). MK se od MP razlikujejo po tem
da so namenjeni predvsem krmiljenju različnih sistemov,
zato z razmeroma šibkejšim računalniškim jedrom vključujejo
obstaja veliko dodatnih vozlišč. Dejstvo, da se za konvencionalnega poslanca predpostavlja, da je
rezerva v zunanjih naborih čipov ali dodatnih modulih (pomnilnik, vhodna vrata)
izhod, časovniki, krmilniki prekinitev, vozlišča za obdelavo analognih signalov
ribolov itd.), v MK se nahaja neposredno na čipu, zato so bili nekoč modni
imenujemo ga "mikroračunalnik".
Dejansko je v najpreprostejšem primeru zgraditi popolnoma funkcionalno
za računalnik en sam MK čip s povezanim
z njim povezane vhodno/izhodne naprave. Sodobni modeli navadnega monokristala
jekleni MK presegajo računalniške zmogljivosti IBM PC AT na 286. pro-
procesor druge polovice osemdesetih let. Obstajajo območja, kjer je meja med MP in
MK je težko izvesti: takšni so na primer procesorji za mobilne naprave, od
telefonov in žepnih računalnikov do digitalnih fotoaparatov, v katerih procesor
vozlišče mora imeti napredne računalniške funkcije in upravljati več
številne zunanje komponente.

Elektronika v grškem slogu

Leta 1962 je bila družina Perlegos, grških izseljencev rojena l
prebivalci mesta Tripolis. Starši so se lotili vinogradništva, tako kot v domovini, sinovi pa
Novya, George in Gust Perlegos, sta izbrala modno specialnost inženiringa
inženir elektronike: oba sta najprej diplomirala na Univerzi v San Joseju, nato pa na Stanfordu
univerza. Leta 1974, pri 24 letih, je najmlajši od bratov, George Perlegos,
Začel je delati pri Intelu, kjer se je znašel na enem najnaprednejših področij:
razvoj električno izbrisljivega pomnilnika za zamenjavo vžganega OTP ROM-a.
Še pred Perlegosom, skoraj sočasno z izumom mikroprocesorja leta 1971,
Intelov uslužbenec Don Frohman je izumil lebdeči zaklop in ustvaril prvi UV
2K izbrisljivi EPROM (256 8).

Z

OPOMBE NA MARGI

V »navadnem« življenju uporabljajte okrajšave za enote informacij, sestavljene iz ene črke
"K" (kot tudi "M") ni priporočljivo: včasih je zelo težko razumeti, ali je
o kilobitih, kilobajtih, "kilobesedah" ali na splošno kilobitih na sekundo. Kljub temu
takšne okrajšave pogosto najdemo, tudi v tehnični dokumentaciji, in prišli bomo
Včasih poskušam slediti temu zgledu. Za jasnost sprejemamo naslednja pravila:
la: ena velika črka "K" pomeni binarne kilobite (1024 bitov), ​​"M" pomeni binarne kilobite
binarni megabiti (1024 kbitov). Čeprav je v literaturi pogosto še vedno sprejeto, da so kilobajti
skrajšati kot "KB" in kilobite kot "KB", se bomo poskušali izogniti tej zmedi in v

Mikrokontrolerji, njihov izvor in uporaba

V vseh drugih primerih napišite v celoti: kbajt in MB, kbit/s, MB/s. Razen-
bo oznaka količine pomnilnika programov mikrokrmilnika, če bo izdelan
merjeno v dvobajtnih besedah: na primer, 4K besede bodo pomenile 4096 celic -
besed (8 kbajtov).

George Perlegos je bil aktivno vključen v ta proces, najprej s svojo udeležbo in
takrat sta pod njegovim neposrednim vodstvom nastali dve tehnologiji,
ki so postale točka rasti za celotno industrijo bliskovnih pomnilnikov – ena od
glavni stebri sodobne »digitalne revolucije«. Prvič je bil izumljen
čip 2716 - 16K (2048 8) EPROM z eno napajalno napetostjo +5 V in nato
2816 - prvi EEPROM, električno izbrisljivi ROM, ki je postal prototip
bliskovni pomnilnik.
Leta 1981 je Perlegos zapustil Intel in z več zaposlenimi (vključno z
je bil Gordon Campbell, bodoči ustvarjalec drugega znanega podjetja Chips &
Technologies) ustanovi podjetje Seeq. To je bil čas zatona elektronske industrije.
industrializacije, tri leta kasneje pa je podjetje moralo zaradi terjatve zapustiti
mi vlagatelji. Ne zaupajo jim več, George in njegov brat Gust ter številni drugi
Leta 1984 smo z zaposlenimi v Seequ z osebnimi sredstvi ustanovili podjetje,
katerega polno ime zveni kot Advanced Technology MEmory and Logic oz
skrajšano kot Atmel.
Sprva so bili izdelki Atmel trajni pomnilniški čipi vseh vrst
nove funkcije - kot sta OTP EPROM in EEPROM s serijskim in vzporednim
dostop in Flash. Leta 1985 je Atmel izdal prvi domači EEPROM na svetu.
današnjo nastajajočo tehnologijo CMOS in leta 1989 prvi bliskovni pomnilnik z napajanjem
iz ene napetosti +5 V. V poznih osemdesetih letih prejšnjega stoletja se je Intel odločil kaznovati številna podjetja
podjetja za proizvodnjo EPROM, vključno z Atmelom, zaradi domnevne kršitve patentov,
vendar se je na koncu vendarle uspelo dogovoriti za zamenjavo licenc. In na koncu-
Atmel je na koncu dobil licenco za proizvodnjo klasičnih mikrokontrolerjev.
ler 8051, ki se mu je Intel takrat že postopoma odmikal od podpore, se je osredotočil
izpopolnjevanje računalniških procesorjev.

p

PODROBNOSTI

Spomnimo se, da se EEPROM od flash pomnilnika razlikuje po tem, da prvi omogoča
ločen dostop do katere koli poljubne celice, drugi pa samo do celotnih blokov. z-
ta EEPROM je manjše prostornine (tipična prostornina specializiranih mikro-
EEPROM vezja - od enot kilobitov do enot megabitov) in trenutno dražja
uporablja se predvsem za shranjevanje podatkov, tudi kot del mikrokontrolerjev
Lerov. Flash pomnilnik je enostavnejši in cenejši, poleg tega pa omogoča znatno povečanje hitrosti.
rast z velikimi količinami informacij, zlasti s pretočnim branjem/pisanjem,
tipično za medijske naprave (kot so digitalni fotoaparati ali MP3 predvajalniki). Vključeno
Flash pomnilnik mikrokontrolerjev se uporablja za shranjevanje programov. Nekaj ​​podrobnosti
Za več informacij o različnih vrstah pomnilnika in njihovem delovanju glejte 11. poglavje.

Tako se je Atmel znašel "vtegnjen" med proizvajalce mikrokontrolerjev, v katerih
rum se je zelo hitro znašel na prvih mestih: proizvodnja se je začela leta 1993
prvi MCU AT89C51 v industriji z vgrajenim bliskovnim programskim pomnilnikom. To pomeni
je začela revolucijo v vsej inženirski praksi, saj je obstoječa
Prej so imeli MK bodisi enkratni programabilni pomnilnik OTP ali

Uvod

UV-pralna, ki je veliko dražja za izdelavo in delo z njo vodi do
povzroči veliko izgubo časa razvijalca. Število ciklov prepisovanja za UV
PROM ne presega nekaj deset in direktna dnevna svetloba
takšen kristal lahko povzroči izbris informacij. Zato tudi majhne
ry naprave so morale biti izdelane predvsem z uporabo
jejte OTP ROM, kar je veliko bolj tvegano: spremenite že v primeru najmanjšega
napake v posnetem programu niso bile več možne. Pojav bliskovnega pomnilnika iz
spremenil celotno »pokrajino« na tem območju: prav zaradi njegove uvedbe je jeklo
možne stvari, kot je posodabljanje programske opreme BIOS-a računalnika ali "ponovna
reševanje" krmilnih programov za potrošniške elektronske naprave.
Leta 1995 sta dva študenta Norveške univerze za znanost in tehnologijo v Tron-
Heime, Alf Bogen in Vegard Wollen so prišli na idejo o 8-bitnem jedru RISC, ki
ki je bil predlagan vodstvu Atmela. Imena razvijalcev so vključena v ime umetnosti.
Arhitekture AVR: Alf + Vergard + RISC. Ideja mi je bila tako všeč, da sem leta 1996
Raziskovalni center Atmel je bil ustanovljen v Trondheimu in že ob koncu istega
Prvi eksperimentalni mikrokrmilnik nove serije AVR imenovan
AT90S1200. V drugi polovici leta 1997 je Atmel Corporation začela serijsko
proizvodnja družine AVR.

Zakaj AVR?

Krmilniki AVR "od rojstva" imajo dve lastnosti, ki jih ločujeta
družina iz ostalih MK. Prvič, nabor navodil in arhitektura jedra AVR
so bili razviti skupaj s podjetjem, ki razvija prevajalnike za pro-jezike
sistemi IAR za programiranje na visoki ravni. Posledično je postalo mogoče
pisati programe AVR v C brez velike izgube zmogljivosti
v primerjavi s programi, napisanimi v zbirnem jeziku. Več podrobnosti o tem
o tem bomo razpravljali v poglavje 5.
Drugič, ena od pomembnih prednosti AVR je bila uporaba tekočega traku
ra. Posledično ni koncepta strojnega cikla za AVR: večina
ukazi se izvajajo v enem taktu. Za primerjavo ugotavljamo, da tisti, ki uporabljajo
MK iz družine PIC so zelo priljubljeni, izvedejo ukaz v 4 taktih in razred
sical 8051 - običajno v 12 ciklih (čeprav obstajajo tudi sodobni modeli X 51 z ma-
cikel avtobusa v enem ciklu).
Res je, hkrati smo morali nekoliko žrtvovati preprostost ukaznega sistema,
še posebej opazno v primerjavi z x 51, kjer so npr. morebitne špedicije
podatkov znotraj krmilnika, ne glede na način naslavljanja, poteka na enak način
reprezentanca

v raznih variantah, medtem ko v AVR skoraj za

Vsaka metoda ima svoj ukaz in včasih z omejenim obsegom delovanja.
viya. Nekaj ​​težav je na področju delovanja z bitovi. Vendar to ni
povzroča opazne težave pri učenju sestavljalnika AVR: nasprotno, besedila
programi so krajši in bolj spominjajo na program v visokem jeziku
raven. Upoštevati je treba tudi, da je od skupnega števila ekip od 90 do 130, odvisno
odvisno od modela jih je samo 50–60 unikatnih, ostali so zamenljivi.

Mikrokontrolerji, njihov izvor in uporaba

In končno, ta pomanjkljivost je popolnoma odpravljena pri uporabi jezika C,
dejansko izenačenje različnih arhitektur v smislu pro-
programiranje
Velika prednost arhitekture AVR je prisotnost 32 operativnih registrov,
ni povsem enaka, vendar omogoča, da se v nekaterih primerih ne obrnete na
RAM in ne uporabljajte sklada (kar je v bistvu nemogoče v istem
družina X 51), poleg tega v nižjih modelih AVR sklad na splošno ni na voljo za
programer Zato je struktura asemblerskih programov za AVR postala sumljiva.
zelo podobni jezikovnim programom na visoki ravni, kjer delujejo stavki
ne s pomnilniškimi celicami in registri, temveč z abstraktnimi spremenljivkami in konstantami.
Druga značilnost AVR z vidika načrtovanja vezja je, da so vsi zatiči notri
lahko so v treh stanjih (vhod - onemogočeno - izhod) in električni
smuči so strukture CMOS (tj. obstaja simetrija izhoda
signali in visok upor za vhod). Na splošno je to pomembno
bolj priročno kot pristanišča X 51 (dvostabilen in TTL-združljiv) in predlaga boljše
odpornost proti hrupu (vsaj zaradi motenj na zemeljskem vodilu).
Po povzetku mnenj iz različnih virov in na podlagi lastnih izkušenj,
avtor je prišel do približno naslednje delitve področij uporabe treh najbolj
običajne družine krmilnikov.

Krmilniki klasične arhitekture X 51 (prva mikrovezja družine
8051 so bili izdani v zgodnjih osemdesetih) so najboljši za splošno uporabo
preučevanje predmeta. Upoštevajte, da poleg Atmela, X 51 združljivih izdelkov, ki jih
približno ducat novih podjetij, vključno s takšnimi velikani, kot sta Philips in
Siemens, obstajajo tudi domači analogi (serije 1816, 1830 itd.), Zaradi česar je to
arhitektura je najbolj univerzalna.

Družina AVR je priporočljiva za začetnike v elektroniki,
zaradi enostavnosti in vsestranskosti naprave, kontinuitete strukture za
različne vrste krmilnikov, enostavnost zasnove vezja in programiranja
(v tem primeru "programiranje" pomeni postopek snemanja programa
gram na čip).

Microchip PIC so idealni za oblikovanje preprostih naprav.
rojev, zlasti tistih, ki so namenjeni razmnoževanju.

Ta razvrstitev je v veliki meri subjektivna in avtor ne bo oporekal drugim
vidik: različne družine MK se po parametrih postopoma približujejo,
postanejo popolnoma zamenljivi in ​​tako kot v vseh sodobnih električnih
Nick, izbira ene ali druge družine ima pogosto »verski« značaj.
Poleg tega so tri omenjene družine MK le najpogostejše
med univerzalnimi krmilniki, a daleč od najbolj priljubljenih nasploh. Splošno
število obstoječih družin mikrokontrolerjev je ocenjeno na cca.
Pravzaprav več kot 100, vsako leto pa se jih pojavlja vedno več. Vsak od
te družine lahko vključujejo na desetine različnih modelov. Hkrati prvo mesto
med proizvajalci 8-bitnih MK tradicionalno pripada Motorola,
predvsem zaradi krmilnikov za mobilne naprave. Podjetje Microchip

Uvod

Z družino PIC zaseda tretje mesto, Atmel pa šele šesto. pri čemer,
Poleg 8-bitnih AVR MCU-jev Atmel proizvaja več vrst MCU-jev,
ki ne vključuje le omenjenih naslednikov 8051, ampak tudi ARM-
procesorji in specializirani mikrokontrolerji za različne aplikacije. Kljub temu
ta formalna statistika še ne pomeni nič - na primer med MK z vgrajenim
Atmelov bliskovni pomnilnik si že lasti tretjino svetovnega trga.
V letih 2002–2003 je bilo na svetu letno proizvedenih 3,2 milijarde kosov mikroposod.
trolerji. Upoštevajte, da je obseg proizvodnje procesorjev za osebne računalnike mogoče oceniti na
200 milijonov enot na leto, kar pomeni le približno 6% trga (v finančnem smislu)
Na splošno pa je razmerje drugačno, saj je tipična cena navadnega MK
je 2–5 dolarjev, računalniški procesor pa je vsaj za red velikosti višji in
včasih doseže več sto dolarjev). Zato ne bi bilo pretirano reči
da je specialnost inženir elektronike, specializiran za mikro-
krmilniki, ni nič manj pomemben in redek kot računalniški programer -
sistemski inženir ali izdelovalec aplikacij po meri.

Ta knjiga je namenjena bralcu, ki želi preučiti strukturo in načrtovanje vezij
posebnosti AVR MK in se naučite pravilno uporabljati njihove glavne funkcije
možnosti. Zato se avtor omeji na zbirni jezik (preberi več vprašanje
Ogledali si bomo izbiro programskega okolja v poglavje 5). Poudarek v knjigi je
bralcu dati praktične nasvete, opisati že pripravljene algoritme za
tipične naloge, ki se razvijalcem pojavijo pri izvajanju določenih
MK funkcije. Avtor skupaj z bralci podrobno obravnava številna vprašanja, ki
običajno presegajo obseg priročnikov za programiranje MK: delo z naknadnimi
praktični vmesniki, aritmetične operacije, vmesnik z osebnim računalnikom, praktič
tehnična izvedba načinov varčevanja z energijo.
Hkrati se avtor ni lotil podrobne analize absolutno vsega, kar je mogoče -
STI MK AVR: tudi nekaj zvezkov ne bi bilo dovolj za to. Prisiljeni smo iti naokrog
vprašanja, kot sta odpravljanje napak in programiranje z uporabo vmesnika JTAG, so obetavna
ti, ki samoprogramiranje krmilnikov odkrivaš le mimogrede
Veselimo se najbolj zanimivega problema sinteze zvoka in drugih aplikacij načinov PWM
časovniki.
V tej knjigi je večina primerov osredotočena na rabo manjšega
(s kapaciteto pomnilnika 8 MB) modelov poddružine Mega, saj so najbolj
Bolj vsestranski in primeren za širok spekter opravil brez nepotrebne zapletenosti
shema. Pri enostavnejših primerih se je avtor osredotočil na najbolj univerzalne
od mlajših modelov ATtiny2313 (o združljivosti s "klasično" različico
AT90S2313 cm. razdelek Poglavje "Program števca z uporabo prekinitev".
ti 5
). Večino podanih primerov je mogoče izvesti tako rekoč brez sprememb.
prilagojen ostalim modelom AVR z ustrezno konfiguracijo
cija.

DEL

Splošna načela naprave

in delovanje Atmel AVR

Poglavje 1. Pregled mikrokontrolerjev Atmel AVR

2. poglavje Splošna struktura, organizacija spomina,

ura, ponastavitev

3. poglavje Uvod v periferne naprave

4. poglavje Prekinitve in načini varčevanja z energijo

ODSEK

Pregled mikrokrmilnika
Atmel AVR

Atmel AVR je družina vsestranskih 8-bitnih mikronaprav
trolerji, ki temeljijo na skupnem jedru z različnimi vgrajenimi periferijami
roji. Zmogljivosti AVR MK vam omogočajo, da rešite številne tipične težave,
ki nastanejo pred razvijalci radioelektronske opreme.
Lastnosti mikrokontrolerjev Atmel AVR.

Zmogljivost je približno 1 MIPS/MHz. MIPS (Millions of Instructions Per
Drugič, milijon ukazov na sekundo) je eden najstarejših in v mnogih pogledih
slaba značilnost zmogljivosti procesorja, ker nizi ukazov
za različne procesorje so različni in posledično enako število
navodila za različne sisteme bodo dala različne uporabne rezultate. Kljub temu
za enostavne 8-bitne računalniške sisteme, ki ne vsebujejo ukazov, delovanje
obravnavanje velikih števil, števil s plavajočo vejico in nizov
podatkov, je to dober pokazatelj za primerjavo njihove uspešnosti. Izračunaj
Zmogljivost jedra AVR pri številnih nalogah presega 16-krat
linijski procesor 80286.

Napredna RISC arhitektura. Koncept RISC (Zmanjšan).
Instruction Set Computing, izračuni z zmanjšanim naborom navodil) so prednostni
zahteva prisotnost nabora ukazov, sestavljenega iz najmanj kompaktnega in hitrega
izvajanje navodil; hkrati tudi takšne okornejše operacije, kot
izračuni s plavajočo vejico ali večbitna aritmetika
v realnih številih naj bi bil implementiran na nivoju podprogramov. Koncept
RISC poenostavlja strukturo jedra (tipično jedro AVR vsebuje samo 32 tisoč enot).
tranzistorji, v nasprotju z desetinami milijonov v procesorjih osebnih računalnikov) in pospešeni
prikazuje njegovo delovanje: tipično navodilo se izvede v enem taktu (razen ukazov
programsko razvejanje, dostop do pomnilnika in nekateri drugi, ki delujejo s
dolgi podatki). AVR ima preprosto dvostopenjsko kon-
Weir, ko se ukaz izvede v enem taktu, medtem ko se pridobi naslednji.
Za razliko od Intelovih arhitektur »klasični« AVR nima strojnega množitelja
deljenje/deljenje pa poddružina Mega vsebuje operacije množenja.

Ločena vodila za ukazni in podatkovni pomnilnik. AVR (kot večina drugih
mikrokontrolerji) ima t.i. Harvardska arhitektura, kjer so pomnilniška področja