Programación Específica > Microcontroladores

 Uso Del Tmr1 En El 16f876

<< < (2/2)

Kain589:
Lo he intentado recargando y activando el timer antes de retornar de la interrupcion y tampoco me funciona, es decir antes de retornar, desactivo el timer cargo los valores de timer1h/l y vuelvo a activarlo


--- Citar --- 
  ;ISR
  ORG  04H
  BCF    PIR1,0;Borro bandera
  DECFSZ  CONTADOR
  GOTO   RETORNA;Va a retornar de la int,
  BSF    TRANSICION,0
  GOTO  VERSAL
VERSAL
  MOVLW  0C8H;realiza 200 temporizaciones antes de variar salida
  MOVWF  CONTADOR
  BTFSS  PORTB,0;Analiza la salida
  GOTO   ACTIVAR;Va a activar salida
  BCF    PORTB,0;DESACTIVA
  GOTO RETORNA
ACTIVAR
  BSF    PORTB,0;activa
RETORNA
 BCF    T1CON,0;desactivo el temp
  MOVLW  0DCH
  MOVWF  TMR1L;CARGA TIMER1BAJO
  MOVLW  0BH
  MOVWF  TMR1H;CARGA TIMER1ALTO
  MOVLW  31H
  MOVWF  T1CON;PRESCALER 8 Y ACTIVA
 RETFIE
--- Fin de la cita ---

© Jonathan ©:
Bueno, tendrias que empezar a rebizar paso por paso.. por ejemplo.. modifica el programa para que despues del bucle infinito, se genere la interrupcion y vaya a la direccion 04h .. hasta ahi ya lo tienes.. pero en vez de hacer lo que hace tu programa, osea:


--- Código: Text ---ORG  04H  BCF    PIR1,0;Borro bandera  DECFSZ  CONTADOR  GOTO   CONTINUA;Va a retornar de la int,  BSF    TRANSICION,0  GOTO  VERSALVERSAL  MOVLW  0C8H;realiza 200 temporizaciones antes de variar salida  MOVWF  CONTADOR  BTFSS  PORTB,0;Analiza la salida  GOTO   ACTIVAR;Va a activar salida  BCF    PORTB,0;DESACTIVACONTINUA    RETFIEACTIVAR  BSF    PORTB,0;activa  RETFIE  
Has que el programa solo encienda un led en el puerto B, solo que lo encienda.. y ahi lo terminas..


--- Código: Text --- ORG  04H  BCF    PIR1,0;Borro bandera  BSF    PORTB,0;activa  RETFIE  
es solo una prueba para ver si el programa salta o no a la direccion 04h .. si esto funciona el problema esta en lo que haces a partir de la interrupcion.. prueba y me cuentas para continuar con el analisis. Saludos :)

Kain589:
Gracias por vuiestra ayuda, ya lo he conseguido hacer funcionar resulta que tenia varios fallos. La temporizacion era de 100 segundos, en lugar de 10 como yo pretendia, ya que la interrupcion se generaba cada 500 milisegundos y no cada 50; y ademas me faltaba inicializar el contador, asi cada vez que lo encendia tomaba un valor cualquiera, asi que despues de configurar el temporizador hay que cargar el valor correspondiente al contador.
Ahora voy a por el modulo Pwm :lightsabre: ,que ya lo he intentado una vez pero no me ha salido

© Jonathan ©:
Me alegra la noticia :) .. de los errores se aprende :smartass: .. comienza con el PWM y vengan esas dudas nomas :D .. Saludos! :hola:

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa