Programmera avr i assembler. Praktisk programmering av Atmel AVR mikrokontroller i assemblerspråk. (3:e upplagan). elektronik i grekisk stil


Så jag hoppas att den samvetsgranna läsaren redan har satt ihop en programmerare, ett experimentkort och även installerat och konfigurerat den nödvändiga programvaran.

Nu, efter att ha skrivit den första artikeln i serien, förstår jag att jag blev lite upphetsad och gjorde samma misstag som mina föregångare och satte frasen "för nybörjare". Det skulle vara mer korrekt att formulera ämnet "För nybörjare i assemblerspråksprogrammering", det vill säga jag antar att läsaren redan har åtminstone en ytlig förståelse för vad en mikrokontroller är, annars kommer det att ta oss mycket tid bara att bekanta dig med detta ämne. För dem som inte alls är bekanta med dem kan jag rekommendera en serie artiklar av S. Ryumik, "AVR Microcontrollers", som är helt underbar enligt mig, publicerad i tidningen Radioamator (nr 1-11 för 2005) . I denna cykel valdes ATmega8 som basstyrenhet, men de allmänna funktionsenheterna för ovannämnda styrenhet och ATtiny13 är praktiskt taget desamma.

För att bekanta dig direkt med mikrokontrollern ATtiny13 rekommenderar jag boken av A.V. Evstifeeva "Mikrokontroller" AVR familj mycket liten. User's Guide" (M.: Publishing House "Dodeka-XXI", 2007. - 432 s.). Den innehåller översatta och systematiserade datablad för hela utbudet av styrenheter i den lilla familjen, och bör enligt min mening vara en stationär dator. läs för dig som ägnade sig åt programmering av mikrokontroller.

Men allt eftersom historien fortskrider kommer jag att ge lite information om de noder och moduler i styrenheten som kommer att användas i de skrivna programmen.

Men allt detta är en lyrisk utvikning. Låt oss återgå direkt till historien.

ATtiny13-kontrollern har, trots sin lilla storlek, mycket goda funktionella egenskaper. Och det lilla antalet stift kompenseras mer än väl av antalet funktioner som var och en av dem utför. Pinouten och beskrivningen av stiften presenteras nedan:

Tabellen är hämtad från ovan nämnda bok av A.V. Evstifeeva.

Som du kan se kan varje stift utföra minst tre funktioner, eller till och med många fler. Till en början kommer vi inte att överväga alternativa funktioner, utan bara den grundläggande - digital ingång/utgång.

Som framgår av figuren och tabellen har alla stift, med undantag för kraftstift, namnet PB följt av ett serienummer. Vad betyder det här? Alla kontrollerstift är kombinerade till 8 delar för att det ska vara enkelt att arbeta med dem, och varje grupp med 8 stift tilldelas tre speciella I/O-register. Generellt sett är begreppet register nyckeln när man arbetar med styrenheter, speciellt i assembler. Låt oss ta en närmare titt på vart och ett av de tre ovan nämnda registren. Alla är enbyteceller i styrenhetens minne. Varje bit motsvarar en av styrenhetens utgångar, och bitnumret i registret sammanfaller med utgångsnumret (till exempel är den 0:e biten ansvarig för PB0-utgången, den 1:a biten är ansvarig för PB1-utgången, etc.). Alla register har ett eget namn, med vilket de nås när man skriver program. Vad är det för namn?

1. DDRB-registret ansvarar för riktningen för informationsöverföringen för varje styrstift. Om någon bit i detta register är "0", kommer motsvarande utgång att vara en ingång, och om "1", då utgången. Dessutom konfigureras varje utgång individuellt och var som helst i programmet. Detta innebär att under olika förhållanden eller vid olika tidpunkter kan samma stift konfigureras som en ingång eller som en utgång, oberoende av de andra stiften.

2. PINB-registret innehåller det aktuella tillståndet för alla stift: om spänning läggs på stiftet skrivs en logisk "1" till motsvarande bit, om det inte finns någon spänning skrivs en logisk "0". Detta register används huvudsakligen för att avläsa tillståndet för ett stift som är i ingångsläge.

3. PORTB-registret utför en dubbel funktion beroende på riktningen för informationsöverföringen. Om stiftet fungerar som en digital utgång, kan skrivning av en "1" till valfri bit i PORTB-registret göra att spänning visas på motsvarande stift, och skrivning av "0" gör att spänningen försvinner. I utgångsläge är det alltså detta register som bestämmer tillståndet för varje stift. I digitalt ingångsläge, att skriva en logisk "1" till valfri bit gör att det inbyggda pull-up-motståndet ansluts till motsvarande stift och att skriva en "0" för att inaktivera det. Vad är det här "uppdragningsmotståndet" för något och vad är det avsett för? Om stiftet fungerar som en digital ingång, är ingångsbuffertmotståndet ganska högt och inströmmen är ganska liten. Därför kan alla elektriska störningar leda till spontan omkoppling av utgången till ett godtyckligt tillstånd. För att förhindra att detta inträffar ansluts ett motstånd med en resistans på flera tiotals kiloohm mellan ingången och strömkällan, och "drar upp" ingångspotentialen till matningsspänningen (därav namnet). Strömmen som flyter genom detta motstånd är tillräckligt liten för att inte störa resten av kretsen, men tillräckligt stor för att förhindra oavsiktlig stiftbyte. Vi kommer ofta att använda pull-up resistorer när vi arbetar med knappar, för när de inte trycks in så "hänger" stiften de är anslutna till i princip i luften och utsätts för störningar.

Det bör nämnas att vid uppstart återställs alla register till 0 och varje stift fungerar som en digital ingång utan ett pull-up-motstånd.

Nu när vi åtminstone har en aning om VAD som behövs för att arbeta med kontrolleringångar, är det dags att ta reda på HUR man arbetar med dem.

Låt oss skriva vår första arbetsprogram i assembler. Först kommer jag att ge en komplett algoritm för att skapa ett nytt projekt, men i framtiden kommer jag att utelämna det och bara fokusera på själva programmets text.

1. Gå till asm-mappen och skapa en ny mapp i den. Byt namn på det till ett namn som passar oss. För att vara specifik kommer jag att referera till dem med vårt stegnummer. I det här fallet "steg 2".

2. Högerklicka på filen build.bat och ändra sökvägen till källfilen och peka på den nyskapade mappen (steg 2). Efter detta ser mitt innehåll ut så här:

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

Det kan skilja sig åt för dig beroende på var du packade upp arkivet.

3. Gå till mappen Asmedit och kör programmet ASM_Ed.exe

4. Skriv programmets text i fönstret som öppnas. Jag kommer att uppehålla mig mer detaljerat vid denna punkt, eftersom den är den viktigaste i vår lektion idag, såväl som i efterföljande.

Vad är texten i ett assemblerprogram? Det kan innehålla flera element skrivna enligt vissa regler:

Monteringsinstruktioner med eller utan operander beroende på instruktionssyntaxen. Mellan kommandonamnet och den första operanden måste det finnas antingen ett mellanslag, en tabb eller valfritt antal av båda. Operanderna är åtskilda av ett kommatecken, som också kan föregås eller följas av ett godtyckligt antal mellanslag eller tabbar;

Direktiv, som vart och ett börjar med ett ".";

Etiketter, som är platser i programmet som namnges godtyckligt av användaren som kan behöva navigeras till. Varje etikett slutar med tecknet ":";

Kommentarer som börjar med ";". All text från början av kommentaren till slutet av raden ignoreras när hex-filen skapas och kan vara helt godtycklig;

Tomma rader för bättre struktur och läsbarhet av programmet.

Det kan inte finnas mer än ett kommando på varje rad. Det är dock tillåtet att en etikett samtidigt finns på en rad följt av ett kommando och en kommentar.

Med hjälp av dessa regler kommer vi att skriva ett program som kommer att slå på LED2 medan SB1-knappen hålls nedtryckt, och stänga av den om knappen släpps. Texten till programmet presenteras nedan:

.inkludera "F:\Prog\AVR\asm\Appnotes\tn13def.inc"
sbi DDRB, 4 ;РВ4 - utgång (LED2)
sbi PORTB, 2 ; Slå på pull-up-motståndet på PB2 (SB1-knapp)
sbic PINB, 2 ;Om PB2=0 (knapp nedtryckt), hoppa över nästa. linje
sbi PORTB, 4 ;Installera PB4 i 1 (stänger av lysdioden)
sbis PINB, 2 ;Om PB2=1 (knappen släppt), hoppa över nästa. linje
cbi PORTB, 4 ;Ställa in PB4 på 0 (LED på)

Låt oss titta på det mer detaljerat. Den första raden innehåller direktivet "inkludera", skrivet enligt ovanstående regler med en prick i början. Dess syfte är att inkludera filen som anges bakom den i programtexten. Som jag sa i det första steget kommer vi att behöva filen "tn13def.inc". På den här raden måste du ändra sökvägen till platsen för mappen Appnotes på din dator. Varför måste vi inkludera den här filen? En nyfiken läsare kan titta in i den och läsa dess innehåll, men troligtvis förstår han lite av det först. För nu kommer jag att säga att det innehåller en överensstämmelse mellan namnen på register, som assemblern inte känner till som standard, med deras fysiska adresser i styrenheten.

Följande rader är assembler-kommandon. Den uppmärksamma läsaren kommer att märka att totalt fyra olika kommandon används. Låt oss titta på syftet med var och en.

sbi-instruktionen har två operander: den första är registernamnet, den andra är bitnumret. Som ett resultat av dess exekvering sätts den specificerade biten i det specificerade registret till "1".

Kommandot cbi liknar syntaxen ovan och utför den raka motsatta funktionen - det återställer den angivna biten i det angivna registret till "0".

