TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: alex22ra en 01 de Agosto de 2005, 06:04:00
-
Hola a todos.
Pregunta: Si en el registro option pongo en PS2,PS1yPS0, un 000. ¿El prescaler del timer 0 sera 1:2? ¿y si no quiero prescaler que tengo que hacer?
Yo imagino que 1:2 será el minimo porque hay instrucciones que tardan 2 us en ejecutarse y por tanto podria surgir algun tipo de problema, pero no se. Ya me comentareis.
Salu2
-
Pues si, el prescale t dividira el timer0 entre 2 (los pulsos), yo tuve este problema una vez con un velocimetro y se soluciono d esta forma
a) Asigna el prescaler al WDT
b) Al grabar, selecciona el WDT como OFF o apagado
Esto t dara una division 1:1 en el TMR0 o mejor dicho no habra division en los pulsos, ahora yo asumo q no estaras usando el WDT en el programa, si es asi, ahora la division se t va en el WDT aumentando a doble del tiempo.
Si estas usando el WDt, considero q el WDT podria tener prioridad sobre el TMR0 asi q si no puedes mover el prescaler al WDT t tocara multiplicar por 2 el valor almacenado en el TMR0, es cosa de hacer rotar el valor del registro 1 posicion a la izquierda (ojo debe entrar un cero en el LSB)
-
Muchas gracias, me has solucionado el problema.
Pero sigo teniendo una duda, Si la interrupcion salta justo "en medio" mientras se está ejecutando una instruccion que tarda 2 ciclos de reloj en ejecutarse (btfsc por ej) no ocurre ningun problema.
Es que esto me podria pasar a mi ya que en el bucle principal son todo comprobaciones de flags.
Salu2
-
bueno yo tngo entendido q una interrupcion es atendida por el micro LUEGO de q la instruccion ha sido ejecutada, en el caso de tu instruccion btfsc, la interrupcion sucederia en programa despues q se ha comprobado los valores, el hecho de q suceda dentro del ciclo del CPU no impide la ejecuccion de la instruccion, y sera atendida al finalizar el ciclo q se consume la ultima instruccion cargada.
En pocas palbaras, aun si la int ocurre dentro del rango de los 2 µS q se consume el btfsc (suponiendo q el CPU ya esta ejecutando el btfsc o sea la instruccion ya esta cargada en el CPU de PIC), primero se ejecutara el btfsc y despues la rutina de interrupcion