Étape 6: Chronograph - pseudo-code
========================================
=== Chronographe opération ===
========================================
-Power Up
-Ports initialize
-Initialiser LCD
-Initialiser PWM
-Initialiser le Timer0, mais garder cette option désactivée
-Initialiser Timer1 mais garder cette option désactivée
-Initialiser INT2 externe (S2)
-Activer les interruptions
-Boucle Forever
-Vérifier si son jeu pour le mode « vitesse » ou « RoF »
-Si son jeu pour le mode « vitesse », debounce S2 et activez INT2, puis passer en mode « Vitesse »
-Sinon, si son jeu pour le mode « RoF », debounce S2 et activer INT2, puis passer en mode « RoF »
Mode de vitesse :
-Préparer le Timer1 pour enregistrer la vitesse du projectile (valeur TMR1H:TMR1L 0 x 0000)
-Boucle jusqu'à ce qu’un drapeau est définie (pressurage S2 provoquerait cela) ou un objet rompt faisceau #1
-Start Timer1
-Boucle jusqu'à ce qu’un indicateur est défini (S2 est enfoncé ou Timer1 déborde) ou un objet rompt faisceau #2
-Arrêter le Timer1
-S’assurer qu’un drapeau n’a pas été défini (Assurez-vous que l’opération s’est terminée avec succès)
-Si aucun indicateur n’a été défini, incrémente le décompte de tir et de calculer la vitesse des projectiles
-Affichage de la vitesse des projectiles sur l’écran LCD
-Sinon si un indicateur a été défini et il n’a pas été modifié « RoF » mode, affiche une erreur
(Cette erreur est provoquée le projectile se déplaçant trop lent pour le chronographe capturer sa vitesse)
-Retourner à la boucle principale et vérifier quel mode le chronomètre est
RoF Mode :
-Préparer le Timer0 d’interrompre à exactement 1.00s (il est toujours désactivé à ce stade)
-Boucle jusqu'à ce qu’un drapeau est définie (pressurage S2 provoquerait cela) ou un objet rompt faisceau #1
-Vérifiez qu’un drapeau n’a pas été défini (S2 n’a pas été pressé)
-Si aucuns drapeau n’a été définie, commencer le Timer0
-Boucle jusqu'à ce qu’un indicateur est défini (jusqu'à ce que le Timer0 a interrompu après 1.00s)
-Si le faisceau #1 est cassé, incrément variables « note » et « photos »
-Boucle jusqu'à ce que le faisceau #1 est restaurée (attendre le projectile finir passant par faisceau #1)
-Il a été 1.00s et Timer0 a interrompu, le RoF d’affichage sur l’écran LCD
-Retourner à la boucle principale et vérifier quel mode le chronomètre est
=============================
=== Interrompt ===
=============================
Timer0 :
-Coupez le Timer0
-Définir un indicateur
-Effacer l’indicateur d’interruption Timer0
Timer1 :
-Définir un indicateur
-Désactiver l’indicateur d’interruption de Timer1
Ext_INT2 :
-Assurez-vous que les deux minuteries sont éteint ; Couper Timer0 et Timer1
-Changer le mode de la « vitesse » à « RoF » ou vice versa
-Définir un indicateur
-Désactiver INT2 (si nous pouvons debounce la presse bouton du S2)
-Désactiver l’indicateur d’interruption de INT2
PS > je m’excuse de quoi le schéma ressemble un peu dispersé.