Kommandot sbis liknar också syntaxen ovan. Men till skillnad från dem utför den inga operationer med register, utan kontrollerar bara tillståndet för den angivna biten i det angivna registret, och om den är lika med "1", hoppar den över raden efter kommandot. Annars exekveras raden efter den, liksom alla andra efter den.

Kommandot sbiс är motsatsen till kommandot sbis. Den hoppar över nästa rad om den angivna registerbiten är "0".

Nu, summerar allt ovan, låt oss försöka förstå programmets algoritm. Till att börja med kommer jag att göra det här bokstavligen rad för rad.

1 rad. Inkluderingsdirektivet inkluderar filen tn13def.inc, som innehåller registerdefinitioner.

2:a raden. sbi-kommandot sätter "1" i bit 4 i DDRB-registret och växlar därigenom PB4-stiftet till utgången. Om du tittar på kortdiagrammet (fig. 1 i föregående steg), kan du se att LED2 är ansluten till detta stift. Efter kommandot och tecknet ";" en kommentar har skrivits som kort förklarar innebörden av de åtgärder som utförs i raden.

3 rad. Samma sbi-kommando sätter "1" i bit 2 i PORTB-registret, och ansluter det interna pull-up-motståndet till PB2-stiftet, till vilket SB1-knappen är ansluten. Eftersom vi inte ändrade tillståndet för bit 2 i DDRB-registret kommer denna pin att förbli en ingång, vilket är precis vad vi behöver.

4 rad. sbic-kommandot kontrollerar förekomsten av en logisk "0" vid PB2-ingången med hjälp av PINB-registret. Om du tittar noga på diagrammet kan du se att knapparna, när de trycks in, stänger motsvarande terminal med den gemensamma ledningen. Detta är en standardteknik, eftersom när knappen släpps finns en logisk "1" på utgången på grund av uppdragningsmotståndet, och när knappen trycks in visas en logisk "0" på grund av anslutningen av utgång till den gemensamma ledningen. Så om det finns en logisk "0" vid stift PB2, det vill säga knappen trycks ned, hoppar vi över nästa rad, och om knappen släpps, kör vi den.

5 rad. I den ställer sbi-kommandot en logisk "1" i bit 4 i PORTB-registret, och stänger därmed av LED2. En skarpsinnig läsare kan undra varför lysdioden släcks om vi lägger spänning på utgången. Svaret ligger i designen. Lysdioden är ansluten med anoden till strömkabeln och katoden till styrenhetens utgång. Därför, om du applicerar spänning på utgången, kommer potentialerna för anoden och katoden att vara lika, och lysdioden slocknar. Om en logisk "0" matas ut till utgången kommer spänning att läggas på lysdioden och den tänds. Således släcker ett par rader 4 och 5 LED2 när knappen släpps.

6 rad. Innebörden är motsatt till 4:an. sbis-kommandot kontrollerar närvaron av en logisk "1" vid PB2-ingången, det vill säga det kontrollerar om knappen släpps. Om knappen släpps, hoppas nästa rad över och nästa rad går till nästa. Men eftersom 7:e raden är den sista så sker en övergång till 2:a raden. Om knappen trycks in, exekveras rad 7.

7 rad. Motsatsen till 5:an. Kommandot cbi återställer bit 4 i PORTB-registret till "0" och tänder därmed LED2. Således tänder ett par rader 6 och 7 LED2 när SB1-knappen trycks ned.

Som du kan se gjorde vi inget särskilt svårt. Med hjälp av kunskap om endast 3 register och 4 instruktioner skrev vi vårt första program. Vad ska man göra med henne härnäst? Om du inte har glömt det än, fortsätter vi att skriva algoritmen för att skapa program.

5. Efter att ha skrivit programtexten i redigeringsfönstret, välj menyalternativet "Arkiv" och klicka på "Spara som..." i listan som öppnas. I filsparfönstret, välj mappen steg 2 vi skapade och ange filnamnet "main", eftersom detta är namnet vi angav i filen "build.bat"

Efter att ha sparat ska programfönstret se ut så här:

6. Skapa en hex-fil. För att göra detta, klicka på knappen "II" i verktygsfältet. Följande fönster bör visas:

Det meddelar oss att monteringen slutfördes utan fel och firmwarefilen "main.hex" skapades med en volym på 6 ord, det vill säga 12 byte. Jag noterar det liknande program i C-språk skulle ha minst 5 gånger volymen.

7. Efter att ha gått till step2-mappen hittar vi ett tillägg till den i form av en nyskapad main.hex-fil, som nu kan sys in i styrenheten med valfri programmerare, vilket måste göras för att se resultatet av programmet vi skrev. Efter att ha blinkat kontrollenheten, om kretsen är korrekt monterad, bör allt fungera enligt algoritmen vi utvecklade: när knapparna släpps ska LED2 vara avstängd och medan knappen SB1 hålls nere ska den vara på.

Innan nästa steg föreslår jag att du gör följande uppgifter:

1. Lägg till bearbetningen av att trycka på SB2-knappen med motsatt algoritm: när SB2-knappen släpps ska LED1 lysa och när den trycks ned ska den vara släckt.

2. Skriv ett program för att styra LED2 med båda knapparna. När SB1-knappen trycks in ska lysdioden lysa och förbli tänd tills SB2-knappen trycks in, vilket släcker den tills nästa tryckning på SB1.

Kompilatorn översätter källkoder från assemblerspråk till objektkod. Den resulterande objektkoden kan användas i ATMEL-simulatorn AVR Studio, eller i ATMEL AVR In-Circuit Emulator. Kompilatorn genererar också kod som kan programmeras direkt in i AVR-mikrokontroller.

Kompilatorn genererar kod som inte kräver länkning.

Kompilatorn körs under Microsoft Windows 3.11, Microsoft Windows95 och Microsoft Windows NT. Dessutom finns det en konsolversion för MS-DOS.

Familj Instruktionsuppsättning AVR mikrokontroller beskrivs kortfattat i detta dokument, för mer fullständiga instruktioner, se de fullständiga instruktionerna och dokumentationen för din specifika mikrokontroller.

Källkoder

Kompilatorn arbetar med källfiler som innehåller instruktioner, etiketter och direktiv. Instruktioner och direktiv har vanligtvis en eller flera operander.

Kodraden bör inte vara längre än 120 tecken.

Vilken rad som helst kan börja med en etikett, som är en sträng av tecken som slutar med ett kolon. Etiketter används för att ange platsen till vilken kontrollen överförs under övergångar, samt för att ange variabelnamn.

Inmatningssträngen kan ha en av fyra former:

[etikett:] direktiv [operander] [Kommentar][etikett:] instruktion [operander] [Kommentar]En kommentarTom linje

Kommentaren har följande form:

; [Text]

Positioner inom hakparenteser är valfria. Text efter semikolon (;) och till slutet av raden ignoreras av kompilatorn. Etiketter, instruktioner och direktiv beskrivs mer i detalj nedan.

Exempel:

etikett: .EQU var1=100 ; Ställer var1 till 100 (Detta är ett direktiv) .EQU var2=200 ; Ställer in var2 till 200

test: rjmp test ; Endless loop (Detta är en instruktion); Rad med bara en kommentar

; Ännu en rad med en kommentar

Kompilatorn kräver inte att etiketter, direktiv, kommentarer eller instruktioner finns i en specifik kolumn på en rad.

avr processor instruktioner

Nedan finns en uppsättning kommandon för AVR-processorer; en mer detaljerad beskrivning av dem finns i AVR Data Book.

Aritmetik och logiska instruktioner

Mnemonics

Operander

Beskrivning

Drift

Flaggor

Cyklar

Rd,Rr

Summering utan bär

Rd,Rr

Summering med carry

Rd = Rd + Rr + C

Rd,Rr

Subtraktion utan bär

Rd,K8

Subtrahera en konstant

Rd,Rr

Subtraktion med bär

Rd = Rd - Rr - C

Rd,K8

Subtrahera en konstant med carry

Rd = Rd - K8 - C

Rd,Rr

Logisk OCH

Rd,K8

Logisk OCH med konstant

Rd,Rr

Logisk ELLER

Rd,K8

Logisk ELLER med konstant

Rd,Rr

Logisk exklusiv ELLER

Bit Inversion

Byte av tecken (tilläggskod)

Rd,K8

Ställ in bit(ar) i ett register

Rd,K8

Rensa bit(ar) i ett register

Rd = Rd ($FF - K8)

Öka registervärdet

Minska ett registervärde

Kollar efter noll eller negativitet

Rensa register

Ställ in register

Rdl,K6

Lägg till en konstant och ett ord

Rdh:Rdl = Rdh:Rdl + K6

Rdl,K6

Subtrahera en konstant från ett ord

Rdh:Rdl = Rdh:Rdl - K 6

Rd,Rr

Multiplicera osignerade tal

R1:R0 = Rd * Rr

Rd,Rr

Multiplicera tecken med tal

R1:R0 = Rd * Rr

Rd,Rr

Multiplicera ett signerat tal med ett osignerat tal

R1:R0 = Rd * Rr

Rd,Rr

Multiplicera bråk utan tecken

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

Rd,Rr

Multiplicera bråk med tecken

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

Rd,Rr

Multiplicera en bråkdel med tecken utan tecken

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

Branschanvisningar

Mnemonics

Operander

Beskrivning

Drift

Flaggor

Cyklar

Relativ övergång

Indirekt övergång till ( Z)

Förlängd indirekt övergång till ( Z)

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

Relativt subrutinsamtal

STACK = PC+1, PC = PC + k + 1

Indirekt samtal ( Z)

STACK = PC+1, PC = Z

