Programación Específica > Microcontroladores
Uso Del Tmr1 En El 16f876
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
[*] Página Anterior
Ir a la versión completa