Stap 4: Theorie van de Software van de operatie
We weten dat de grijze gecodeerde AB patroon herhaalt elke vier posities, dus als we het routinewerk voor overgangen tussen deze vier posities maken het voor alle anderen werken zal. Merk op dat in een positie vier cyclus, er zijn vier randen. Een stijgende rand en een dalende rand voor zowel de invoer van de A als de B-ingang. De microprocessor onderbroken zal worden elke keer dat er een rand, wat betekent wordt dat de microcontroller telkens als die de knop actief is zal onderbroken worden. Dientengevolge, moet de ISR erachter op welke manier de knop werd gedraaid. Om ons te helpen erachter te komen hoe dit te doen, wij wenden tot de golfvorm voor rechtsom draaien.
Merk op dat een tijd-A heeft een rand, de nieuwe waarde is altijd anders dan die van B. Wanneer de knop gaat vanaf positie 1 tot 2, een overgangen van logic-0 aan logica-1. B is nog steeds 0 voor deze overgang en komt niet overeen met de nieuwe waarde van A. Wanneer de knop vanaf positie 3 tot en met 4 gaat, heeft A een dalende rand terwijl B logica-1 blijft. Merk opnieuw, dat B en de nieuwe waarde van A verschillend zijn. Recht nu, kunnen we zien dat elk moment die a de interrupt tijdens rechtsom draaien veroorzaakt, de nieuwe waarde van die van B. verschilt Laten we eens kijken B om te zien wat er gebeurt. B heeft een stijgende rand wanneer de switch van positie 2 tot en met 3 overgangen. Hier de nieuwe waarde van B is hetzelfde als A. Looking aan de laatste resterende rand voor rechtsom draaien, B heeft een dalende rand verplaatsen van positie 4 tot en met 5. (Positie 5 is hetzelfde als positie 1.) De nieuwe waarde van B is hetzelfde als een hier ook! Nu kunnen we sommige aftrek! Als A de interrupt veroorzaakt en de nieuwe waarde van A anders dan die van B is, was de rotatie met de klok mee. Bovendien, als B de interrupt veroorzaakt en de nieuwe waarde van B hetzelfde als A is, was dan de rotatie met de klok mee.
Laten we eens nagaan snel het geval tegen de roulatie. Net als rechtsom draaien, tegen de roulatie vier interrupts in één cyclus zal veroorzaken: twee voor input A en twee voor input B. Input A heeft een stijgende rand wanneer de knop beweegt vanuit positie 4 tot en met 3 en een dalende rand verplaatsen van positie 2 naar 1. Als u de knop verplaatst vanaf positie 4 tot en met 3, is de nieuwe waarde van A hetzelfde als de waarde van B. aankondiging of wanneer een bewegingen van positie 2 naar 1 de nieuwe waarde hetzelfde als die van B zo goed is. Nu, kunnen we die zien wanneer A veroorzaakt de interrupt en haar nieuwe waarde overeenkomt met die van de rotatie B was tegen de klok in. Snel, zullen we kijken naar de input B om te controleren of alles. B zal leiden tot een interrupt wanneer de knop vanaf positie 5 beweegt (die is hetzelfde als 1) 4 en wanneer de knop wordt 3 tot 2 positie verplaatst. In beide gevallen, de nieuwe waarde van B komt niet overeen met de bestaande waarde van een die is het tegenovergestelde van de gevallen wanneer B de interrupt voor rechtsom draaien veroorzaakt. Dit is goed nieuws. Alles uitgecheckt zoals het hoort.
Om samen te vatten, als een oorzaken de interrupt en de nieuwe waarde niet overeenkomt met de waarde van B of B veroorzaakt de interrupt als de nieuwe waarde van B overeenkomt met de waarde van A wij weten was er rechtsom draaien. Kunnen we de andere gevallen voor een tegen de rotatie in software controleren of we kunnen aannemen dat omdat het niet rechtsom draaien was er tegen de klok in. Mijn routine maakte gewoon de veronderstelling.