Paintball/ballistiska Chronograph (6 / 11 steg)
Steg 6: Chronograph - Pseudo-kod
========================================
=== Kronograf funktion ===
========================================
-Power Up
-Initiera portar
-Initiera LCD
-Initiera PWM
-Initiera Timer0 men behålla den funktionshindrade
-Initiera Timer1 men behålla den funktionshindrade
-Initiera externa INT2 (S2)
-Aktivera avbrott
-Slinga Forever
-Kontrollera om sin uppsättning för "velocity" eller "RoF" läge
-Om dess för "velocity" läge, Dämpningstid S2 och aktiverar INT2, skriver du "velocity" läge
-Annat om sin uppsättning för "RoF" läge, Dämpningstid S2 och aktiverar INT2, ange "RoF" läge
Velocity-läge:
-Förbereda Timer1 för att spela in hastigheten av projektil (in TMR1H:TMR1L 0x0000)
-Loop tills en flagga är set (pressning S2 skulle orsaka detta) eller ett objekt bryter strålen #1
-Start Timer1
-Slinga tills en flagga är inställt (S2 trycks eller Timer1 flödar över) eller ett objekt bryter strålen #2
-Stoppa Timer1
-Göra säker på att en flagga inte har ställts in (se till att åtgärden)
-Om ingen flagga har ställts in, öka antalet skott och beräkna projektiler
-Visa projektiler hastigheten på LCD-skärmen
-Annars om en flagga har ställts in och det har inte ändrats till "RoF" läge, visas ett fel
(Felet beror projektilen går för långsamt för kronografen att fånga dess hastighet)
-Återgå till huvudloop och kolla vilket läge chronograph är i
RoF-läge:
-Förbereda Timer0 att avbryta på exakt 1.00s (det är fortfarande inaktiverad på denna punkt)
-Loop tills en flagga är set (pressning S2 skulle orsaka detta) eller ett objekt bryter strålen #1
-Kontrollera att se till att en flagga inte har ställts in (S2 var inte pressad)
-Om ingen flagga har ställts in, starta Timer0
-Loop tills en flagga är inställt (tills Timer0 har avbrutit efter 1.00s)
-Om balk #1 är trasiga, increment variabler "Betygsätt" och "skott"
-Slinga tills beam #1 återställs (vänta projektilen till slut passerar genom beam #1)
-Det har varit 1.00s och Timer0 har avbrutit, Visa ett RoF på LCD
-Återgå till huvudloop och kolla vilket läge chronograph är i
=============================
=== Avbryter ===
=============================
Timer0:
-Stäng av Timer0
-Ange en flagga
-Rensa flaggan Timer0 avbrott
Timer1:
-Ange en flagga
-Rensa flaggan Timer1 avbrott
Ext_INT2:
-Se till att båda Timers är avstängd; Stänga av Timer0 och Timer1
-Ändra läge från "velocity" till "RoF" eller vice versa
-Ange en flagga
-Inaktivera INT2 (så vi kan Dämpningstid knappen genom att trycka på S2)
-Rensa flaggan INT2 avbrott
PS > jag ber om ursäkt för hur schemat ser ut lite spridda.