Este también te va a dar problemas porque se queda en lazos infinitos esperando el pulsador o la bandera. (Instrucciones While)
Deberías pensar en multitareas con procesos cooperativoss, y para tu caso no es necesario utilizar interrupciones, solamente un temporizador siempre activo para obtener su valor y generar retardos.
Si, amigo eso también pensé, al ver los While.
Por favor podrías ser más especifico con lo del temporizador siempre activo?
De ser posible un pequeño ejemplo que me guíe sería muy gentil de tu parte.
Saludos!
Con el microcontrolador que tienes y con un temporizador de 16 bits, con su máximo post escalamiento de 8 (asumiendo que el cristal es de 4MHz) me parece que máximo podrías conseguir 0.5 segundos de tiempo.
Por lo tanto necesitarías una variable auxiliar de 16 bits y con el código de don dogflu66, se podría hacer la siguiente parte solamente es para “aumentar” la capacidad del temporizador.
DIM VariableAuxiliar
AS UShort
.....
Save
SYSTEM 'Guarda calculos intermedios y otros del sistema 'Detecta interrupción Timer1
IF PIR1.TMR1IF = 1 THEN
PIR1.TMR1IF = 0 'Flash dosborde a cero
VariableAuxiliar = VariableAuxiliar + 1;
Endif
RESUME
Con esto tienes una variable (sin signo) que puede contar hasta 65.5 segundos
El siguiente paso es comprender la forma errónea de realizar un retardo, como tu mismo lo indicantes se apropia del CPU del microcontrolador y no puedes hacer otros procesos, salvo que sólo sea el único proceso.
Para evitar un apropiamiento del CPU se puede recurrir a una variable que captura el valor del temporizador (o en este caso, la variable auxiliar) y determinar si se ha determinado que ha transcurrido un tiempo determinado.
Un ejemplo para activar y apagar un led sería más o menos así:
DIM VariableAuxiliar
AS UShort
Main:
Low led1 ‘ apago el led
Retardo = VariableAuxiliar
Lazo:
IF ((VariableAuxiliar - Retardo) > 2000) THEN
TOGGLE led1
Retardo = VariableAuxiliar’ Vuelvo a capturar un nuevo valor para otro retardo
Endif
GOTO Lazo
Como puedes ver, sólo se verifica si el IF se cumple, caso contrario podría pasar a realizar otro proceso.
Si comprendes esto, se podría intentar hacer tu proyecto de esta manera.