Utökat indirekt samtal ( Z)

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

Ringer en subrutin

STACK = PC+2, PC = k

Återgå från subrutinen

Återgå från avbrott

Rd,Rr

Jämför, hoppa över om lika

om (Rd ==Rr) PC = PC 2 eller 3

Rd,Rr

Jämföra

Rd,Rr

Jämför med transfer

Rd,K8

Jämför med konstant

Rr,b

Hoppa över om biten i registret rensas

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

Rr,b

Hoppa över om bit i registret är inställt

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

P,b

Hoppa över om biten i hamn rensas

om(I/O(P,b)==0) PC = PC + 2 eller 3

P,b

Hoppa över om portbiten är inställd

om(I/O(P,b)==1) PC = PC + 2 eller 3

s,k

Hoppa om flaggan i SREG rensas

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

s,k

Gå om flaggan i SREG är inställd

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

Gå om lika

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

Hoppa över om inte lika

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

Gå om transfer är installerat

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

Gå om överföringen rensas

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

Hoppa om lika eller större

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

Hoppa över om mindre

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

Gå om minus

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

Gå om plus

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

Hoppa om det är större än eller lika (undertecknat)

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

Hoppa om mindre (signerad)

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

Hoppa om intern bärflagga är inställd

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

Hoppa om intern bärflagga är nollställd

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

Hoppa om T-flaggan är inställd

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

Hoppa om T-flaggan rensas

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

Hoppa om överflödesflaggan är inställd

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

Hoppa om översvämningsflaggan rensas

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

Gå om avbrott är aktiverade

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

Gå om avbrott är inaktiverat

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

* För dataåtkomstoperationer indikeras antalet cykler vid åtkomst till internt dataminne och är inte korrekt när man arbetar med externt RAM. För instruktionerna CALL, ICALL, EICALL, RCALL, RET och RETI är det nödvändigt att lägga till tre cykler plus två cykler för varje väntan i styrenheter med en PC mindre än 16 bitar (128KB programminne). För enheter med programminne större än 128KB, lägg till fem cykler plus tre cykler för varje väntan.

Instruktioner för dataöverföring

Mnemonics

Operander

Beskrivning

Drift

Flaggor

Cyklar

Rd,Rr

Kopiera register

Rd,Rr

Kopiera ett par register

Rd+1:Rd = Rr+1:Rr, r,d jämnt

Rd,K8

Belastningskonstant

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

Direkt sparande

X,Rr

Indirekt konservering

X+,Rr

(X) = Rr, X=X+1

-X,Rr

Y,Rr

Indirekt konservering

Y+,Rr

Indirekt besparing med efterökning

(Y) = Rr, Y=Y+1

-Y,Rr

Indirekt konservering med förminskning

Y=Y-1, (Y) = Rr

Y+q,Rr

Z,Rr

Indirekt konservering

Z+,Rr

Indirekt besparing med efterökning

(Z) = Rr, Z=Z+1

-Z,Rr

Indirekt konservering med förminskning

Z=Z-1, (Z) = Rr

Z+q,Rr

Indirekt förvaring med ersättning

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

Sparar i programminnet

(Z) = Rl:R0

Utökad lagring i programminnet

(RAMPZ: Z) = Rl:R0

Rd,P

Läs port

P,Rr

Skriv till hamn

Trycker ett register på stapeln

Poppa ett register från stapeln

* För dataåtkomstoperationer indikeras antalet cykler vid åtkomst till internt dataminne och är inte korrekt när man arbetar med externt RAM. För instruktionerna LD, ST, LDD, STD, LDS, STS, PUSH och POP måste du lägga till en cykel plus en cykel för varje väntan.

Instruktioner för att arbeta med bits

Mnemonics

Operander

Beskrivning

Drift

Flaggor

Cyklar

Logisk förskjutning vänster

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

Logisk förskjutning åt höger

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

Vrid åt vänster via C

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

Vrid åt höger via C

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

Aritmetiskt skift till höger

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

Ordna om anteckningsböcker

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

Att sätta flaggan

Rensa flaggan

P,b

Sätt bit på babord

P,b

Ren bit i hamn

Rr,b

Rd,b

Ladda bit från T till register

Ställ bärflagga

Rensa bärflagga

Sätt negativ nummerflagga

Rensa negativ nummerflagga

Sätt nollflagga

Rensa nollflaggan

Ställ in avbrottsflagga

Rensa avbrottsflaggan

Ställ in signerad nummerflagga

Tydlig signerad nummerflagga

Ställ översvämningsflagga

Rensa översvämningsflagga

Sätt flagga T

Rensa T-flagga

Ställ in intern bärflagga

Rensa intern bärflagga

Ingen operation

Sömn (minska energiförbrukningen)

Se beskrivning av instruktioner

Återställa Watchdog-timern

Se beskrivning av instruktioner

Montören är skiftlägesokänslig.

Operander kan vara av dessa typer.

God kväll alla! Jag sänder från en mysig värld som heter "assembler". Jag kommer omedelbart att klargöra att ämnet rör AVR-mikrokontroller - och jag vet ännu inte om det här inlägget kommer att vara användbart för dem som vill använda assembler för någon annan uppgift. Faktum är att jag bokstavligen för några dagar sedan började lära mig assembler från grunden - jag måste göra en enhet - och jag bestämde mig för att göra allt i den själv. Så en vacker dag insåg jag det Att lära sig assembler är helt värdelöst! Monteringsspråk kan bara förstås! Det vill säga till alla som vill programmera på assemblerspråk rekommenderar jag starkt att ni fördjupar er i detalj i hur mikrokontrollern FYSISKT fungerar, och sedan studerar kommandonas krångligheter.
Så jag kommer förmodligen att starta en liten serie artiklar där jag ska berätta för dig från första början hur exakt Jag förstod vissa saker i assemblerspråksprogrammering - jag tror att för dem som inte alls förstår vad ASM är, kommer jag att vara en sådan "översättare" från språket för de som är väldigt bra på den här frågan.

Jag ska genast säga att jag mer eller mindre kom in på det här ämnet på initiativ av DIHALT - därför kommer dessa artiklar att vara en sorts översättning från ett superduper assembly-mikrokontrollerspråk till ett språk som är förståeligt för de flesta. Tja, jag hoppas att gurus kommer att rätta mig allt eftersom pjäsen fortskrider, och om jag plötsligt förklarar något felaktigt kommer de att rätta mig.
Så, de första slutsatserna om assembler som jag drog för ett par dagar sedan chockade mig till kärnan - och jag satt och läste DI HALT-artiklar från 23.00 till 05.00 - varefter jag gick och la mig nöjd och glad. Jag förstod essensen av assemblerspråksprogrammering för mikrokontroller.
Hur kan detta förklaras ännu enklare? Jag tror att vi måste börja från själva essensen.
***
Inledningsvis kommer vi inte att gå in på tekniska detaljer (vi kommer att prata om dem i nästa artikel) - bara föreställ dig att det finns 3 tecken:
1. Mikrokontroller - Det här är engelsmannen Steve, som kom till ryssen. Han kan engelska perfekt, men han förstår inte ryska alls - inte ett enda ord. Bara engelska. Han förlorade argumentet och lovade att göra allt som ryssen bad honom göra utan att ifrågasätta.
2. Montör - Det här är översättaren Vasya, vars mamma är engelska och pappa är rysk. Han kan både engelska och ryska perfekt.
3. Vi - Det här är en ryss som en engelsman har kommit till. Jo, det vill säga vi är vi =) Samtidigt kan vi ryska perfekt och (!!!) lite engelska - bara lite, med en ordbok.
***
Föreställ dig den här situationen - en engelsman sitter på en stol i ditt rum. Och du sitter vid din dator och läser det här inlägget, när plötsligt ditt fönster plötsligt öppnades! Det är otur! Det blåser, ridån har förvandlats till ett segel... Det skulle vara skönt att stänga den! Men det är för lat för att resa sig från stolen, ta fötterna från systemenheten, stoppa in dem i tofflor, lägg ner din kopp kaffe (öl) och gå och bekämpa väder och vind. Och så inser du plötsligt att vi har en engelsman i rummet som har förlorat sin satsning och det är dags att jaga honom! Och du säger så sött till honom, "Dude! Snälla stäng fönstret och sedan kan du sätta dig på stolen igen!” och han sitter, tittar förvirrat på dig och gör ingenting! Du kan naturligtvis slå till kålsoppan - men då kommer han fortfarande inte att förstå dig! Sedan ringer du din översättarkompis Vasily – han kommer och sätter sig bredvid engelsmannen på en stol. Och du säger - Översätt: "Steve, gå och stäng fönstret och luta dig sedan tillbaka på stolen!" Översättaren översätter till engelska - engelsmannen förstår och går och stänger fönstret, och kommer sedan och sätter sig på en stol.
Vid det här laget behöver du bara förstå montörens roll i denna "We-Assembler-Controller"-kedja
Det vill säga, hur skulle alla förstå vad assembler är? Läs sedan vidare.
***

Så låt oss föreställa oss den här situationen. Du säger till Vasya - "Lyssna, ja, kort sagt, det är så här - jag glömde räknaren hemma, dividera 56983 med 2 och säg åt Steve att göra så många armhävningar med knytnävarna" och Vasya räknar med räknaren och säger till Steve på engelska "Do armhävningar med nävarna 28491 gånger" heter det "DIREKTIV"- med andra ord, ett direktiv är en uppgift för Vasya, vars resultat är Steves handling.

Det finns en annan situation - du säger till Vasya "Säg till Steve att göra 28491 armhävningar" och Vasya översätter helt enkelt dina ord till engelska. Det kallas OPERATÖR

