AVR Assembler Tutorial 7 (7 / 12 stap)

Stap 7: De interrupt handler schrijven

In de laatste stap zagen we dat we het zo instellen hebben dat een stijgende rand gedetecteerd op PD2 leiden een analoog naar digitaal conversie op PC0 tot zal en als deze conversie voltooid is een ADC conversie voltooid interrupt werpen zal. Nu willen we iets met deze interrupt te doen.

Als u tabel 12-6 op pagina 65 ziet u een lijst van mogelijke interrupts bekijkt. We hebben al gezien de RESET-interrupt op adres 0x0000 en de Timer/Counter0 Overflow interrupt op adres 0x0020 in vorige Tutorials. Nu willen we kijken naar is de ADC-interrupt die we in de tabel zien op adres 0x002A. Zo aan het begin van onze vergadering taalcode zullen we een regel die luidt:

 .org 0x002Arjmp ADC_int 

die springt naar onze interrupt handler label ADC_int wanneer de ADC een conversie is voltooid. Dus hoe moeten we onze interrupt handler schrijven?

De manier waarop de ADC werkt is door het uitvoeren van de volgende berekening:

 ADC = Vin x 1024 / Vref 

Dus laten we zien wat er gebeurt als ik druk op de "Nummerherhaling" knop op het toetsenbord. In dat geval verandert de spanning op PC0 naar een waarde, zeggen 1.52V, en aangezien Vref op 5V zullen we:

 ADC = (1.52V) x 1024 / 5V = 311.296 

en zo zou worden weergegeven als een 311. Als we wilden dit terug omzetten in een spanning die wij alleen maar zou keren de berekening. We niet nodig hebben om dit te doen maar omdat wij zijn niet geinteresseerd in de werkelijke spanningen alleen in onderscheid te maken tussen hen.

Als de conversie is voltooid, wordt het resultaat wordt opgeslagen in een 10-bits nummer in ADCH en ADCL registers geplaatst en we hebben veroorzaakt te worden "links aangepast" wat betekent dat de 10-bits bij beetje 7 ADCH en ga beginnen naar beneden naar bit 6 van ADCL (er zijn 16-bits in totaal in deze twee registers en we gebruiken alleen 10 van hen dat wil zeggen 1024 kanalen). We hadden het resultaat "goed aangepast" als we wilden door te schakelen van de ADLAR bit in het ADMUX-register. De reden dat we kiezen links is aangepast omdat onze signalen ver genoeg uit elkaar zijn dat de laatste twee cijfers van het kanaalnummer niet relevant en is waarschijnlijk enkel lawaai, zodat we de toetsaanslagen die met behulp van alleen de bovenste 8 cijfers zal onderscheiden, met andere woorden, zullen we alleen moeten kijken naar ADCH om erachter te komen welke knop werd ingedrukt.

Dus onze interrupt handler moet gewoon lees het nummer uit het ADCH-register, zet dat nummer in de waarde van een toetsenbord, en vervolgens naar onze register analyzer LED's die waarde verzenden, zodat we kunnen verifiëren dat het duwen van een "9" zeggen, zal leiden tot de LED's overeenkomt met "00001001" aan het licht omhoog.

Voordat we zo ver gaan maar we moeten eerst zien wat verschijnt in ADCH wanneer we de verschillende knoppen duwen. Dus laten we gewoon een eenvoudige interrupt handler die alleen de inhoud van ADCH naar het display analyzer stuurt.

Dus is hier wat we nodig hebben:

 ADC_int:lds analyzer, ADCH ;load the value of ADCH into our analyzersbi EIFR,0 ; clear the external interrupt flag so that it is ready to go againreti 

Onderhand, zou u zitten kundig gewoon kopiëren van de code van onze analyzer in tutorial 5 en deze interrupt en de knevel instellingen toevoegen en uitvoeren van het.

Oefening 2: De code schrijven en uitvoeren van het. Zien dat je het ADCH wordt weergegeven op uw beeldscherm analyzer. Probeer de druk op dezelfde toets meerdere keren te duwen. Krijg je altijd dezelfde waarde in ADCH?

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