AVR Assembler Tutorial 3 (4 / 9 stap)

Stap 4: .org assembler richtlijnen

We weten al wat de .nolist, .list, .include en .def assembler richtlijnen van onze vorige tutorials doen, dus laten we eerst eens een kijkje op de 4 lijnen van code die na die komen:

 .org 0x0000 jmp Reset .org 0x0020 jmp overflow_handler 

De verklaring van de .org vertelt de assembler waar in "Programmageheugen" om te zetten van de volgende instructie. Als uw programma wordt uitgevoerd, bevat de "Program Counter" (abreviated als PC) het adres van de huidige regel wordt uitgevoerd. Dus in dit geval wanneer de PC bij 0x0000 is het ziet de opdracht "jmp Reset" die woonachtig zijn in die locatie in het geheugen. De reden waarom we wil zetten jmp Reset in die locatie is omdat wanneer het programma begint, of de chip wordt teruggesteld, de PC start uitvoeren van code op deze plek. Dus, zoals we zien kunnen, we hebben net verteld om onmiddellijk "springen" naar de sectie met het label "Reset". Waarom hebben we dat doen? Dat betekent dat de laatste twee regels hierboven zijn gewoon worden overgeslagen! Waarom?

Nou, dat is waar de dingen interessant krijgen. Nu zult u moeten openstellen van een PDF-viewer met het volledige gegevensblad van ATmega328p die ik op de eerste pagina van deze tutorial aangewezen (dat is waarom het is punt 4 van de "u zal moeten" sectie). Als uw scherm te klein is, of hebt u manier teveel vensters geopend al (zoals het geval met mij) zou kunnen je doen wat ik doe, en zet het op een Ereader, of uw Androïde telefoon. U gebruikt het hele tijd als u van plan over het schrijven assemblagecode. Het koele ding is dat alle microcontollers in zeer vergelijkbare wijze en zo worden georganiseerd zodra je wennen aan het lezen van gegevensbladen en codering van hen u het bijna triviaal vindt te doen hetzelfde voor een verschillende microcontroller. Zo leren we eigenlijk het gebruik van alle microcontrollers in een zin en niet alleen de atmega328p.

Oke, ga naar pagina 18 in het gegevensblad en neem een kijkje op figuur 8-2.

Dit is hoe het programmageheugen in de microcontroller is ingesteld. U kunt zien dat het begint met adres 0x0000 en is onderverdeeld in twee secties; een toepassing flash en een boot flash sectie. Als u kort ingaan op 277 tabel pagina 27-14 u zult zien dat de toepassing flash sectie de locaties van 0x0000 tot 0x37FF neemt en de flash sectie van boot de resterende locaties van 0x3800 naar 0x3FFF neemt.

Oefening 1: hoeveel locaties zijn er in het programmageheugen? Dwz 3FFF converteren naar een decimaal getal en er 1 bij optellen omdat we beginnen met tellen bij 0. Aangezien elke locatie in het geheugen is 16 bits (of 2 bytes) wijd wat is het totale aantal bytes van het geheugen? Nu dit omzetten in kilobytes, herinneren zijn er 2 ^ 10 = 1024 bytes in een kilobyte. De flash sectie van de boot gaat van 0x3800 naar 0x37FF, hoeveel kilobytes is dit? Hoeveel kilobytes geheugen blijven voor ons om te gebruiken voor het opslaan van ons programma? Met andere woorden, hoe groot onze programma kunnen zijn? Tot slot, hoe veel regels code kunnen we hebben?

Oke, nu we weten alles over de organisatie van het programma flash geheugen, laten we blijven met onze bespreking van de verklaringen van de .org. We zien dat de eerste geheugenlocatie 0x0000 bevat onze instructie om te springen naar onze sectie met we het label Reset. Nu zien we wat de verklaring van de ".org 0x0020" doet. Het zegt dat we willen de instructie op de volgende regel worden geplaatst op de locatie in het geheugen 0x0020. De instructie die we hebben geplaatst is er een sprong naar een sectie in onze code die we hebben met het label "overflow_handler"... nu waarom de heck wij eisen zou dat deze sprong aan geheugenlocatie 0x0020 worden geplaatst? Als u wilt weten, we Ga naar pagina 65 in het gegevensblad en neem een kijkje op tabel 12-6.

Tabel 12-6 is een tabel van "Reset en Interrupt vectoren," en het toont precies waar de PC zal gaan wanneer zij ontvangt een "interrupt". Bijvoorbeeld, als je kijkt naar Vector nummer 1. De "bron" van de interrupt is "RESET" die is gedefinieerd als "externe Pin, Power-on Reset, Brown-out Reset en Watchdog systeem reset" betekenis, als om het even welk van die dingen met onze microcontroller gebeuren, start de PC uitvoeren van ons programma op locatie in het geheugen programma 0x0000. Hoe zit het met onze .org richtlijn dan? Nou, we een opdracht geplaatst op locatie in het geheugen 0x0020 en als je op de tafel kijkt ziet u dat als een Timer/Counter0 overflow gebeurt (afkomstig uit TIMER0 OVF) het zal uitvoeren wat is op locatie 0x0020. Dus wanneer dat gebeurt, de PC zal gaan naar de plek we met het label "overflow_handler". Cool toch? U zult zien in een minuut waarom we deden dit, maar eerst laten we eindigen deze stap van de tutorial met een terzijde.

