• Martes 5 de Noviembre de 2024, 16:35

Autor Tema:  Necesito Ejemplo Tmr0 Pic16f84a  (Leído 4785 veces)

karol

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Necesito Ejemplo Tmr0 Pic16f84a
« en: Jueves 30 de Septiembre de 2004, 04:03 »
0
Hola a todos, espero me puedan ayudar. Necesito un ejemplo de como usar el TMR0 del PIC16f84A, he logrado usar el perro guardian , pero me gustaría usar el TMR0 y algo del prescaler. Ojalá y me envien un ejemplito sencillo BYE!!!!

Nota: cuando empieza a contar (incrementar) el TMRO????

oldkami

  • Miembro activo
  • **
  • Mensajes: 50
    • Ver Perfil
Re: Necesito Ejemplo Tmr0 Pic16f84a
« Respuesta #1 en: Sábado 2 de Octubre de 2004, 00:31 »
0
Bueno, lo primero que debes saber es que el TMR0 se configura en el registro OPTION.

si el OPTION_REG,T0CS = 0 se configura el TMR0 en modo "timer" es decir, se incrementa al ritmo del ciclo de instrucciones (Fosc/4).
si OPTION_REG,T0CS = 1 se asigna como contador, es decir, cuenta dependiendo de los pulsos de entrada en RA4.

Imagino que te refieres a como usar el TMR0 en el modo "Timer"

El TMR0 comienza a contar "inmediatamente" se le asigna un modo, por ejemplo, asumiendo que el valor del OPTION_REG,T0CS =0 al iniciar despues de un reset, el Timer0 se coloca en modo "timer" y comienza a contar inmediatamente despues de dicho reset. Una vez el contador alcanza su valor maximo (8 bits) se activa la bandera de desborde INTCON,T0IF = 1. si tienes activada la interrupcion INTCON,T0IE el apuntador de programa (PC) se dirige al vector de interrupción en el momento que INTCON,T0IF =1, que en el caso del 16f84A es el 0x0004.

Por tanto, si quieres comenzar unconteo en modo "timer" lo mejor es inicializar el valor de TMR0 (por ejemplo: clrf TMR0). al escribir el TMR0, este se coloca en "Espera" por dos ciclos, es decir que posees un tiempo de dos ciclos antes que el timer comience su operación normal. durante este tiempo es conveniente borrar la bandera de desborde INTCON,T0IF , la cual es la que consultamos si queremos saber si ya se acabo el conteo.

ej queremos contar 100 ciclos:
Código: Text
  1.  
  2.      banksel  OPTION_REG
  3.      movlw    X                  &#59; Asignas el preescaler, (revisa el valor adecuado en
  4.      movwf    OPTION_REG &#59; el pdf del PIC)
  5.  
  6.      banksel TMR0
  7.      movlw   d'255'-d'100'   &#59; inicializamos con el valor de desborde que es 255 y le
  8.                                        &#59; restamos el valor que queremos contar
  9.      movwf   TMR0             &#59; a partir de aqui contamos con 2 ciclos
  10.      bcf         INTCON,T0IF &#59; borramos la bandera ya que no sabemos si ya
  11.                                       &#59; se desbordo el timer
  12.      nop                           &#59; desde aqui comienza a contar ¡¡
  13.  
  14.      btfss       INTCON,T0IF&#59; evaluamos si el timer ya realizo su labor.
  15.      goto        $-1              &#59;esperar...
  16.  
  17. CODIGO_QUE_SIGUE
  18.                                      &#59; ya acabo de contar, y continua el programa.
  19.  
  20.  

el preescaler es simplemente el numero de ciclos que deseas que transcurran antes que se incremente el TMR0, con esto logras tiempos mas largos. estos valores los encuentras en el pdf del PIC.  

Espero te haya servido de algo...


Saludos

Oldkami

cesardag

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Necesito Ejemplo Tmr0 Pic16f84a
« Respuesta #2 en: Lunes 25 de Septiembre de 2006, 06:31 »
0
Que debo hacer para refinar un timer de 4ms? uso un 16F628A con un cristal a 4Mhz y lo tengo a 1:16 para obtener 250000 y luego entre 250 para obtener 4 ms pero no logro que se deje de atrasar o adelantar.

Cesar del Aguila