Det är enkelt – det finns ett direktiv och det finns en operatör. Operatören är din direkta instruktion till Steve vad han ska göra - Vasya här översätter bara din förfrågan till engelska. Och direktivet är en uppgift för Vasya själv - och Vasya gör först vad du sa till honom, och sedan, beroende på resultatet, säger han till Steve något.

Nu ska vi tortera engelsmannen regelbundet! Men först måste vi lära känna vår översättare Vasya bättre. Du behöver veta följande - Vasya lyder dig alltid utan tvekan - vad han blev tillsagd gör han. Vasyas miniräknare har inga decimaler - om du tittar på exemplet med armhävningar, så är 56983 \ 2 = 28491,5 - men Vasyas allt efter decimalkomma är avskuret - och han ser bara ett heltal - och det spelar ingen roll om det kommer att finnas 28491.000001 eller det kommer att finnas 28491.9999999 - för Vasya är detta en stor sak kommer att vara 28491 i båda fallen. Inget är avrundat. Mer viktig information om Vasya. Vasya är grym - han bryr sig inte om det faktum att Steve jävla gör armhävningar tjugoåtta tusen gånger. De berättade för honom att Vasya översatte. Och han översatte inte bara, utan han tvingade mig också att göra det du bad om. Så om Steve dör på den tjugotre tusen femhundratrettonde armhävningen, kommer det att vara helt och hållet ditt fel.

Egentligen var det allt för nu. I nästa inlägg kommer vi att gräva djupare - för nu räcker det att bara förstå detta. Föreställ dig bara denna situation och förstå vad som är vad, vem spelar vilken roll och hur direktivet skiljer sig från operatören.
Och sedan ska vi försöka kalla allt vid dess rätta namn och grovt uppskatta hur assembler fungerar med en mikrokontroller som en vuxen.

Vad som behövs för att bli en professionell programutvecklare för mikrokontroller och nå en kompetensnivå som gör att du enkelt kan hitta och få ett jobb med en hög lön (medellönen för en mikrokontrollerprogrammerare i Ryssland i början av 2015 är
80 000 rubel).

LÄGG TILL

Syntax: ADD reg1, reg2 Detta kommando lägger till innehållet i registren reg1 och reg2 och lagrar resultatet i register reg1. Ändrar tillståndet för flaggorna H, S, V, N, Z, C.

OCH

Syntax: AND reg1, reg2 Detta kommando utför en logisk OCH-operation mellan registren reg1 och reg2, och lagrar resultatet i register reg1. Ändrar tillståndet för S, V, N, Z flaggorna.

OCH JAG

Syntax: ANDI hreg, nummer Detta kommando utför en logisk AND-operation mellan innehållet i det höga registret hreg och det konstanta numret (0...255), och lagrar resultatet i registret. Ändrar tillståndet för S, V, N, Z flaggorna.

BRBC

Syntax: BRBC-bit, etikett Detta kommando kontrollerar tillståndet för SREG-registerbiten ($3F) och hoppar till etiketten om biten är ren. Etiketten måste ligga inom 63 kommandon från kommandot brbc.

BRBS

Syntax: BRBS-bit, etikett Detta kommando kontrollerar tillståndet för SREG-registerbiten ($3F) och hoppar till etiketten om biten är inställd. Etiketten måste ligga inom 63 kommandon från kommandot brbs.

BRCC

Syntax: BRCC-bit, etikett Detta kommando kontrollerar bärflaggan (C) och hoppar till etiketten om den är klar.

BRCS

Syntax: BRCS-bit, etikett Detta kommando kontrollerar bärflaggan (C) och hoppar till etiketten om den är inställd.

BREQ

Syntax: BREQ-bit, etikett Detta kommando kontrollerar noll-flaggan (Z) och hoppar till etiketten om den är inställd.

BRNE

Syntax: BRNE bit, etikett Detta kommando kontrollerar noll (Z) flaggan och hoppar till etiketten om den är ren.

C.B.I.

Syntax: CBI ioreg, bit Detta kommando återställer biten i I/O-registret ioreg ($00...$1F) till 0. Bitnumret bestämmer bitoperanden.

CLR

Syntax: CLR reg Detta kommando återställer alla bitar i reg-registret till 0. Ändrar tillståndet för S, V, N, Z-flaggor.

C.P.

Syntax: CP reg1, reg2 Detta kommando jämför innehållet i registren reg1 och reg2 genom att subtrahera reg2 från reg1. Innehållet i registren ändras inte. Ändrar tillståndet för flaggorna H, S, V, N, Z, C.

KPI

Syntax: CPI hreg, nummer Detta kommando jämför innehållet i hreg-registret med talkonstanten genom att subtrahera konstanten från registret. Innehållet i registren ändras inte. Ändrar tillståndet för flaggorna H, S, V, N, Z, C. Kommandot fungerar endast med register R16…R31.

DEC

Syntax: DEC reg Detta kommando minskar innehållet i register reg med ett och skriver tillbaka resultatet till registret. Ändrar tillståndet för S, V, N, Z flaggorna.

I

Syntax: IN reg, ioreg Detta kommando överför innehållet i I/O-registret ioreg till RON reg.

INC

Syntax: INC reg Detta kommando ökar innehållet i register reg med ett, och skriver tillbaka resultatet till registret. Ändrar tillståndet för S, V, N, Z flaggorna.

LD

Syntax: LD reg, longreg Detta kommando laddar en byte från dataminnet (minnesadressen som finns i det längre registret) till reg-registret (för 1200-modellen).

LDI

Syntax: LDI hreg, nummer Detta kommando laddar det omedelbara värdet av nummer i högregistret hreg (kommandot kan bara fungera med register R16...R31). Numret måste vara inom intervallet 0…255.

LSR

Syntax: LSR reg Detta kommando utför en logisk högerförskjutning av innehållet i registerreg. I detta fall kopieras den 0:e biten till C-flaggan, den 7:e biten återställs till 0. Ändrar tillståndet för S, V, N, Z, C-flaggorna.

ORI

Syntax: ORI hreg, nummer Detta kommando utför en logisk ELLER-operation mellan innehållet i det höga registret hreg och talkonstanten (0...255), och lagrar resultatet i registret. Ändrar tillståndet för S, V, N, Z flaggorna.

UT

Syntax: OUT ioreg, reg Detta kommando överför innehållet i det allmänna registret reg till I/O-registret ioreg.

RCALL

Syntax: RCALL-etikett Detta kommando anropar en subrutin som identifieras av etikett, som måste ligga inom 2048 kommandon för ett rcall-kommando (relativt anrop).

RÖTA

Syntax: RET Detta kommando återgår från en subrutin genom att hoppa till kommandot som följer efter det ursprungliga anropskommandot.

RETI

Syntax: RETI Detta kommando returnerar från en subrutin och ställer in flaggan för allmän avbrottsaktivering.

RJMP

Syntax: RJMP-etikett Relativt hopp. Hoppar till den del av programmet som anges av etiketten, som måste ligga inom 2048 från RJMP-kommandot.

SBI

Syntax: SBI ioreg, bit Detta kommando ställer in I/O-registerbiten ioreg ($00...$1F) till 1. Bitnumret bestämmer bitoperanden.

SBIC

Syntax: SBIC ioreg, bit Detta kommando kontrollerar I/O-registerbiten ioreg ($00...$1F) och hoppar över nästa kommando om denna bit är ren. Bitnumret bestämmer bitoperanden.

SBIS

Syntax: SBIS ioreg, bit Detta kommando kontrollerar I/O-registerbiten ioreg ($00...$1F) och hoppar över nästa kommando om den biten är inställd. Bitnumret bestämmer bitoperanden.

SEI

Syntax: SEI Detta kommando ställer in flaggan för allmänna avbrottsaktivering.

SER

Syntax: SER reg Detta kommando sätter alla bitar i reg-registret till 1. Ändrar tillståndet för flaggorna S, V, N, Z. Kommandot kan endast fungera med register R16...R31.

ST

Syntax: ST reg, longreg För 1200-modellen lagrar detta kommando innehållet i reg-registret i dataminnet (minnesplatsen finns i det längre registret), dvs. vidarebefordrar indirekt innehållet i PON reg till adressen som är lagrad i det längre registret.

SUBI

Syntax: SUBI hreg, tal Subtraherar det konstanta talet från det höga registret av hreg. Resultatet lagras i samma register. Ändrar tillståndet för flaggorna H, S, V, N, Z, C. Kommandot kan endast fungera med register R16…R31.

Revich Yu. V.

Praktisk programmering av Atmel AVR mikrokontroller i språket
assemblerare - 2:a uppl., rev. -

Funktionsprinciperna, arkitektoniska egenskaper och tekniker beskrivs

programmering av Atmel AVR-mikrokontroller. Färdiga recept tillhandahålls
för programmering av de grundläggande funktionerna i modern mikroelektronisk utrustning
rature: från svaret till att trycka på en knapp eller konstruktionen av en dynamisk display
till komplexa protokoll för inspelning av data till externt minne eller funktioner
realtidsklockanslutning. Särskild uppmärksamhet ägnas åt datautbyte
numeriska mikroelektroniska enheter med en persondator ges
programexempel. Boken tar hänsyn till funktionerna hos moderna AVR-modeller och sam-
resande mikrokretsar från de senaste årens produktion. Applikationer innehåller grundläggande
parametrar för AVR-mikrokontroller, lista över kommandon och programtexter för dem,
samt en lista över använda termer och förkortningar.

För studenter, ingenjörer och radioamatörer

Publikationsförberedande grupp:

Chefsredaktör

Ekaterina Kondukova

Vice chefredaktör

Igor Shishigin

Huvud av redaktionen

