TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: halowin en 24 de Junio de 2008, 04:53:00
-
Hola.
He preparado una rutina de pausa de 40ms pero veo que despues de salir de la rutina el TMR0 sigue activo. He buscado en los ejemplos pero no he visto la solución. Aqui dejo la rutina:
PAUSA
;-------- pausa 40ms ----
MOVLW .100
MOVWF TMR0
BSF STATUS,5 ;banco 1
MOVLW b'00000111' ; prescaler 256 al TMR0
MOVWF OPTION_R
BCF STATUS,5 ;banco 0
DESBO BTFSS INTCON,2
GOTO DESBO
BCF INTCON,2 ;restablezco flag
RETURN
;------------------
Gracias.
-
El TMR0 es un contador ascendente reversible que cuando se desborda vuelve a empezar y no para nunca (solo para en modo sleep).
-
Aaaaacabaramos, ya podía estar buscandole las vueltas.
Muchas gracias pocher por la aclaración.
-
El tmr0 puede trabajar en dos modos: contador y temporizador. Tú lo estás usando como temporizador, entonces incrementa cada ciclo de instrucción o si lo tienes con pre-escala cada cierta cantidad de ciclos... para detenerlo podrías cambiar a modo contador. Haciendo:
Bueno es una idea.
Saludos, nos leemos! :mrgreen:
-
Muy buena idea firepic, pero tienes que tener cuidado, porque en modo contador utiliza el puerto RA4. Si no utilizas este bit, es buena idea, porque hasta que no cambie de nivel, el contador, no se incrementará, pero si utilizas este pin, como entrada o como salida, cada vez que el bit RA4, cambie su nivel, el contador incrementará.
-
Ok, gracias a todos, la cosa es que no me interfiera en nada.
Gracias.
-
Tienes razón Leon, se me olvidó aclarar ese punto.
Para asegurar que de verdad no incremente más nunca el tmr0, el RA4 debería estar conectado a masa. De ese modo no habría nunca un cambio de nivel.
Es decir, esta opción funciona siempre que tengas "desactivado" al RA4.
Ok saludos, nos leemos! :mrgreen: