AVR Assembler Tutorial 3 (6 / 9 stap)

Stap 6: Overloop Handler

Dus laten we aannemen dat het register timer/counter0 net is overstroomd. We weten nu dat het programma een interruptsignaal ontvangt en voert 0x0020 die het programma-item vertelt, PC om het label "overflow_handler" naar de volgende is de code die we na dat label schreef:

 overflow_handler: inc overflows cpi overflows, 61 brne PC+2 clr overflows reti 

Het eerste ding dat het doet is het verhogen van de variabele "overflows" (dat is onze naam voor algemene doeleinden werkende register R17) dan het "" de inhoud van overstorten met het getal 61 vergelijkt. De manier waarop de instructie cpi werkt is dat het simpelweg wordt afgetrokken van de twee getallen en als het resultaat nul it stelt u de Z-vlag in het SREG-register (ik zei toch dat we zouden zien dit register hele tijd). Als de twee getallen gelijk zijn dan zullen de Z-vlag een 1, als de twee getallen niet gelijk zijn, dan zal een 0.

De volgende regel zegt "Brně PC + 2" wat betekent "branch als niet gelijk". In wezen, het controleert de Z-vlag in SREG en als het niet is (dat wil zeggen de twee getallen zijn niet gelijk, als ze gelijk zijn, de nul vlag zou worden ingesteld) de PC takken aan PC + 2, wat betekent dat het de volgende regel overgeslagen en gaat rechtstreeks naar "reti" die het rendement van de interrupt voor wat het was in de code wanneer de interrupt aangekomen. Als de Brně-instructie in de nul vlag bit een 1 gevonden het niet zou tak en in plaats daarvan zou het gewoon blijven de volgende regel die zou clr overstorten wordt ingesteld op 0.

Wat is het netto resultaat van al dit?

Ook zien we dat telkens als er een timer overloop deze handler de waarde van "overflows" door een verhoogt. Dus de variabele "overloop" is het tellen van het aantal overstorten zoals ze zich voordoen. Wanneer het nummer bereikt 61 we het op nul instellen.

Nu waarom in de wereld zouden we dat doen?

Laten we eens kijken. Herinneren eraan dat onze kloksnelheid voor de CPU 16MHz is en wij "prescaled" met behulp van TCCR0B zodat de timer alleen met een snelheid van 15625 tellingen per tweede weg rechts telt? En elke keer dat de teller op een telling van 255 die het overloopt. Dus dat betekent dat het loopt over 15625/256 = 61.04 keer per seconde. Wij zijn het bijhouden van het aantal overstorten met onze variabele "overflows" en we zijn dat aantal met 61 vergelijken. Dus zien we dat "overloop" met 61 eenmaal per seconde overeen komt! Dus zal onze handler weer "overloop" op nul gezet eenmaal per seconde. Zo mochten we eenvoudig controleren van de variabele "overflows" en nota nemen van elke keer dat het gaat terug naar nul die we door-seconde in real-time zou tellen.

Nu hebben we "behandeld" timer overloop interrupts. Zorg ervoor dat u begrijpt hoe deze werkt en vervolgens verplaatsen op naar de volgende stap waar we maken gebruik van dit feit.

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