Grigory Dobin

Redaktör

Yuri Rozhko

Dator layout

Olga Sergienko

Rättare

Zinaida Dmitrieva

Omslagsdesign

Elena Belyaeva

Huvud produktion

Nikolay Tverskikh

Mikrokontroller, deras ursprung och tillämpning................................................ ........ 7

Bakgrund för mikrokontroller................................................... ................................................................ ................... 8

Elektronik i grekisk stil......................................................... ............................................................ ............... 10

Varför AVR? ................................................................ ............................................................ ............................................ 12

DEL I. ENHETENS ALLMÄNNA PRINCIPER
OCH ANVÄNDNING AV ATMEL AVR .......................................... ...................... 17

Kapitel 1. Översikt över Atmel AVR-mikrokontroller .......................................... ........... 19

AVR-familjer ................................................... ................................................................... .......... ........................... 21

Funktioner för praktisk användning av AVR MK .......................................... .......................... 23

Om konsumtion................................................ ........................................................... ........................................ 23

Vissa funktioner för att använda AVR i kretsar........................................... ............................ 25

Kapitel 2. Allmän struktur, minnesorganisation, klockning, återställning........... 27

Programminne ................................................... ............................................................ ........................................................ 27

Dataminne (RAM, SRAM) ................................................... ................................................................... .......... ......... 29

Icke-flyktigt dataminne (EEPROM) .......................................... ........................................... 31

Klockmetoder ................................................... ............................................................ ............... ............... 32

Återställ................................................. ................................................................ ........................................................... 34

Kapitel 3: Introduktion till kringutrustning................................................ ........ 37

I/O-portar................................................... ........................................................................ ................................... 38

Timers-räknare................................................... ......................................................... ............................................... 39

Analog-till-digital-omvandlare......................................................... ............................................................ 41

Seriella portar ................................................... ........................................................... ......... .......... 42

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

SPI-gränssnitt ................................................... ........................................................... ........................................ 46

TWI-gränssnitt (I

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

Universellt seriellt gränssnitt USI ................................................... ............................ 50

Kapitel 4. Avbrott och energisparlägen........................................... .......... ... 53

Avbryter ................................................... ...................................................................... ................................................ 53

Typer av avbrott ........................................................... ................................................................ ...................... 57

Energisparlägen................................................... ................................................................ ........................................ 58

DEL II. PROGRAMMERING AV MIKROCONTROLLER
ATMEL AVR ................................................... ........................................................... ................................ 61

Kapitel 5. Allmänna principer för programmering av MCU:er i AVR-familjen ................................... 63

Montering eller C? ................................................................ ............................................................ ............................ 63

AVR-programmeringsmetoder och verktyg .......................................... ...................................... 67

Kodredigerare ................................................... ........................................................... ........................................ 67

Om AVR Studio ................................................... ............................................................ ........... ................................ 68

Arrangemang av montören......................................................... ........................................................................ ................... 70

Programmerare ................................................... ...................................................................... ............................ 71

Om hex-filer................................................... ......................................................... ........................................... 75

Kommandon, instruktioner och notation för AVR-montören.......................................... ........................................... 78

Siffror och uttryck................................................... ......................................................... ............................... 79

Direktiv och funktioner................................................... ........................................................... .......................................... 80

Allmän struktur för AVR-programmet......................................................... ............................................................ ......... 84

Avbrottshantering................................................ ........................................................... ................................ 85

ÅTERSTÄLL ................................................... ................................................................... ................................................ 89

Det enklaste programmet ................................................... ................................................................... .......... .............. 90

Dröjsmål................................................. ................................................................ ...................................... 92

Räknarprogram ................................................... ............................................................ ............................ 94

Använda avbrott ................................................... ................................................................ ...................... 96

Timerfördröjning ................................................... ............................................................ ............................ 97

Räknarprogram med avbrott........................................... ................................... 98

Om konfigurationsbitar................................................... ........................................................... .......................................... 101

Kapitel 6. AVR-kommandosystem ......................................... ................................................... 105

Instruktioner för kontrollöverföring och register SREG ...................................................................... 105

Check-pass-kommandon......................................................... ........................................................... ..................................... 111

Logiska operationskommandon........................................... ........................................................... .................................. 113

Skiftinstruktioner och bitoperationer........................................... ...................................................................... 114

Aritmetiska operationsinstruktioner................................................... ...................................................... 116

Dataöverföringskommandon................................................... ........................................................... ................................ ..... 118

Systemkontrollkommandon................................................... ........................................................................ ................ 122

Utför standardprocedurer i assembler.................................................. ........................................................... 123

Om stacken, lokala och globala variabler........................................... ........................................... 125

Kapitel 7. Aritmetiska operationer................................................... ...................................... 127

Standardaritmetiska operationer................................................... ........................................................... ..... 128

Multiplicera flersiffriga tal................................................... ........................................................... ...... 129

Uppdelning av flersiffriga tal................................................ ............................................................ ............... 131

Operationer med bråktal................................................... ...................................................... 134

Generator av slumptal................................................... ................................................................ ...... ...... 136

Operationer med siffror i BCD-format ................................................... ............................................................ ..... 138

Negativa tal i MK.................................................. ............................................................ ........... ......... 143

Kapitel 8. Programmera timers................................... ...................................... 147

8- och 16-bitars timer........................................... ......................................................... ............... .......... 147

Bildning av ett givet frekvensvärde.......................................... ........................... 149

Nedräkning................................................. ............................................................... ........................................................ 153

Exakt tidskorrigering................................................... ........................................................... ..................... 158

Frekvensmätare och periodmätare................................................... ............................................................ ............................ 160

Frekvensmätare ................................................... ........................................................... ......... ................................ 160

Periodmätare ................................................... ............................................................ ........................................... 164

Dynamisk displaykontroll................................................... ........................................................... ...... 167

LED-indikatorer och deras anslutning.......................................... ...................................... 168

Programmera dynamisk display................................................... ................... ............... 171

Timers i PWM-läge ................................................... ............................................................ ............................ 174

Kapitel 9. Använda EEPROM .......................................... ...................................... 179

Återigen om säkerheten för data i EEPROM .......................................... ...................................... 179

Att skriva och läsa EEPROM .......................................... ............................................................ ............................ 181

Lagring av konstanter i EEPROM .......................................... ............................................................... ..................... 183

Kapitel 10. Analog komparator och ADC........................................... ........................ 187

Analog-digitala operationer och deras fel........................................... ........................................ 187

Arbeta med en analog komparator.......................................... ........................................................... ............... 190

Integrera ADC på komparatorn.................................................. ...................................... 193

Funktionsprincip och beräkningsformler.......................................... ...................................... 194

Integrera ADC-program................................................... ........................................................... ...... 198

Inbyggd ADC........................................... ............................................................ ........................................... 201

Exempel på användning av en ADC......................................... ................................................................ ...................... .... 204

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

Kapitel 11. SPI-programmering ................................................ ...................................... 215

Grundläggande operationer via SPI ......................................... ............................................................ ................................... 215

Hårdvarualternativ ................................................... ........................................................... ......... ......... 216

Mjukvarualternativ ................................................... ........................................................... ......... ...... 218

Om typerna av icke-flyktigt minne........................................... .......... ........................... 219

Skriva och läsa flashminne via SPI .......................................... ......................................................... .. 221

Utbytesprogram med minne 45DB011B via SPI ........................................... ............... 224

Skriva och läsa flash-kort.................................................. ............................................................ ............................ 225

Ansluta MMS-kort................................................... ................................................................... ........... ... 225

Inlämning av kommandon och initiering av MMC........................................... ........................................ 228

Spela in och läsa MMS........................................... ............................................................ ........... ......... 232

Kapitel 12. TWI-gränssnitt (I

C) och dess praktiska användning................ 237

Grundprotokoll I

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

Programvaruemulering av protokoll I

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

Skriva data till externt icke-flyktigt minne........................................... .......... .......... 241

Växlingslägen med AT24-minne .......................................... ...................................................................... 241

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

Klocka med gränssnitt I

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

Spela in data................................................ ............................................................ ................................... 255

Läser data ................................................... ............................................................ ................................... 259

Kapitel 13. UART/USART-programmering ........................................... ............... 261

UART-initiering ................................................... ........................................................... ......... ............. 262

Sändning och mottagning av data................................................... ............................................................ ........... .......... 263

Exempel på inställning av DS1307-klockan med UART .......................................... ................... 266

Tekniker för att skydda mot kommunikationsfel.......................................... ........................... 271

Paritetskontroll ................................................... ........................................................... ........................................ 271

Hur man organiserar ett korrekt utbyte................................................ ........................................................................ ........ 273

Ytterligare USART-funktioner ................................................... ...................................... 274

Implementering av RS-232 och RS-485 gränssnitt ........................................ ............................................................ ..... 276

Nivåomvandlare för RS-232 ......................................... ........................................... 280

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

Kapitel 14. Energisparlägen och Watchdog-timer................................... 285

Programmering av energisparläget................................................... ........................................................... 286

Exempel på en batteridriven enhet........................................... ..................................................... 287

Slutförande av programmet................................................. ........................................................... ...................... 289

Använda watchdog-timern ........................................................ ............................................................ ........... 293

ANSÖKNINGAR................................................ ...................................................................... ............... 299

Bilaga 1. Grundläggande parametrar för Atmel AVR-mikrokontroller .......... 301

Bilaga 2. Atmel AVR-kommandon ................................................ ........................... 309

Aritmetiska och logiska kommandon................................................... ...................................... 310

Bitdriftsinstruktioner................................................... ........................................................... .......................... 311

Jämförelsekommandon................................................ ........................................................... ............................ 312

Styröverföringskommandon................................................... ......................................................... ............... .313

Kommandon för ovillkorligt hopp och anrop av subrutiner........................................... ........... ... 313

Check-Skip-instruktioner och villkorliga hoppinstruktioner........................................... ................... 314

Dataöverföringskommandon................................................... ........................................................... ........................ ........ 315

Systemkontrollkommandon................................................... ........................................................................ ................ 316

Bilaga 3. Programtexter................................................... ............................................ 317

Flash Communication Demo Program 45DB011B
via SPI-gränssnitt................................................... ................................................................... ........................................... 317

Utbyte av gränssnitt I

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

Bilaga 4. Datautbyte med persondator
och felsökningsprogram via UART ......................................... ...................................... 329

Arbeta med COM-port i Delphi ......................................... ........................................................... ........ ..... 329

Installera en RTS-linje i DOS och Windows .......................................... .......... ................................................ 335

COM2000-program ................................................... ........................................................... ............................ 337

Felsökning av program med en terminalemulator.......................................... ................................ 339

Bilaga 5. Ordbok över ofta använda förkortningar och termer....... 341

Litteratur................................................. ................................................................ ............... 347

Sakregister................................................ ................................................... 349

INTRODUKTION

Mikrokontroller,
deras ursprung och tillämpning

De säger att på 1960-talet, titta på deltagarna i studentdemonstrationer
protest, kommenterade Gordon Moore: "Vi är de sanna revolutionärerna." Studenter
en anställd hos en av transistorns uppfinnare, W. Shockley, bl.a.
gömd grundare av den berömda Silicon Valley, i sin tur grundad
tel och ledare för företag som var avsedda att spela en ledande roll i utvecklingen
mikroelektronik visste Moore vad han pratade om. Paradoxalt nog är det så
Moores och hans medarbetares uppfinningar var avsedda att bli grunden för den världen
där den "upproriska ungdomens" verksamhet därefter koncentrerades
1960-talet Moderna hackare (inte datorhuliganer från tidningar, utan riktiga sådana)
datavetare brinner för sitt arbete) - direkta ideologiska arvtagare
Sorbonnestudenter och amerikanska demonstranter, som ändrade mottot "Make
kärlek inte krig"

