Creación de 1 hora de retraso con el microcontrolador 89C51

-1

Estoy escribiendo una función de Programa de ensamblaje para 89C51 que puede crear un retraso de una hora. No puedo usar ningún otro microcontrolador ya que solo 89c51 / 52 está disponible localmente. Así que estoy atascado aquí porque incluso cuando configuro R5 to #255 , el retraso máximo que puedo crear de esta manera es de solo 2 minutos. Como mi conocimiento es algo débil en la Asamblea C, creo que puede haber una forma más fácil de hacer esto. Por favor, ayúdenme cómo puedo hacer esto con la Asamblea C.

Aquí está mi código con temporizador:

 DELAY:
  MOV R5,#24
  AGAIN:
     MOV TMOD,#01
     MOV TL0,#0
     MOV TH0,#0
     SETB TR0
     JNB TF0,$
     CLR TR0
     CLR TF0
      DJNZ R5,AGAIN
     RET

Código para hacerlo sin temporizadores con bucles:

DELAY2:
      MOV R5,#12
      L4:MOV R6,#255
      L3:MOV R7,#255
      DJNZ R7,$
      DJNZ R6,L3
      DJNZ R5,L4 

¡Por favor ayuda!

    
pregunta Naeem Ul Wahhab

2 respuestas

1

¿Cuál es el problema que está teniendo? ¿Escribiste este código o lo has copiado de otro lugar y estás intentando que funcione?

Teniendo en cuenta el siguiente código. ¿Funciona cuando lo ejecutas? (Esto debería ser idéntico a su código).

La respuesta fue:

  • sí funciona pero crea un retraso mucho menor.

  • Quiero crear un retraso de una hora. ... Necesito ayuda / sugerencias para modificar la función para que pueda generar un retraso de una hora.

Veamos si eso tiene sentido.
 El bucle interno disminuye R7: siempre se establece en 255 en la entrada.
  Esto se llama 255 veces por el bucle R6
 Esto se llama 255 veces por el bucle R5

L2 loop R7 es 255 decrementos  L3 es 255 x (decremento, salto)
 L4 es 255 x (decremento, salto)

Incluso se trata de manera simplista como si cada bucle fuera una sola instrucción.
 Operaciones = 255 x 255 x 255 = 16,581,385 ~ = 16 millones de instrucciones.
 Como esto produce un retraso de 2 minutos, habría 8 millones de instrucciones por minuto.  Como en realidad tenemos un salto y un decremento en la mayoría de los casos, esperaríamos 2 o 3 ciclos o intstrucciones. Entonces tal vez 24 millones de instrucciones por minuto dependiendo de la instrucción. Eso es solo alrededor de 300,000 instrucciones por segundo. Eso suena terriblemente lento, pero ver más abajo.

Por lo tanto, no puede crear un retraso que sea lo suficientemente largo.

Si agrega otro bucle fuera del existente, esperaría aproximadamente 255 x 2 minutos = 510 minutos = 8.5 horas.

Entonces, agrega un bucle más.
 Afina bien los retrasos para adaptarse.

    
respondido por el Russell McMahon
3

Primero, muchos micros están disponibles en cualquier parte del mundo. La mayoría de los distribuidores enviarán a cualquier lugar. Estoy en Massachussetts, pero cuando compro los PIC de Microchip, me los envían desde Tailandia.

Segundo, independientemente del microcontrolador, se puede crear cualquier cantidad de demora anidando los bucles. Ya has dicho que puedes crear un retraso de 2 minutos. Así que escribe un bucle que llame al retraso de 2 minutos 30 veces y tienes un retraso de 1 hora.

Tercero, una manera de hacer una demora es muy ineficiente, inexacta y difícil de mantener, como lo que está haciendo. Si alguna vez quiere que el micro haga algo más durante el período de demora, tendrá que rehacer todo el mecanismo de demora. También deja el micro funcionando todo el tiempo. Una forma mejor para la mayoría de las aplicaciones, especialmente para retrasos prolongados como este, es usar un temporizador para obtener un período fijo y luego contar los períodos fijos. Por ejemplo, una interrupción periódica de 1 ms es a menudo conveniente para la temporización en un micro. Puede simplemente contar 3,6M tics de 1 ms, o puede derivar tics más lentos y luego contarlos. A menudo, las garrapatas más lentas son útiles para otras cosas de todos modos. A menudo hago tics de 10ms, 100ms y 1s de los tics de 1ms. En este caso, podría contar 3600 garrapatas.

A veces el consumo de energía es importante. En ese caso, utiliza un oscilador lento, como un cristal de reloj de 32768 Hz, para activar el procesador cada segundo o lo que sea. Muchos micros tienen controladores para estos cristales incorporados. A veces, usar el temporizador de vigilancia incorporado para activar el procesador periódicamente es suficiente si no necesita alta precisión.

Recuerde que cada bit en un contador de tics de reloj duplica el tiempo máximo que puede contar. Los procesadores tienen muchos y muchos bits. Puede hacer fácilmente un contador que dure más que el silicio en el que se está ejecutando.

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas