AVR Assembler Övningsexempel 7 (9 / 12 steg)

Steg 9: Kod och video för version 1

Jag har bifogat min kod för denna första version av drivrutinen för tangentbordet. Här måste du trycka på tangenten och sedan trycka på knappen för att orsaka ADC att läsa indata från knappsatsen. Vad vi vill hellre ha finns ingen knapp men istället signalen att göra konverteringen kommer från knapptryckning själv.

Övning 3: Montera och ladda upp här koden och prova. Du kan behöva ändra de olika konvertering tröskelvärdena för att motsvara dina knapptryckning spänningar eftersom de sannolikt skiljer sig från mina. Vad händer om du försöker använda en input från knappsatsen både för ADC0 och för den yttre mellanjobb stiftet i stället för genom en knapp?

Jag kommer också bifoga en video av driften av denna första version av våra knapptryckning förare.

Du kommer att märka att det finns en del initierar buntpekaren i min kod. Det finns olika register som vi kanske vill push och pop från stacken när vi manipulerar variabler och vad-inte och det finns också register som vi kanske vill spara och återställa senare. SREG är exempelvis ett register som inte bevaras över avbrott, så olika flaggor som ställs och rensat till följd av verksamheten kan ändras om ett avbrott inträffar mitt i något. Så är det bäst om du trycker SREG till stacken i början av en avbrottshanterare och pop sedan det igen i slutet av avbrottshanterare. Jag har placerat det i koden att visa hur det har initierats och att förutse hur vi kommer att behöva den senare men eftersom vi inte bryr oss vad händer med SREG under avbrott i vår kod jag inte använder stacken för detta.

Också att märka att jag har använt SKIFT driften för att anger olika bitar i register när initieras. Till exempel i raden:

LDI temp, (1 << ISC01) | (1 << ISC00); kommentar till fixa Instructables formatering frågor: >>>>
STS EICRA, temp

Den "<<" kommando i den första raden i koden ovan är en SKIFT operation. Det tar i huvudsak det binära talet 1, som är 0b00000001 och skiftar det lämnade mängd nummer ISC01. Detta är placera av den bit som heter ISC01 i registret EICRA. Eftersom ISC01 är lite 1, nummer 1 skiftas till vänster 1 positionen att bli 0b00000010. På samma sätt andra, ISC00, är lite 0 av EICRA och så förskjutningen av nummer 1 är noll positioner till vänster. Om utseende tar en annan titta på filen m328Pdef.inc som du hämtade i den första självstudiekursen och har använt evrr sedan, kommer du att se att det är bara en lång lista med ".equ" uttalanden. Du kommer att ISC01 är lika med 1. Assembler ersätter alla förekomster av det med 1 innan du ens börjar sätta ihop något. De är bara namn på registret bitar för att hjälpa oss människor Läs och skriva kod. Nu, den vertikala linjen mellan de två SKIFT verksamhet ovan är ett logiskt "eller" operation. Här är ekvationen:

0b00000010 | 0b00000001 = 0b00000011

och detta är vad vi är påfyllning (med "ldi") i temp. Orsaken människor använder denna metod för att läsa in värden i ett register är att det tillåter en att använda namnet på lite istället för att bara ett nummer och detta gör koden är mycket lättare att läsa.

Det finns också två andra tekniker vi har använt. Vi använder instruktioner "ori" och "andi". Dessa tillåter oss att ställa och respektive rensa bitar utan att ändra någon av de andra bitarna i ett register. T.ex. när jag använde

Ori temp,(1<ADC0D); kommentar till fixa formatering: >

denna "eller" s temp med 0b00000001 som sätter en 1 i den zeroth lite och lämnar resten oförändrad. Också när vi skrev

Andi temp, 0b11111110

Detta ändrar den zeroth lite Temp till en 0 och lämnar resten oförändrad.

Övning 4: du ska gå igenom koden och se till att du förstår varje rad. Du kan finna det intressant att hitta bättre metoder för att göra saker och skriva ett bättre program. Det finns hundra sätt att koden saker och jag är ganska övertygad om du hittar ett mycket bättre sätt än min. Du kan också hitta (Gud förbjude!) fel och utelämnanden. I så fall vill jag visst höra om dem så att de kan fastställas.

Okej, nu ska vi se om vi kan bli av att överflödiga knappen...

Se Steg
Relaterade Ämnen

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

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

Enklaste AVR parallell port programmerare

Hej, är detta min första instructables, som handlar om avr programmerare. Detta är den enklaste krets med vilka AVR (Atmega serie, Attiny serien, AT90S serien) microcontrollers kan programmeras. Det finns en hel del programmerare, men detta är enkel...

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

Mitt svar på WS2811 med en AVR sak

första off - vill sägaBra om du Alan Burlison.Detta är inte menat att uppsamlare du på något sätt. Din kod gjorde det det måste göra. Stor framgång. Min första reaktion i en forum kommentar var faktiskt riktat mot folk som när det gäller icke-arbetan...

Fattig mans AVR speldosa

detta är en enkel AVR speldosa, kostar ca 10$ för att bygga.DISCLAIMER: Detta projekt är vad man skulle kalla en SMOP, "en enkel fråga om programmering". Det innebär att det är av trivial komplexitet men långa... så om du kan tolerera tristess i...

Montering av Dragon Rider 500 för användning med AVR Dragon

inte länge sedan företaget Atmel kom ut med ett bra verktyg för användning med AVR microcontrollers kallas AVR Dragon. Denna lilla USB-enhet ger proffs och amatörer både förmågan att använda: I System programmering (ISP), JTAG, felsöka tråd och hög s...

16-nyckel knappsatsen avkodning med en AVR MCU

detta instructable visar dig hur gränssnittet en 16-nyckel knappsats till din AVR microcontroller och läsa nyckeln när en tangent är nedtryckt. Jag ska presentera knappsatsen först, sedan 74HC922 16-nyckel dekodern IC som pin-saving mekanism, sedan s...