AVR Assembler Tutorial 1 (4 / 5 steg)

Steg 4: Hello.asm rad-för-rad

För att avsluta denna inledande handledning kommer vi gå igenom det hello.asm programmet rad-för-rad att se hur det fungerar.

; hello.asm
; vänder på en LED som är ansluten till PB5 (digital ut 13)

Allt efter ett semikolon ignoreras av assembler och därmed dessa två första raderna är helt enkelt "kommentarer" förklarar vad programmet gör.

.include ". / m328Pdef.inc"

Den här raden instruerar assembler ska omfatta filen m328Pdef.inc som du hämtat. Du kanske vill sätta detta i en katalog av liknande filer och sedan ändra raden ovan till peka till den där.

LDI r16, 0b00100000

LDI står för "last omedelbar" och berättar assembler att ta ett fungerande register, r16 i detta fall, och läsa in ett binärt tal till det, 0b00100000 i detta fall. 0b framme säger att vårt nummer är i binärt. Om vi ville kunde vi ha valt en annan bas, som hexadecimalt. I så fall hade vårt nummer 0x20 som är hexadecimalt för 0b00100000. Eller vi kunde ha använt 32 som är basen 10 decimal för samma nummer.

Övning 1: Prova att ändra numret på raden ovanför till hexadecimalt och sedan till decimal i koden och kontrollera att det fortfarande fungerar i varje fall.

Med hjälp av binär är enklaste men på grund av den sätt hamnen och register arbete. Vi kommer att diskutera hamnarna och register över atmega328p i mer detalj i framtiden tutorials men för nu ska jag bara säga att vi använder r16 så, vår "arbetande register" som vi bara kommer att använda den som en variabel som vi lagrar numrerar i. Ett "register" är en uppsättning av 8 bitar. Vilket betyder 8 ställen som kan vara 0 eller 1 ("off" eller "på"). När vi läser in den binära tal 0b00100000 i registret med hjälp av raden ovan har vi helt enkelt sparat numret i registret r16.

ut DDRB, r16

Den här raden instruerar kompilatorn att kopiera innehållet i registret r16 in i DDRB-registret. DDRB står för "Data riktning registrera B" och sätter upp "pins" på PortB. På pinut kartan för 328p kan du se att det finns 8 stift märkt PB0, PB1,..., PB7. Dessa pins föreställa "bitar" av "PortB" och när vi läser in det binära talet 00100000 i DDRB register vi säger att vi vill ha PB0, PB1, PB2, PB3, PB4, PB6 och PB7 uppsättning som INPUT stiften eftersom de har 0's i dem används, och PB5 som en utgångsstiftet eftersom vi sätta en 1 på den platsen.

ut PortB, r16

Vi kan nu sätta spänningar på dem nu när vi har fasta riktningarna av stiften. Raden ovan kopierar samma binära nummer från våra lagring register r16 till PortB. Detta ställer alla stift till 0 volt utom pin PB5 till hög som är 5 volt.

Övning 2: Ta en digitala multimetern, plugg svart bly i marken (GND) och sedan testas varje stift PB0 genom PB7 med röda bly. Är spänningar på varje stift exakt de som motsvarar att sätta 0b00100000 i PortB? Om det finns några som inte finns, varför tror du att det är? (se pin karta)

Start:
rjmp Start

Slutligen är den första raden ovan en "label" som etiketter en plats i koden. I detta fall märkning som plats som "Start". Den andra raden säger "relativa hoppa på etiketten Start." Resultatet är att datorn är placerad i en oändlig loop som bara håller cykling tillbaka till Start. Vi behöver detta eftersom vi inte kan ha programmet bara avsluta, eller faller från en klippa, har programmet att bara hålla igång för att ljuset bo upplysta.

Övning 3: Ta bort ovanstående två rader från din kod så att programmet faller från en klippa. Vad händer? Du borde se något som ser ut som traditionella "blink" programmet används av Arduino som deras "hello world!". Varför tror du det fungerar detta sätt? (Tror om vad måste hända när programmet faller från en klippa...)

Se Steg
Relaterade Ämnen

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 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 Ö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 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 Ö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 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 Ö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ä...

AVR Assembler handledning 3

Välkommen till tutorial nummer 3!Innan vi börjar vill jag göra en filosofisk punkt. Inte vara rädd för att experimentera med kretsar och den kod som vi konstruerar i dessa tutorials. Ändra sladdar runt, lägga till nya komponenter, ta komponenter ut,...

Hur du kommer igång med Eclipse och AVR

programmering AVRs är kul men ibland utvecklingsmiljöer tillverkare göra kod underhåll en syssla. Om du letar efter en gratis, cross-plattform, hög kvalitet programvara för programmering AVRs Eclipse är ett bra val.Flytta till en integrerad utvecklin...

Godtycklig vågform generator, för ~ 20$

en godtycklig vågform generator (AWG) är en användbar men ofta dyrt testutrustning (ebay det för skrattar). Används för att bestämma komponent frekvensomfång, generera bäraren signalerar, som en LCR-mätare om du har ett scope, tune resonant går runt,...

Programmerbar LED

inspirerad av olika LED Throwies, blinkande lysdioder och liknande instructables jag ville göra min version av en LED som kontrolleras av en mikrokontroller.Tanken är att göra LED blinkar sekvensen kan programmeras om. Denna omprogrammering kan göras...

Hacka en brödrost ugn för Reflow lödning

som jag får mer allvarliga till min elektronik hobby, jag måste arbeta med mer SMD komponenter. Vissa komponentpaket är mycket svårt eller omöjligt att löda med en traditionell lödkolv. För att lösa detta problem, beslöt jag att hacka en brödrost ugn...

Musik spelas väckarklocka

Detta Instructable kommer att utforma en musikspelare från använder olika byggstenar. Ni förstår kommunikationen mellan mikrokontroller, minne, dator, LCD-display, RTC, IR-fjärr och musik fil dekodern. Jag ska försöka mitt bästa för att lära dig på e...

Star Trek dörrklockan hacka

Jag har alltid varit ett fan av Star Treks och som sådan jag var mycket glada när min rumskompis tog hem en ursprungliga serien Star Trek comm stilpanelen. Jag hade aldrig sett en av dessa men en snabb sökning tog oss till Thinkgeek webbplats där pan...

LED Pocket Watch

detta är ett LED fickur. Den har 12 lysdioder visar timme, 60 lysdioder att visa i minuten och 60 lysdioder att visa andra. Lysdioderna är ordnade i tre ringar. Det finns en knapp på för att aktivera fickuret och en knapp på baksidan för att ändra in...

Dörr aktiverad LED belysning med hjälp av Hall effekt sensorer

jag har varit mening att göra något häftigt för mitt studentrum denna kommande termin och beslutade att några anpassade garderob lampor skulle se bra ut. I detta Instructable, ska jag visa dig hur man gör några fina LED-lampor som tänds automatiskt m...

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...