Als we willen maken van onze code meer keurig en netjes we echt door de 4 lijnen die wij momenteel bespreken de volgende vervangen moeten (zie pagina 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 

Zodat als een bepaalde interrupt optreedt het zal gewoon "reti" wat betekent "terugkeer van interrupt" en niets anders gebeurt. Maar als we nooit "Enable" deze verschillende interrupts, dan zij niet zullen worden gebruikt en kunnen we programmacode in deze plekken. In onze huidige "blink.asm"-programma gaan we alleen om de timer0 overflow interrupt (en natuurlijk de reset-interrupt die altijd is ingeschakeld) en dus wij niet de moeite met de anderen.

Hoe we "Schakel" de timer0 overflow interrupt dan? ... dat is het onderwerp van onze volgende stap in deze tutorial.

Gerelateerde Artikelen

AVR Assembler Tutorial 2

AVR Assembler Tutorial 2

Deze tutorial is een voortzetting van het "AVR Assembler Tutorial 1"Als je niet hebt doorlopen Tutorial 1 moet je nu stoppen en dat men eerst doen.In deze tutorial zullen we onze studie van assembly language programmering van de atmega328p in de
AVR Assembler Tutorial 11

AVR Assembler Tutorial 11

Welkom bij Tutorial 11!In deze korte tutorial, zijn we eindelijk het eerste deel van onze laatste project bouwen.Het eerste wat dat u moet doen is gaat u naar de allerlaatste stap van deze tutorial en Bekijk de video. Dan kom hier terug. [onderbreken
AVR Assembler Tutorial 1

AVR Assembler Tutorial 1

Ik heb besloten om een serie tutorials over hoe te schrijven van assembler programma's voor de Atmega328p die het gebruikt in de Arduino microcontroller is schrijven. Als mensen geïnteresseerd blijven blijft ik stak een een week of zo totdat ik oprak
AVR Assembler Tutorial 6

AVR Assembler Tutorial 6

Welkom bij Tutorial 6!Today's tutorial zullen kort waar zullen we het ontwikkelen van een eenvoudige methode om gegevens tussen een atmega328p en een andere met twee poorten verbinden hen te delen. Wij zullen vervolgens nemen de dobbelstenen rol van
AVR Assembler Tutorial 8

AVR Assembler Tutorial 8

Welkom bij Tutorial 8!In deze korte tutorial gaan we een beetje een afleiding van de invoering van nieuwe aspecten van assembly language programmering te laten zien hoe onze prototyping componenten verplaatsen naar een aparte "gedrukt" printplaa
AVR Assembler Tutorial 9

AVR Assembler Tutorial 9

Welkom bij Tutorial 9.Vandaag zullen wij tonen hoe de controle van zowel een 7-segment display en een 4-cijferige weergave met behulp van onze ATmega328P en AVR assembler code. In de loop doen die we nemen van omleidingen moeten zal op how to use van
AVR Assembler Tutorial 7

AVR Assembler Tutorial 7

Welkom bij Tutorial 7!Vandaag gaan we naar eerste show hoe opruimen van een toetsenbord, en vervolgens laten zien hoe de analoge input poorten gebruiken om te communiceren met het toetsenblok.We zullen dit doen met behulp van interrupts en een enkele
AVR Assembler Tutorial 10

AVR Assembler Tutorial 10

Welkom bij Tutorial 10!Sorry dat het zo lang duurde om deze volgende aflevering eruit maar dit is een behoorlijk hectische tijd van het jaar. In ieder geval, is hier het!We hebben een lange weg afgelegd en u bent waarschijnlijk al bekwaam genoeg is o
AVR Assembler Tutorial 5

AVR Assembler Tutorial 5

Vandaag gaan we nemen een kijkje op de verschillende geheugenlocaties in de Atmega328p microcontroller en zien als we beter begrijpen kunnen hoe de dingen worden opgeslagen, waar ze worden opgeslagen en hoe de pointers en opzoektabellen werken.De tut
AVR Assembler Tutorial 4

AVR Assembler Tutorial 4

Welkom bij de handleiding voor nummer 4!In deze tutorial zullen we bouwen een circuit om te simuleren het rollen van twee dobbelstenen. Dan zullen we eerst een brute-force-programma welk doet naar de job schrijven. Dan zullen we dat programma op vers
Een geavanceerde benadering van programmering van Arduino & AVR

Een geavanceerde benadering van programmering van Arduino & AVR

Dit instructable is een must read voor iedereen die vertrouwd is met core AVR chips en Arduino.Nou, om meer specifieke, bij het lezen van de instructable, zal u zitten kundig voor:1) weten het juiste verschil tussen AVR en Arduino.2) programmering Ar
Programmeerbare LED

Programmeerbare LED

geïnspireerd door diverse LED Throwies, knipperende LEDs en soortgelijke instructables ik wilde doen van mijn versie van een LED aangestuurd door een microcontroller.Het idee is om de LED knipperende reeks Herprogrammeerbare. Deze herprogrammering ka
De generator van willekeurige golfvorm, voor ~ 20$

De generator van willekeurige golfvorm, voor ~ 20$

een willekeurige golfvorm generator (AWG) is een nuttige maar vaak duur stuk van testapparatuur (ebay voor lacht). Gebruiken om te bepalen component frequentiebereik, genereren van vervoerder signalen, als een LCR-meter als u een bereik, tune resonan
Star Trek deurbel Hack

Star Trek deurbel Hack

Ik heb altijd al een fan van de Star Treks en als zodanig ik was erg opgewonden toen mijn kamergenoot bracht het huis van een originele serie stijl Star Trek comm panel. Ik had nog nooit gezien een van deze, maar een snelle zoektocht nam ons mee naar