AVR Assembler handledning 3 (4 / 9 steg)

Steg 4: .org assembler direktiven

Vi vet redan vad de .nolist, .lista, .include och .def assembler direktiv göra från vår tidigare tutorials, så låt oss först ta en titt på de 4 rader kod som kommer efter det:

.org 0x0000
JMP Reset
.org 0x0020
JMP overflow_handler

.Org uttalandet talar assembler var i "programminne" att sätta nästa uttalande. Som programmet körs, innehåller "Program disk" (förkortat som PC) adressen till den aktuella raden som körs. I det här fallet när PC är 0x0000 det visas kommandot "jmp Reset" som bor i den minnesplatsen. Anledningen till att vi vill sätta jmp Reset i detta läge är eftersom när programmet börjar, eller chip återställs, datorn börjar köra kod på denna plats. Så, som vi kan se, vi har bara sagt det att omedelbart "hoppa" till avsnittet heter "Reset". Varför har vi gjort det? Det innebär att de två sista raderna ovan är bara att vara hoppat över! Varför?

Jo är det där det blir intressant. Du kommer nu att behöva öppna upp en pdf-läsare med full ATmega328p databladet som jag pekade på den första sidan i denna handledning (det är därför det är punkt 4 i den "måste" avsnitt). Om skärmen är för liten, eller du har alldeles för många fönster öppna redan (som är fallet med mig) kan du göra vad jag gör och lägga den på en Ereader, eller din Android-telefon. Du kommer att använda det hela tiden om du planerar att skriva kod. Häftiga är att alla microcontollers är organiserade i mycket liknande sätt och så när du vänjer sig läsa datablad och kodning från dem du kommer att finna det nästan trivialt att göra samma sak för en annan mikrokontroller. Så vi faktiskt lära sig hur man använder alla mikrokontroller i en känsla och inte bara atmega328p.

Okej, vända sig till sidan 18 i databladet och ta en titt på figur 8-2.

Detta är hur programminnet i mikrokontroller ställs in. Du kan se att det börjar med adress 0x0000 och delas upp i två sektioner; en ansökan flash och ett boot flash avsnitt. Om du kortfattat sida 277 tabell visas 27-14 att avsnittet flash tar upp platser från 0x0000 till 0x37FF och boot flash avsnittet tar upp de återstående platserna från 0x3800 till 0x3FFF.

Övning 1: hur många platser finns det i programminnet? Dvs. konvertera 3FFF till decimal och lägga till 1 eftersom vi börjar räkna på 0. Eftersom varje minnesplats är 16 bitar (eller 2 byte) bred vad är det totala antalet byte minne? Nu konvertera detta till kilobyte, att komma ihåg att det finns 2 ^ 10 = 1024 byte i kilobyte. Avsnittet boot flash går från 0x3800 till 0x37FF, hur många kilobyte är detta? Hur många kilobyte minne kvar för oss att använda för att lagra vårt program? Med andra ord, hur stor kan vårt program vara? Slutligen, hur många rader kod kan vi ha?

Okej, nu när vi vet allt om organisationen av flash programminnet, låt oss fortsätta med vår diskussion om .org uttalanden. Vi ser att den första minnesplatsen 0x0000 innehåller vår instruktion att hoppa till vår sektion vi märkt Reset. Nu ser vi vad uttrycket ".org 0x0020" gör. Det säger att vi vill ha anvisningen på nästa rad att placeras på minnesplats 0x0020. Anvisningen har vi placerat finns det en hoppa till ett avsnitt i vår kod som vi har märkt "overflow_handler"... nu varför i helsike skulle vi kräva att detta hoppa ska placeras i minnesplatsen 0x0020? Kan vi slå till sidan 65 i databladet och ta en titt på tabellen 12-6.