till "Skriv inte slogans - skriv kod." Det är ingen slump att många kända

framstående figurer inom den elektroniska datorindustrin, uppfinningsförfattare, grundare
som har format den moderna världens ansikte - kommer från en miljö nära just den "bun-
tynande ungdom."
Vår historia om mikrokontroller började med det faktum att Gordon Moore 1957 var med-
tillsammans med Robert Noyce, som senare blev en av mikrofonens uppfinnare
roschemy och ytterligare sex anställda vid Shockley Semiconductor Labs (Shockley kallad
deras "förrädiska åtta"), grundade företaget Fairchild Semiconductor. Till henne vi
Det beror inte bara på utvecklingen av halvledarmarknaden och introduktionen av mikrokretsar
in i ingenjörspraktik, men också för att det har blivit en slags smedja av personal och
en idégenerator för en ung bransch.
Här är bara några av de historiska fakta. Moore själv med Noyce i slutet av 1960-talet
skapade företaget Integrated Electronics, som under det förkortade namnet Intel
nu bekant för varje skolbarn. Jeremy Sanders, grundare av en annan berömd
största företaget - AMD, lämnade också Fairchild, där han utmärkte sig genom att öppna en sam-
tillfällig ekonomisk modell för produktion och försäljning av halvledare
komponenter, där kostnaden för produkten tenderar att bli noll när den ökar

"Älska, inte krig" var sloganen för 1960-talets hippies som protesterade mot Vietnamkriget.

Introduktion

ändra batchvolymen. Charlie Spork, en av Fairchilds nyckelchefer, 1967
blev direktör för National Semiconductor, som han senare ledde ett kvartal
århundrade. Hälften av de "förrädiska åtta" - Gene Hoerney, Evgeniy Kleiner,
Jay Last och Sheldon Roberts - grundade Amelco 1961, varifrån
därefter växte de nu välkända Intersil, Maxim och Ixys. Anställd
Vi är skyldiga Fairchild till Robert Widlar uppfinningen av operationsförstärkare -
varianter av mikrokretsar, och till denna dag bara andra i popularitet
mikroprocessorer. Dessutom är Fairchilds historia förknippad med framväxten av den berömda
ny venture (dvs "riskig") finansieringsmodell, som spelade en avgörande roll
viktig roll i utvecklingen av alla industrier relaterade till elektronik, datorer och
telekommunikation. Det är inte för inte som Fairchild ofta kallas "föreståndaren till all elektricitet."
tronics".

Bakgrund av mikrokontroller

Av all denna orkan av händelser är det viktiga för vår berättelse att bland
andra innovationer, Fairchild-anställda var de första att marknadsföra halvledare
förfalskat minne. Nu, i en tid av CD- och DVD-skivor, hårddiskar och flash-kort, har vi
Det är svårt att föreställa sig att i början av 1960-talet, datorprogram
lagrades huvudsakligen på kartongark (hålkort), skrotkonstruktörer
om ditt huvud är över dyra RAM-moduler på kvicksilverfördröjningslinjer, oscilloskop
grafiska rör och ferritringar, där varje bit ”sytts” för hand
Nej. Den mest kompakta elektroniska enheten under dessa år för att lagra data på
magnetiska skivor kallade RAMAC 305 med en kapacitet på 5 MB var storleken
med ett industrikylskåp och hyrdes för 5 tusen dollar i månaden.
Den enda "ljusstrålen" i dessa monsters mörka rike var uppfinningen
Amerikanska Bosch Arma Corporation-anställde Yen Chow, som 1956 fick
patent för en enhet som nu kallas "engångsprogrammerbar ROM"
(OTP ROM

). I detta patent användes förresten termen för första gången

"bränna" - mikromodulen bestod av en matris med smältbara byglar, som
som brändes ut under programmeringen genom att anbringa hög spänning på dem.
OTP ROM förblev under lång tid de enda enheterna för kompakt
datalagring, och förlorade inte sin betydelse förrän helt nyligen -
minst en fjärdedel av mikrokontroller i världen, särskilt de som är enklare, upp till
produceras fortfarande med just ett sådant engångsprogrammerbart inbyggt program
skrynklig, på grund av dess extrema billighet. Och först på senare år har den "genombrända" pa-
minne började gradvis ersättas av mer bekvämt flashminne, när det senare
har fallit i pris så mycket att det nästan inte är någon idé att använda OTP ROM.
Men låt oss gå tillbaka till 1960-talet. Kompakt halvledarminne behövdes absolut
alla älskar det - från militären och NASA till tillverkare av hushållsapparater. I början
Fairchild introducerade det som idag kallas DRAM, särskilt på sådana mikro-
Ryska kretsar (32 768 chips med en kapacitet på 256 bitar vardera) ett minne av bannern byggdes

För förklaringar av några förkortningar, se Bilaga 5.

filament superdator ILLIAC-IV, en konkurrent till den inhemska BESM-6. Att ha känt
åt vilket håll vinden blåser, 1968 lämnade Moore och Noyce Fairchild och grundade Intel, som
specialiserat företag för utveckling och produktion av minne. Det har de inte ännu
visste att Intels mest populära produkt inte alls skulle vara minne, utan en liten
enhet (Fig. B1), kallad en mikroprocessor, vars utveckling i första hand var
var ursprungligen tänkt som ett hjälpsteg i utformningen av en konventionell kalkyl
Torah.

Ris. I 1. Mikroprocessor

OCH

UPPFINNINGEN AV MIKROPROCESSORN

1969 dök flera personer från Busicom, ett ungt japanskt företag, upp på Intel.
forskningsinstitut som sysslar med tillverkning av miniräknare. De behövde en uppsättning med 12
gral-scheman som huvudelementet i den nya billiga skrivbordsräknaren -
Torah. Projektet utvecklades av Masatoshi Shima, som representerade det japanska företaget
Ron. Ted Hoff (Marcian E. Ted Hoff, f. 1937), chef för den avdelning som är involverad i
utveckla applikationer för Intel-produkter, efter att ha bekantat mig med projektet, insåg jag det
istället för att skapa en miniräknare med vissa programmeringsmöjligheter
programmering kan du göra tvärtom, en dator programmerad att fungera som
kalkylator. Under hösten 1969 bestämde sig Hoff för att utveckla idén
framtidens mikroprocessors arkitektur. I våras kom Hoffa till avdelningen (alla från samma
Fairchild, redan känd för oss), nyanställde Frederico Faggin, som
ry och kom på ett namn för hela systemet: "familj 4000". Familjen bestod
av fyra 16-stifts chips: 4001 innehöll 2 KB ROM; 4002 - RAM med
4-

bitutgångsport för nedladdning av program; 4003 var en 10-bitars

I/O expander med seriell ingång och parallell utgång
hem för kommunikation med tangentbordet, indikatorn och andra externa enheter; dock-
4004 var en 4-bitars CPU (central processing unit). Det här är CPU:n
innehöll 2300 transistorer och arbetade med en klockfrekvens på 108 kHz. 15 november
1971

Skapandet av den första mikroprocessorn tillkännagavs. Busicom förvärvade

utveckling och betalade Intel $60 000. Men Intel bestämde sig för att lämna tillbaka dessa pengar till Busicom,
för att återfå rättigheterna till mikroprocessorn.
i4004 hade en datorkraft som var jämförbar med den första elektroniska datorn.
Yuter ENIAC (1946). 4004:an hittade sin första praktiska tillämpning i systemet
kontroll av trafikljus och blodanalysatorer. Denna mikroprocess
sor användes i utrustningen ombord på den interplanetära sonden Pioneer-10, som
ry satte ett livslängdsrekord bland liknande enheter: det lanserades i
1972

