Programa de cronómetro en lenguaje C del microcontrolador. ¡Solicite modificación! ¿Cómo puedo detener la cuenta regresiva y comenzar de nuevo cuando termine?
#include
#define?uchar?unsigned?char
#define?uint?unsigned?int
uchar?seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//Mostrar 0-9 segmentos de código
uchar?count,time;
sbit?start=P3^4;
sbit?stop=P3^5;
sbit?reset=P3^6;
/***** Función de retardo*****
void?delay(uchar?k)
{
uchar?i,j ;?
for(i=0;i } void?main() { TMOD=0x01;?//Establecer en modo temporizador 1 TH0=0x3c;?// Oscilador de cristal 6MHz, tiempo de sincronización 100ms TL0=0xb0;IE=0x82;//Abrir Interrupciones globales e interrupciones programadas time=24; count=0; while(1) { if(start==0)?TR0=1;?//start switch if(stop==0)?TR0=0;//interruptor de parada if(reset==0)?time=24;//interruptor de reinicio P2=0xfe;?//Mostrar números P0=seg[time%10];?//Obtener el primer dígito del valor de tiempo y enviarlo al puerto P0 delay(2); P2=0xfd;?//Mostrar dígitos de decenas P0=seg[time/10] ?//Obtener el valor de tiempo de 10 dígitos y enviarlo al puerto P0 delay(2); } } void?timer0()?interrupt?1 { TH0=0x3c; TL0=0xb0; count++; if( count==10)?// Interrumpe 10 veces, es decir, 1s=10×100ms { p> count=0;// Borrar recuento time--;// Restar 1 del valor del temporizador if(time==0)? { time=24;?// Volver al valor inicial cuando el valor del tiempo disminuye a 0 TR0=0; }? } }