Tabell 12-6 är en tabell med "Återställa och avbryta vektorer" och visar exakt där PC kommer att gå när den tar emot ett "avbrott". Till exempel, om du tittar på vektor nummer 1. "Källa" av avbrottet är "RESET" som definieras som "yttre Pin, Power on Reset, Brown-out Reset och vakthund system reset" betyder, om någon av dessa saker hända med våra mikrokontroller, kommer att PC börja köra våra program vid program-minnesplatsen 0x0000. Vad händer med vårt .org direktiv då? Tja, vi placerade ett kommando på minnesplats 0x0020 och om du tittar ner i tabellen ser du att om en Timer/Counter0 overflow händer (kommer från TIMER0 OVF) kommer den att köra oavsett är på plats 0x0020. Så när det händer, PC kommer att hoppa till platsen märkt vi "overflow_handler". Cool rätt? Du kommer att se i en minut varför vi gjorde detta, men först låt oss avsluta detta steg av handledningen med parentes.

Om vi vill göra vår kod mer snyggt och prydligt bör vi verkligen ersätta 4 rader vi diskuterar för närvarande med följande (se sidan 66):

.org 0x0000
rjmp Reset; PC = 0X0000
Reti; PC = 0X0002
Reti; PC = 0X0004
Reti; PC = 0X0006
Reti; PC = 0X0008
Reti; PC = 0X000A
...
Reti; PC = 0X001E
JMP overflow_handler: PC = 0x0020
Reti: PC = 0x0022
...
Reti; PC = 0X0030
Reti; PC = 0X0032

Så att om ett visst avbrott inträffar kommer det att bara "reti" händer vilket betyder "tillbaka från avbrott" och inget annat. Men om vi aldrig "Aktivera" dessa olika avbrott, då de inte kommer att användas och vi kan sätta programkod i dessa fläckar. I vårt nuvarande "blink.asm" program endast vi aktiverar timer0 overflow avbrottet (och naturligtvis reset avbrottet som är alltid aktiverad) och så vi kommer inte att bry sig med andra.

Hur vi "aktiverar" timer0 overflow avbrottet då? ... som är föremål för vårt nästa steg i den här guiden.

Se Steg
Relaterade Ämnen

AVR Assembler handledning 11

Välkommen till handledning 11!I den här korta guiden kommer vi slutligen att bygga den första delen av vårt sista projekt.Det första du bör göra är att gå till det allra sista steget i denna tutorial och titta på videon. Sedan komma tillbaka hit. [pa...

AVR Assembler handledning 6

Välkommen till Tutorial 6!Dagens handledning kommer att vara kort där vi kommer att utveckla en enkel metod att kommunicera data mellan en atmega328p och en med två portar ansluta dem. Vi kommer ta sedan tärningarna rullen från läraren 4 och registre...

AVR Assembler handledning 8

Välkommen till Tutorial 8!I denna kort tutorial ska vi ta lite av en skenmanöver från att införa nya aspekter av assembler programmering att visa hur man flytta våra prototyper komponenter till ett separat "tryckta" kretskort. Anledningen är att...

AVR Assembler handledning 10

Välkommen till handledning 10!Ledsen att det tog så lång tid för att få denna nästa avbetalning ut men detta är en ganska hektisk tid på året. I alla fall, är här det!Vi har kommit långt och du förmodligen redan är kompetenta nog att skriva många int...

AVR Assembler handledning 5

Idag kommer vi att ta en närmare titt på de olika minnesplatserna i Atmega328p mikrokontroller och se om vi bättre kan förstå hur saker lagras, där de lagras och hur pekare och uppslagstabeller fungerar.Handledningen kommer att delas upp i två delar....

AVR Assembler Tutorial 1

Jag har beslutat att skriva en serie tutorials om hur man skriver assembler program för den Atmega328p som är mikrokontroller används i Arduino. Om människor förblir intresserad fortsätter jag att lägga ut en en vecka eller så tills jag får slut på l...

AVR Assembler Övningsexempel 7

Välkommen till Övningsexempel 7!Idag vi första visar hur du rensar en knappsats och sedan visar hur du använder Analog ingång hamnarna för att kommunicera med knappsatsen.Vi kommer att göra med avbrott och en enda tråd som indata. Vi kommer tråd knap...

AVR Assembler Övningsexempel 9

Välkommen till Övningsexempel 9.Idag kommer vi att visa hur du kan styra både 7-segment display och en 4-siffrig display med våra ATmega328P och AVR assembler kod. I samband med detta får vi ta omvägar till hur du använder stacken för att minska anta...

AVR Assembler Tutorial 2

Denna handledning är en fortsättning på "AVR Assembler Tutorial 1"Om du inte har gått igenom Tutorial 1 bör du sluta nu och göra att man först.I den här guiden kommer vi fortsätta vår studie av assembler programmering av den atmega328p som använ...

AVR Assembler Övningsexempel 4

Välkommen till tutorial nummer 4!I den här guiden kommer vi att bygga en krets som kommer att simulera rullning av två tärningar. Sedan kommer vi först skriva en brute force-program som gör jobbet. Sedan kommer vi förenklar det programmet på olika sä...

En avancerad metod för Arduino & AVR programmering

Detta instructable är ett måste läsa för alla som är bekanta med core AVR chips och Arduino.Tja, mer konkret, när jag läste den instructable kommer du att kunna:1) vet väl skillnaden mellan AVR och Arduino.2) programmering Arduino med WinAVR & använd...

Utveckling styrelsen för Attiny84 mikrokontroller

Detta är en utveckling styrelse för Attiny84 mikrokontroller. Tha Attiny84 chip har 11 pins adresserbara med Arduino IDE, 8k flashminne för lagring av program och 512 byte ram tillgängligt för variablerna stack och program.En funktion av den Attiny84...

Hur man ladda program till en Arduino UNO från Atmel Studio 7

I denna korta Instructable kommer vi att lära sig att ladda ett program till en Arduino UNO ombord med Atmel Studio istället för Arduino IDE. Detta är användbart när du behöver utveckla ett program med fler advance funktioner eller på ett annat språk...

MRETV - Video, ljud och mycket mer från en standard Arduino!

MRETV - Video, ljud och mycket mer från en standard Arduino!Nu uppdaterad för Arduino 1.6.6 November 2015!Använd endast två resistorer och två dioder för att generera full skärm video. Text 47 x 29 8 x 8 tecken, dubbla vertikala upplösningen (47 x 57...

Älskling, jag krympte Arduino: flytta från Arduino till ATtiny och skriva din kod i ren AVR-C

Arduino är en stor hård- och mjukvaruplattform, men med alla dess funktioner är det också lite uppsvälld och ofta behöver du bara en liten del av alla funktioner. Projektet kräver ibland för att ha mindre och billigare enheter. Vad du behöver är ATti...

65xx teknik-församlingen språk programmering med W65C02SXB-handledning 1

Western Design Center (WDC) har beslutat att skriva en serie tutorials på hur du kommer igång med vår 65xx teknik och hur man skriver assembler program för 65xx familjen för ICs. Denna handledning kommer att baseras på använda det Standard W65C02 chi...

AVR fuse grunderna: kör en avr med en extern klocka

säkringar är bland de svåraste ämnen som jag stött på samtidigt lära sig om programmering microcontrollers. Även efter att söka och läsa flitigt, kunde jag fortfarande inte lyckas rensa mitt begrepp om dem. Men sedan jag började lära dem ta en i tage...

AVR programmering med Arduino, AVRdude och AVR-gcc

AVR är en gemensam, billig typ av mikro-controller som kan verka skrämmande att arbeta med, men oroa dig inte! När du har Ställ in grundläggande kunskap och kan de bli inte bara nyttigt, men viktigt att nya projektidéer som du drömmer upp!Denna handl...

Idiot's Guide till programmering AVR: s på de billiga (med Arduino IDE!)

Mikrokontroller är, utan tvekan, fantastiska små saker. De är mångsidiga, kraftfull och mycket små. Tyvärr, den sistnämnda drag också delas av både min plånbok och mina kunskaper i programmering. Min förståelse av C är dålig, och jag har knappt råd a...