AVR Assembler Tutorial 7 (9 / 12 stap)

Stap 9: Code en video voor versie 1

Ik heb mijn code voor deze eerste versie van het toetsenbord stuurprogramma bijgevoegd. In deze moet u druk op de toets en vervolgens op de knop om de ADC om te lezen van de input van het toetsenbord. Wat we liever hebt is geen knop, maar in plaats daarvan het signaal te doen de conversie komt uit de ToetsIndrukken (KeyPress) zelf.

Oefening 3: Verzamelen en uploaden van deze code en probeer het. Het is wellicht om te veranderen de verschillende conversie drempels overeenstemmen met uw ToetsIndrukken (KeyPress) spanningen, aangezien ze waarschijnlijk van de mijne verschillen. Wat gebeurt er als u probeert te gebruiken een input van het toetsenbord zowel voor de externe interrupt pin in plaats van via een knop voor de ADC0?

Ik zal ook een video van de werking van deze eerste versie van onze chauffeur ToetsIndrukken (KeyPress) hechten.

U zult opmerken dat in mijn code er een sectie voor het initialiseren van de Stack Pointer. Er zijn verschillende registers die we willen kunnen push en pop van de stack wanneer we zijn manipuleren van variabelen en wat niet en er zijn ook registers die we wilt opslaan en later herstellen. SREG is bijvoorbeeld een register dat niet over interrupts, is behouden, zodat de verschillende vlaggen die ingesteld en uitgeschakeld als gevolg van de operaties kunnen worden gewijzigd als er een interrupt optreedt in het midden van iets. Dus is het best als u SREG op de stack aan het begin van een interrupt handler duwen en vervolgens pop uit opnieuw aan het einde van de interrupt handler. Ik heb het geplaatst in de code om te laten zien hoe het wordt geïnitialiseerd en te anticiperen op hoe zullen we het later maar aangezien we niet schelen wat gebeurt er met SREG tijdens interrupts in onze code dat ik niet de stack hiervoor gebruiken.

Ook opmerken dat ik gebruikt de schuifbewerking naar heb verschillende stukjes instellen in registers bij het initialiseren. Bijvoorbeeld in de regel:

 ldi temp,(1<<ISC01)|(1<<ISC00) ; comment to fix Instructables formating issues: >>>> sts EICRA,temp 

De "<<" opdracht in de eerste regel van de bovenstaande code is een schuifbewerking. In wezen duurt het binaire getal 1, die is 0b00000001 en verschuivingen die het achtergelaten door het bedrag van het nummer ISC01. Dit is het standpunt van de bit met de naam ISC01 in het EICRA-register. Aangezien ISC01 is beetje 1, de nummer 1 is verschoven naar de linkerpositie 1 tot 0b00000010. Ook is de tweede, ISC00, bit 0 van EICRA en de verschuiving van de nummer 1 is dus nul posities naar links. Als blik nemen een andere kijk op het m328Pdef.inc-bestand dat u hebt gedownload in de eerste tutorial en zijn geweest using evrr sinds, zult u zien dat het is gewoon een lange lijst van de verklaringen van de ".equ". Vindt u dat ISC01 gelijk aan 1 is. De assembler vervangt elk exemplaar van het door 1 voordat zelfs te monteren om het even wat. Ze zijn gewoon namen voor register bits om te helpen ons mensen lezen en schrijven van de code. Nu, de verticale lijn tussen de bovenstaande twee shift-operaties is een logische "of" operatie. Hier is de formule:

0b00000010 | 0b00000001 = 0b00000011

en dit is wat we laden (met behulp van "ldi") in de temp. De reden mensen gebruiken deze methode kunt u de waarden in een register laden is dat het maakt het mogelijk om de naam van de bits te gebruiken in plaats van gewoon een nummer en dit de code maakt is veel gemakkelijker te lezen.

Er zijn ook twee andere technieken die we hebben gebruikt. We gebruiken de instructies "ori" en "andi". Deze laten instellen en schakelt u bits respectievelijk zonder wisseling ieder van naar de andere bits in een register. Bijvoorbeeld, wanneer ik gebruikte

 ori temp,(1<ADC0D) ; comment to fix formating: > 

deze "of" s temp met 0b00000001 die zet een 1 in de nulde bit en laat de rest ongewijzigd. Ook wanneer we schreven

 andi temp,0b11111110 

Dit verandert de nulde beetje temp op een 0 en al de rest die ongewijzigd laat.

Oefening 4: U moet de code doorlopen en zorg ervoor dat u begrijpt elke regel. Kan je het interessant om te vinden van betere methoden om dingen te doen en een beter programma te schrijven. Er zijn honderd manieren om code dingen en ik ben vrij zeker vindt u een veel betere manier dan de mijne. U kunt ook vinden (hemel verhoede!) fouten en omissies. In dat geval zou ik zeker willen horen over hen, zodat ze kunnen worden hersteld.

Oke, nu laten we zien als we van die overbodig knop ontdoen kunnen...

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 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
AVR Assembler Tutorial 3

AVR Assembler Tutorial 3

Welkom op tutorial nummer 3!Voordat we beginnen wil ik een filosofische opmerking maken. Wees niet bang om te experimenteren met de circuits en de code die we proberen op te in deze tutorials bouwen. Draden rond wijzigen, nieuwe onderdelen toe te voe
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