La implementación del retraso en la programación del microcontrolador
Código de caracteres sin firmar Tab[10]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x 90};
//Pantalla de tubo digital la tabla de códigos de segmento del 0 al 9.
Carácter sin firmar int _ time//Registra el número de interrupciones.
Segundos de caracteres sin firmar; //segundos de almacenamiento
/*************************** * ***********************************************
Característica: Retraso de escaneo dinámico rápido, el retraso es de aproximadamente 0,6 milisegundos.
********************************************* *** *******************************/
Retraso no válido (no válido)
{
Carácter sin firmar I;
for(I = 0;i<200;i++);
}
/** ************************************************** * *******************
Función: Mostrar segundos
Parámetro de entrada: k
Exportar Parámetros: Ninguno
****************************************** ** *************************************/
evitar segundos de visualización ( carácter sin signo k)
{
P2 = Tab[k/10]; //Mostrar dígito de las decenas
P3 = 0x 01; Salida de pin de nivel alto, ilumina el dígito de las decenas.
delay();
P3 = 0x fc; //Apaga todos los tubos digitales.
P2 = Tab[k % 10]; //Unidad de visualización
P3 = 0x 02; //Salidas del pin P3.1 de alto nivel, iluminando a todos.
delay();
P3 = 0x fc; //Apaga todos los tubos digitales.
}
Void main(void) //Función principal
{
TMOD = 0x 01 //Usar temporizador T0
TH0 =(65536-5000)/256; //Establece el temporizador en 50 milisegundos.
TL0 =(65536-5000)% 256;
EA = 1; //Activar interrupción del host
ET0 = 1 //Habilitar temporizador T0; Interrumpir
TR0 = 1; //Inicia el temporizador T0 para comenzar a funcionar.
int _ time = 0; //Inicialización del número de interrupciones
Segundos = 99; //Inicialización de segundos
while(1) p>
{
DisplaySecond(segundos); //Llama a la segunda subrutina de visualización
mientras(segundos==0)
DisplaySecond(segundos) ;
p>
}
}
//********************* *********** *******************************
/ /Función: Interrumpir el programa de servicio del temporizador T0.
//****************************************** ****************
interrupción nula (void) 1 usa 1
{
TR0 = 0 ;/ /Cerrar temporizador T0
int _ time++; //Para cada interrupción, el número de interrupción int_time aumenta en 1.
If(int_time==20) // Suficiente para 20 interrupciones, es decir, el resultado de la prueba se muestrea cada 1 segundo.
{
int _ time = 0; //Borrar el número de interrupciones.
Segundo-;//Disminuye 1 en segundos
}
TH0 =(65536-5000)/256;//Reasignar el valor inicial al contador T0.
TL0 =(65536-5000)% 256;
TR0 = 1; //Iniciar temporizador T0
If(segundo==0) // Si la cuenta regresiva es 0, detenga el temporizador T0.
TR0 = 0;
}