, och i september 2001 hade Pioneer-10 flyttat sig 11,78 miljarder km bort från jorden och var fortfarande

fungerade och, ganska troligt, fortfarande fungerar till denna dag, även om NASA i februari 2003 officiellt
socialt tog farväl av honom.

Introduktion

Så började mikroprocessorernas segerrika marsch, som senare splittrades
i flera varianter, huvudsakligen tillhörande två huvudgrupper:
mikroprocessorer (MP) och mikrokontroller (MC) själva. Den första
är avsedda att användas som en del av datorsystem, de vanligaste
de flesta är persondatorer (PC), så de används fortfarande ofta
kallas "PC-processorer" (även om denna grupp vanligtvis också inkluderar tillverkade
drivrutin MP för servrar och några andra). MK skiljer sig från MP i det
att de främst är utformade för att styra olika system,
därför, med en relativt svagare datorkärna, inkluderar de
det finns många ytterligare noder. Det faktum att för en konventionell MP antas vara
reserv i externa styrkretsar eller extra moduler (minne, ingångsportar)
utgång, timers, avbrottskontroller, noder för analog signalbehandling
fiske, etc.), i MK ligger den direkt på chippet, vilket är anledningen till att de en gång var på modet
kalla det en "mikrodator".
I själva verket, i det enklaste fallet, att bygga en fullt fungerande
för en dator, ett enda MK-chip med en ansluten
in-/utgångsenheter som är anslutna till den. Moderna modeller av vanlig enkristall
stål MK:er överträffar datorkapaciteten hos IBM PC AT på den 286:e pro-
processor från andra hälften av 1980-talet. Det finns områden där gränsen mellan MP och
MK är svår att genomföra: sådana är till exempel processorer för mobila enheter, från
telefoner och fickdatorer till digitalkameror där processorn
noden måste ha avancerade datorfunktioner och hantera flera
många externa komponenter.

elektronik i grekisk stil

1962, familjen Perlegos, grekiska emigranter födda i
invånare i staden Tripolis. Föräldrarna tog upp vinodling, som i sitt hemland, och sönerna
Novya, George och Gust Perlegos, valde den fashionabla specialiteten ingenjörskonst
elektronikingenjör: båda tog examen först från University of San Jose och sedan från Stanford
universitet. 1974, vid 24 års ålder, kom den yngste av bröderna, George Perlegos,
Började arbeta på Intel, där han befann sig inom ett av de mest avancerade områdena:
utveckling av elektriskt raderbart minne för att ersätta inbrännt OTP ROM.
Redan före Perlegos, nästan samtidigt med uppfinningen av mikroprocessorn 1971,
Intel-anställde Don Frohman uppfann den flytande slutaren och skapade den första UV-strålningen
2K raderbart EPROM (256 8).

Z

ANMÄRKNINGAR OM MARGINALEN

I "vanligt" liv, använd förkortningar för informationsenheter som består av en bokstav
"K" (liksom "M") rekommenderas inte: det är ibland mycket svårt att förstå om det är det
ungefär kilobit, kilobyte, "kiloword" eller generellt kilobit per sekund. Ändå
sådana förkortningar finns ofta, bland annat i teknisk dokumentation, och vi kommer
Jag försöker ibland följa detta exempel. För tydlighetens skull accepterar vi följande regler:
la: en stor bokstav "K" står för binära kilobitar (1024 bitar), "M" står för binära kilobitar
binära megabit (1024 kbit). Även om det i litteraturen ofta fortfarande accepteras att kilobyte är det
förkorta som "KB" och kilobitar som "KB", kommer vi att försöka undvika denna förvirring, och i

Mikrokontroller, deras ursprung och tillämpning

I alla andra fall, skriv i sin helhet: kbyte och MB, kbit/s, MB/s. Bortsett från-
kommer att vara beteckningen på mängden minne för mikrokontrollerprogram om den produceras
mätt i dubbelbyteord: till exempel betyder 4K-ord 4096 celler -
ord (8 kbyte).

George Perlegos var aktivt involverad i denna process, först med sitt deltagande, och
sedan, och under hans direkta ledning, skapades två teknologier,
som har blivit en tillväxtpunkt för hela flashminnesindustrin - en av
huvudpelarna i den moderna "digitala revolutionen". Det uppfanns först
chip 2716 - 16K (2048 8) EPROM med en matningsspänning +5 V, och sedan
2816 - det första EEPROM, elektriskt raderbart ROM, som blev prototypen
flashminne.
1981 lämnade Perlegos Intel och med flera anställda (inklusive
var Gordon Campbell, den framtida skaparen av ett annat känt företag Chips &
Technologies) skapar företaget Seeq. Det var en tid av nedgång inom elektronikindustrin.
industrialiseringen och tre år senare fick företaget lämna på grund av en skadeanmälan
mi investerare. Litar inte på dem längre, George och hans bror Gust och flera andra
1984, med Seeq anställda, skapade vi ett företag med personliga medel,
vars fullständiga namn låter som Advanced Technology MEmory and Logic eller
förkortas som Atmel.
Till en början var Atmels produkter icke-flyktiga minneschips av alla slag
nya funktioner - som OTP EPROM och EEPROM med seriell och parallell
åtkomst och Flash. 1985 släppte Atmel världens första hembaserade EEPROM.
dagens framväxande CMOS-teknik, och 1989 det första drivna flashminnet
från en spänning +5 V. I slutet av 1980-talet satte Intel sig för att straffa ett antal företag
EPROM-tillverkningsföretag, inklusive Atmel, för påstådda brott mot patent,
men i slutändan var det möjligt att komma överens om utbyte av licenser. Och på slutet-
Till slut fick Atmel en licens att producera klassiska mikrokontroller.
ler 8051, som Intel redan vid den tiden gradvis gick bort från att stödja, koncentrerades
finslipa på PC-processorer.

P

DETALJER

Låt oss komma ihåg att EEPROM skiljer sig från flashminne genom att det förra tillåter
separat åtkomst till valfri godtycklig cell, och den andra - endast till hela block. Förbi-
detta EEPROM är mindre i volym (den typiska volymen för specialiserade mikro-
EEPROM-kretsar - från enheter av kilobit till enheter av megabit) och dyrare, för närvarande
den används främst för datalagring, inklusive som en del av mikrokontroller
Lerov. Flash-minne är enklare och billigare och ger också en betydande hastighetsvinst.
tillväxt med stora mängder information, särskilt med strömmande läsning/skrivande,
typiskt för mediaenheter (som digitalkameror eller MP3-spelare). Ingår
Mikrokontrollers flashminne används för att lagra program. Några detaljer
För mer information om de olika typerna av minne och deras funktion, se Kapitel 11.

Så Atmel fann sig "dragen" i antalet mikrokontroller tillverkare, där
rom befann sig mycket snabbt i de första positionerna: produktionen började 1993
branschens första MCU AT89C51 med inbyggt flashprogramminne. Detta betyder
började en revolution i all ingenjörspraktik, eftersom det existerande
Tidigare hade MKs antingen ett engångsprogrammerbart OTP-minne, eller

Introduktion

UV-tvättbar vilket är mycket dyrare att tillverka och att arbeta med det leder till
leder till en stor förlust av utvecklartid. Antal omskrivningscykler för UV
PROM överstiger inte flera tiotal, och direkt dagsljus faller på
en sådan kristall kan leda till att information raderas. Därför även små
ry apparater måste tillverkas i första hand med hjälp av
ät OTP ROM, vilket är mycket mer riskabelt: ändra i händelse av även den minsta
fel i det inspelade programmet var inte längre möjliga. Framväxten av flashminne från
förändrat hela "landskapet" i detta område: det var som ett resultat av dess införande att stål
möjliga saker som programvara som uppdaterar datorns BIOS eller "åter-
lösa" styrprogram för konsumentelektronik.
1995, två studenter från Norges teknisk-naturvetenskapliga universitet i Tron-
Heime, Alf Bogen och Vegard Wollen, kom på idén om en 8-bitars RISC-kärna, som
som föreslogs till Atmels ledning. Namnen på utvecklarna ingår i konstens namn.
AVR-arkitekturer: Alf + Vergard + RISC. Jag gillade idén så mycket att 1996
Atmel forskningscenter grundades i Trondheim och i slutet av detsamma
Den första experimentella mikrokontrollern i den nya AVR-serien kallas
AT90S1200. Under andra halvan av 1997 började Atmel Corporation serie
produktion av AVR-familjen.

Varför AVR?

AVR-kontroller "från födseln" har två funktioner som skiljer dem åt
familj från resten av MK. Först, instruktionsuppsättningen och arkitekturen för AVR-kärnan
utvecklades tillsammans med ett företag som utvecklar kompilatorer för pro-språk
högnivåprogrammering IAR-system. Som ett resultat blev det möjligt
skriva AVR-program i C utan en stor prestandaförlust
jämfört med program skrivna på assemblerspråk. Mer information om detta
vi diskuterar det Kapitel 5.
För det andra var en av de betydande fördelarna med AVR användningen av transportband
ra. Som ett resultat finns det inget koncept för en maskincykel för AVR:er: de flesta
kommandon exekveras i en klockcykel. Som jämförelse noterar vi att de som använder
MKs i PIC-familjen är mycket populära; de kör ett kommando i 4 klockcykler, och klassen
sical 8051 - vanligtvis i 12 cykler (även om det också finns moderna modeller X 51 med ma-
busscykel i en cykel).
Det är sant, samtidigt var vi tvungna att offra lite enkelheten i kommandosystemet,
särskilt märkbar i jämförelse med x 51, där till exempel eventuella vidarebefordran
data inuti den registeransvarige, oavsett adresseringsmetod, utförs på samma sätt
landslag

