Stap 6: Chronograph - Pseudo Code
========================================
=== Chronograph operatie ===
========================================
-Power Up
-Initialiseren poorten
-LCD initialiseren
-Initialiseren PWM
-Timer0 initialiseren maar hou het uitgeschakeld
-Het initialiseren van Timer1 maar hou het uitgeschakeld
-Externe INT2 initialiseren (S2)
-Inschakelen Interrupts
-Lus Forever
-Controleer als een set voor de "snelheid" of "RoF" modus
-Als een set voor "velocity" modus, debounce S2 en INT2 inschakelt, typt u: "velocity" modus
-Anders als een set voor "RoF" modus, debounce S2 en INT2 inschakelt, voert u "RoF" modus
Snelheid modus:
-Voorbereiden van Timer1 om vast te leggen van de snelheid van het projectiel (ingesteld TMR1H:TMR1L op 0x0000)
-Loop tot een vlag is set (dringende S2 zou dit veroorzaken) of een object breekt beam #1
-Start Timer1
-Lus totdat een vlag is ingesteld (S2 wordt ingedrukt of Timer1 overloopt) of een object breekt beam #2
-Stop Timer1
-Zorg ervoor dat een vlag niet is ingesteld (zorg ervoor dat de bewerking is voltooid)
-Als er geen vlag gezet is, verhogen de shot telling en bereken de snelheid van projectielen
-De snelheid van projectielen worden weergegeven op het LCD-display
-Anders als een vlag is ingesteld, maar het is niet veranderd in "RoF"-modus, een fout weergeven
(Deze fout is te wijten aan het projectiel verhuizen te langzaam voor de chronograaf te vangen van de snelheid)
-Terug naar de hoofdlus en controleer welke modus de chronograaf is in
RoF-modus:
-Voorbereiding van de Timer0 te onderbreken op precies 1.00s (het is nog steeds uitgeschakeld op dit punt)
-Loop tot een vlag is set (dringende S2 zou dit veroorzaken) of een object breekt beam #1
-Check om ervoor te zorgen dat een vlag niet is ingesteld (S2 was niet ingedrukt)
-Als er geen vlag is ingesteld, start Timer0
-Loop totdat een vlag is ingesteld (tot Timer0 na 1.00s is onderbroken)
-Als beam #1 is gebroken, increment variabelen 'stem' en 'foto's '
-Loop tot de bundel #1 is hersteld (wacht tot het projectiel tot finish doorsnijdt beam #1)
-Het is 1.00s en Timer0 heeft onderbroken, het RoF weergegeven op het LCD-scherm
-Terug naar de hoofdlus en controleer welke modus de chronograaf is in
=============================
=== Onderbreekt ===
=============================
Timer0:
-Uitschakelen Timer0
-Een markering instellen
-Schakel de Timer0 interrupt-vlag
Timer1:
-Een markering instellen
-Schakel de Timer1 interrupt-vlag
Ext_INT2:
-Zorg ervoor dat beide Timers zijn afgesloten; Afgesloten Timer0 en Timer1
-Wisseling naar de wijze van "velocity" naar "RoF" of vice versa
-Een markering instellen
-Ontredderen INT2 (dus we kunnen debounce de knooppers van S2)
-Schakel de INT2 interrupt-vlag
PS > ik verontschuldig me voor hoe het schema ziet er een beetje verspreid.