He estado tratando de crear un temporizador de cuenta atrás utilizando el microcontrolador ARM7, una vez que se detecta una entrada de interruptor. Hasta ahora he conseguido crear una función de retardo de 1 minuto, y detectar una entrada de interruptor. Sin embargo, una vez que el interruptor se libera, la cuenta atrás se detiene.
En primer lugar, he configurado 2 pantallas de siete segmentos que detectan una entrada de interruptor y pueden incrementar o disminuir los minutos.
He puesto el delay_MINUTE
función como la siguiente, que es básicamente un retraso de 1 minuto. He comprobado esto usando un LED y esta parte de mi programa funciona:
void delay_MINUTE(void)
{
T0TCR = 0x0; //Resetting Timer0
T0MR0 = 499999; //Loading match register value
T0PR = 600; //Loading Prescalar register value
T0PC = T0TC = 0; //The value in the register increments with every input pulse or Processor clock fed into it.
T0MCR = (1<<0) | (1<<2); //Generates interrupt and reset on match.
T0TCR = 0x1; //Starting Timer
while(!(T0IR & (1<<0))); //Waiting for interrupt
T0IR = (1<<0); //Clearing interrupt
}
Me estoy atascando en una parte sencilla del programa. Cuando se detecta una entrada de interruptor en P0.14, la pantalla actual debe disminuir en uno, cada un minuto.
Si simplemente lo hago:
int y = 0;
unsigned int SW3;
if((SW3) == y) //detecting switch input
{
delay_MINUTE();
num_right --;
}
el número sólo disminuirá en uno cuando se pulse el interruptor, y no seguirá la cuenta atrás hasta llegar a 0. Cualquier sugerencia sobre cómo podría cambiar mi código para detectar una entrada de interruptor y disminuir continuamente después de que se haya liberado sería apreciada.
EDITAR También he probado a crear un bucle for dentro de la sentencia switch de forma que cuando se pulse el switch, la cuenta atrás se inicie en función del dígito actual que se esté mostrando. No estoy seguro de si esto es una buena idea o no.