i olika varianter, medan i AVR nästan för

Varje metod har sitt eget kommando, och ibland med ett begränsat handlingsutrymme.
viya. Det finns vissa svårigheter inom operationsområdet med bitar. Detta är dock inte
leder till märkbara svårigheter när man lär sig AVR assembler: tvärtom, texter
program är kortare och påminner mer om ett program på ett högt språk
nivå. Det bör också beaktas att av det totala antalet lag från 90 till 130, beroende
beroende på modell är endast 50–60 unika, resten är utbytbara.

Mikrokontroller, deras ursprung och tillämpning

Och slutligen är denna nackdel helt eliminerad när du använder C-språket,
faktiskt utjämna olika arkitekturer när det gäller pro-
programmering
En stor fördel med AVR-arkitekturen är närvaron av 32 operativa register,
inte helt lika, men tillåter i vissa fall att inte vända sig till
RAM och inte använda stacken (vilket är i princip omöjligt i samma
familj X 51), i lägre AVR-modeller är stapeln i allmänhet inte tillgänglig för
programmerare Därför blev strukturen för assemblerprogram för AVR misstänksam.
liknar mycket språkprogram på hög nivå där uttalanden fungerar
inte med minnesceller och register, utan med abstrakta variabler och konstanter.
En annan egenskap hos AVR ur kretsdesignsynpunkt är att alla stift är i
de kan vara i tre tillstånd (ingång - inaktiverad - utgång) och elektriskt
skidor är CMOS-strukturer (d.v.s. det finns symmetri i utgången
signaler och högt motstånd för ingång). I allmänhet är detta betydande
bekvämare än hamnar X 51 (bi-stabil och TTL-kompatibel) och föreslår bättre
bullerimmunitet (åtminstone från störningar på markbussen).
Efter att ha sammanfattat åsikter från olika källor och baserat på min egen erfarenhet,
författaren kom till ungefär följande indelning av tillämpningsområdena för de tre mest
vanliga familjer av kontrollanter.

Klassiska arkitekturkontroller X 51 (familjens första mikrokretsar
8051 släpptes i början av 1980-talet) är bäst för allmänt
studera ämnet. Observera att förutom Atmel, X 51 kompatibla produkter du-
ett dussin fler företag lanserar, inklusive sådana jättar som Philips och
Siemens, det finns också inhemska analoger (serier 1816, 1830, etc.), vilket gör detta
arkitektur är den mest universella.

AVR-familjen rekommenderas för nybörjare som utövar elektronik,
på grund av enhetens enkelhet och mångsidighet, kontinuiteten i strukturen för
olika typer av styrenheter, enkelhet i kretsdesign och programmering
(i det här fallet betyder "programmering" processen att spela in ett program
gram per chip).

Microchip PICs är idealiska för att designa enkla enheter.
svärmar, särskilt de som är avsedda för replikering.

Denna klassificering är till stor del subjektiv, och författaren kommer inte att bestrida andra
synvinkel: olika familjer av parlamentsledamöter kommer gradvis närmare i parametrar,
bli helt utbytbara och, som i all modern elektrisk
Nick, valet av en eller annan familj har ofta en "religiös" karaktär.
Dessutom är de tre nämnda familjerna till MK bara de vanligaste
bland universella styrenheter, men långt ifrån de mest populära i allmänhet. Allmän
antalet befintliga familjer av mikrokontroller uppskattas till ca.
Faktiskt fler än 100, med fler och fler som dyker upp varje år. Var och en av
dessa familjer kan omfatta dussintals olika modeller. Samtidigt första plats
bland tillverkare av 8-bitars MKs tillhör traditionellt Motorola,
främst på grund av kontroller för mobila enheter. Microchip företag

Introduktion

Med sin PIC-familj ligger den på tredje plats och Atmel är bara sjätte. Vart i,
Förutom 8-bitars AVR MCU, producerar Atmel flera fler typer av MCU,
som inte bara inkluderar de nämnda efterföljarna till 8051, utan även ARM-
processorer och specialiserade mikrokontroller för olika applikationer. Ändå
den här formella statistiken betyder ingenting än – till exempel bland MK:er med inbyggd
Atmels flashminne äger redan en tredjedel av den globala marknaden.
Åren 2002–2003 producerades 3,2 miljarder mikrocontainrar årligen i världen.
trollare. Observera att produktionsvolymen för PC-processorer kan uppskattas till
200 miljoner enheter per år, dvs det är bara cirka 6% av marknaden (i finansiella termer)
Generellt sett är förhållandet dock annorlunda, eftersom det typiska priset för en vanlig MK
är 2–5 dollar, och en PC-processor är minst en storleksordning högre, och
ibland når hundratals dollar). Därför skulle det inte vara en överdrift att säga
att specialiteten hos en elektronikingenjör specialiserad på mikro-
kontroller, är inte mindre viktig och knapphändig än en datorprogrammerare -
systemingenjör eller skapare av anpassade applikationer.

Den här boken vänder sig till den läsare som vill studera strukturen och kretsdesignen
specialfunktioner hos AVR MK och lär dig hur du använder deras huvudfunktioner korrekt
möjligheter. Därför begränsar författaren sig till assemblerspråk (läs mer fråga
Vi kommer att titta på att välja en programmeringsmiljö i Kapitel 5). Tyngdpunkten i boken är
att ge läsaren praktiska råd, att beskriva färdiga algoritmer för
typiska uppgifter som uppstår för utvecklare vid implementering av vissa
MK-funktioner. Författaren granskar tillsammans med läsarna i detalj ett antal frågor som
ry går vanligtvis utanför räckvidden för MK-programmeringsmanualer: arbeta med efter-
praktiska gränssnitt, aritmetiska operationer, gränssnitt mot PC, praktiskt
teknisk implementering av energisparlägen.
Samtidigt ville författaren inte analysera i detalj absolut allt möjligt -
STI MK AVR: inte ens några få volymer skulle räcka för detta. Vi tvingas gå runt
frågor som felsökning och programmering med JTAG-gränssnittet är lovande
du som upptäcker styrenheternas självprogrammering, bara slentrianmässigt
Vi ser fram emot det mest intressanta problemet med ljudsyntes och andra tillämpningar av PWM-lägen
timers.
I den här boken är de flesta exemplen fokuserade på användningen av moll
(med en minneskapacitet på 8 MB) modeller av underfamiljen Mega, eftersom de är de flesta
Mer mångsidig och lämplig för ett brett spektrum av uppgifter utan onödig komplexitet
schema. I enklare fall fokuserade författaren på det mest universella
från de yngre ATtiny2313-modellerna (om dess kompatibilitet med den "klassiska" versionen
AT90S2313 cm. sektion Kapitel "Räknarprogram med avbrott".
du 5
). De flesta av de givna exemplen kan göras med praktiskt taget inga modifieringar.
anpassad till andra AVR-modeller med lämplig konfiguration
tion.

DEL

Allmänna principer för enheten

och hur Atmel AVR fungerar

Kapitel 1. Recension av Atmel AVR-mikrokontroller

Kapitel 2. Allmän struktur, minnesorganisation,

klockning, återställning

Kapitel 3. Introduktion till kringutrustning

Kapitel 4. Avbrott och energisparlägen

K H A P T E R

Mikrokontroller recension
Atmel AVR

Atmel AVR är en familj av mångsidiga 8-bitars mikrokon-
trollare baserade på en gemensam kärna med olika inbyggda kringutrustning
svärmar. Funktionerna hos AVR MK låter dig lösa många typiska problem,
uppstår inför utvecklare av radioelektronisk utrustning.
Funktioner hos Atmel AVR-mikrokontroller.

Prestanda är cirka 1 MIPS/MHz. MIPS (miljoner instruktioner per
För det andra, miljoner kommandon per sekund) är ett av de äldsta och på många sätt
dålig egenskap hos processorprestanda, eftersom instruktionsuppsättningar
för olika processorer är olika, och följaktligen samma antal
instruktioner om olika system ger olika användbara resultat. Ändå
för enkla 8-bitars datorsystem som inte innehåller instruktioner, drift
hantera stora tal, flyttal och matriser
data är detta en bra indikator för att jämföra deras prestanda. Beräkna
Prestandakärnan i AVR på ett antal uppgifter överstiger 16 gånger
in-line 80286-processor.

Avancerad RISC-arkitektur. RISC (Reducerad) koncept
Instruction Set Computing, beräkningar med en reducerad uppsättning instruktioner) är att föredra
kräver närvaron av en uppsättning kommandon som består av ett minimum av kompakt och snabb
exekvera instruktioner; samtidigt så krångligare operationer som
flyttalsberäkningar eller multi-bitars aritmetik
i reella tal är det tänkt att det implementeras på subrutinnivå. Begrepp
RISC förenklar kärnstrukturen (en typisk AVR-kärna innehåller endast 32 tusen enheter).
transistorer, i motsats till tiotals miljoner i PC-processorer) och accelererade
demonstrerar dess funktion: en typisk instruktion exekveras i en klockcykel (förutom kommandon
programförgrening, minnesåtkomst och några andra som arbetar med
långa data). AVR har en enkel tvåstegskon-
Weir, när ett kommando exekveras i en klockcykel medan nästa hämtas.
Till skillnad från Intels arkitekturer har den "klassiska" AVR inte hårdvarumultiplikator
division/division, däremot innehåller underfamiljen Mega multiplikationsoperationer.

Separata kommando- och dataminnesbussar. AVR (som de flesta andra
mikrokontroller) har den sk. Harvard arkitektur, där minnesområden