Paso 6: Cronógrafo - Pseudo código
========================================
=== Funcionamiento cronógrafo ===
========================================
-Encendido
-Inicializar puertos
-Inicializar LCD
-Inicializar PWM
-Inicializar Timer0 pero mantenerlo desactivado
-Inicializa el Timer1 pero mantenerlo desactivado
-Inicializar INT2 externos (S2)
-Habilitar interrupciones
-Lazo para siempre
-Compruebe si su conjunto de modo de "velocidad" o "RoF"
-Si su conjunto de modo de "velocidad", debounce S2 y habilita INT2, luego entrar en el modo de "velocidad"
-Otra cosa si su conjunto de modo de "RoF", debounce S2 y activar INT2, luego entrar en el modo "RoF"
Modo de velocidad:
-Preparar el Timer1 registrar la velocidad del proyectil (puesto TMR1H:TMR1L a 0 x 0000)
-Bucle hasta que una bandera es conjunto (presionar S2 causaría esto) o un objeto rompe la viga #1
-Timer1 Inicio
-Lazo hasta que se coloca una bandera (se pulsa S2 o Timer1 se desborda) o un objeto rompe la viga #2
-Dejar de Timer1
-Hacer seguro de que no se ha establecido una bandera (Asegúrese de que la operación terminó con éxito)
-Si no se ha establecido ninguna bandera, incrementar el recuento de tiro y calcular la velocidad de los proyectiles
-Mostrar la velocidad de los proyectiles en la pantalla LCD
-Otra cosa si se ha establecido una bandera y no se ha cambiado a modo de "RoF", mostrar un error
(Este error es debido al proyectil que se mueve demasiado lento para que el cronógrafo captar su velocidad)
-Retorno al bucle principal y compruebe que el cronografo se encuentre en el modo
Modo de RoF:
-Preparar el Timer0 para interrumpir en exactamente 1.00s (que es todavía desactivado en este momento)
-Bucle hasta que una bandera es conjunto (presionar S2 causaría esto) o un objeto rompe la viga #1
-Verifique para asegurarse de que no se ha establecido una bandera (no presionado S2)
-Si no se ha establecido ninguna bandera, start Timer0
-Bucle hasta que se coloca una bandera (hasta Timer0 ha interrumpido después de 1.00s)
-Si la viga #1 es roto, variables de incremento 'tarifa' y 'tiros'
-Lazo hasta que se restablezca la viga #1 (espere el proyectil a fin de pasar a través de la viga #1)
-Ha sido 1.00s y ha interrumpido el Timer0, mostrar el RoF en la pantalla LCD
-Retorno al bucle principal y compruebe que el cronografo se encuentre en el modo
=============================
=== Interrumpe ===
=============================
Timer0:
-Apague el Timer0
-Establecer una bandera
-Borrar la bandera de interrupción del Timer0
Timer1:
-Establecer una bandera
-Borrar la bandera de interrupción del Timer1
Ext_INT2:
-Asegúrese de que ambos temporizadores se apague; Apague el Timer0 y Timer1
-Cambiar el modo de "velocidad" a "RoF" o viceversa
-Establecer una bandera
-Desactivar la INT2 (así nos podemos debounce pulsar botón S2)
-Borrar la bandera de interrupción INT2
P.S. > pido disculpas por cómo el esquema se ve un poco disperso.