El oscilador de cristal Keil c51 es de 11,0592 mhz. Lo que escribí es retraso (uchi ri) { while (-I);} ¿Cuánto tiempo durará este retraso?
El siguiente es el programa de retardo del microcontrolador (incluidos los programas asm y C, que utilicé en el proceso de aprendizaje del microcontrolador). En el programa de retardo del microcontrolador se debe considerar la frecuencia del oscilador de cristal utilizado. En los microcontroladores de la serie 51 utilizamos habitualmente osciladores de cristal de 11,0592 MHz y 12,0000 MHz, y en los microcontroladores AVR.
Retraso del software: (asm)
Oscilador de cristal 12MHZ, retraso 1 segundo.
El proceso es el siguiente:
Retraso: MOV 72H, #100
Tercer bucle: MOV 71H, #100
bucle 1: MOV 70H # 47
LOOP0: DJNZ 70H, LOOP0
no se proporciona lo contrario a menos que se especifique lo contrario
DJNZ 71H, LOOP1
MOV 70H, No. 46
Loop 2: DJNZ 70H, Loop 2
no se proporciona lo contrario a menos que se especifique lo contrario
DJNZ 72H, LOOP3
MOV 70H, No. 48
LOOP4: DJNZ 70H, LOOP4
Retardo del temporizador:
El oscilador de cristal es de 12 MHZ y el retraso es 1 s, el modo de funcionamiento del temporizador 0 es 1.
DELAY1: MOV R7, # 0AH; oscilador de cristal 12MHZ, retraso 0,5 segundos.
Retraso AJMP
Retraso 2: MOV R7, #14H; Oscilador de cristal 12MHZ, retraso 1 segundo.
Retraso: CLR EX0
MOV TMOD, # 01H; Establece el modo de funcionamiento del temporizador en modo 1.
MOV TL0,#0B0H establece el valor de conteo inicial del temporizador.
MOV TH0, #3CH
SETB TR0; iniciar temporizador
Aquí: JBC TF0, NEXT1
Soy SJMP
p>NEXT1: MOV TL0, #0B0H
MOV TH0, #3CH
DJNZ R7, aquí
El temporizador CLR TR0 debe borrarse software cero.
SETB EX0
Remojarlo en agua lo suaviza
Programa de retardo en lenguaje C:
Subrutina de retardo de 10 milisegundos (12 MHZ)
Retraso no válido 10 milisegundos (no válido)
{
Caracteres sin firmar I, j, k;
for(I = 5; i gt0 ; i-)
for(j = 4; j gt0; j -)
for(k = 248; k gt0; k-);
}
Subrutina de retardo de 1 s (12 MHZ)
Retraso de 1 s no válido (no válido)
{
Caracteres sin signo h, I, j, k;
for(h = 5; h gt0; h -)
for(I = 4; i gt0; i -)
for( j = 116; j gt0; j -)
for(k = 214; k gt0; k-);
}
Subrutina de retardo de 200 milisegundos (12MHZ) )
Retraso no válido 200 milisegundos (no válido)
{
Caracteres sin signo I, j, k;
for( I = 5 ;i gt0;i-)
for(j = 132;j gt0;j -)
for(k = 150;k gt0;k-);
}
Subrutina de retardo de 500 ms: (12 MHZ)
Retraso no válido 500 milisegundos (no válido)
{
Caracteres sin firmar I , j, k;
for(I = 15;i gt0;i-)
for(j = 202;j gt0;j -)
for(k = 81; k gt0; k-);
}
Los siguientes son los resultados usando un oscilador de cristal de 8.0000MHZ (usando el modo de trabajo de temporización 0 1) Programa de retardo:
(1) Retraso 0,9 milisegundos
Retraso no válido_ 0 _ 9 milisegundos (no válido)
{
TMOD = 0x 01; *El temporizador 0 funciona en modo 1 (contador de 16 bits)*/
TH0 = 0xfd
TL0 = 0xa8
TR0 = 1 /*Iniciar temporizador; */
while(TF0 = = 0);
TR0 = 0;
}
(2) Retraso de 1 milisegundo
Retraso no válido_1 milisegundo (no válido)
{
TMOD = 0x 01 /*El temporizador 0 funciona en modo 1 (contador de 16 bits)*/
TH0 = 0xfd
TL0 = 0x65
TR0 = 1; /*Iniciar temporizador*/
mientras(TF0 = = 0) ;
TR0 = 0;
}
(3) Retraso 4,5 milisegundos
Retraso no válido_4_5 ms (no válido)
{
TMOD = 0x 01; /*El temporizador 0 funciona en modo 1 (contador de 16 bits)*/
TH0 = 0xf4
TL0 = 0x48
TR0 = 1; /*Iniciar temporizador*/
mientras(TF0 = = 0);
p>TR0 = 0;
}