Hola a todos. groundman, ya encontré esa parte de datasheet que mencionas y procedo a explicarla según mi modesto entender:
Como ya se sabe, el prescaler está compartido entre el TMR0 y el WDT, y su asignación a uno de ellos se hace mediante el bit PSA del registro OPTION_REG.
Lo interesante, es que esto se puede hacer en cualquier momento, es decir, en un mismo firmware puedes asignarle primero al WDT, luego al TMR0. luego al WDT y asi sucesivamente (cosa poco practica y usada según yo creo). Entonces aqui entra a tallar ese detalle, al hacer estos "sucesivos intercambios", no basta con tan solo manipular el bit PSA, se tiene que seguir esta secuencia de instrucciones si se desea que el WDT trabaje correctamente (pero solo si se desea que el WDT trabaje con un prescaler de 1 ó 2).
Me explico mejor: supongamos que el prescaler está asignado al TMR0 y por motivos x del firmware ahora deseas asignarselo al WDT, entonces tendrías que hacer esto:
movlw b'xxxx1xxx'
movwf OPTION_REG
pero esto solo es valido si los bits PS<2:0> estan comprendidos entre los valores 010 y 111. En caso se desee que su valor sea 000 ó 001, la secuencia a de ser la sgte.
movlw b'00101111' ;estas 3 lineas son las requeridas si se desea un
mowf OPTION_REG ;prescaler para el WDT de 1 ó 2 cuando se hace el
clrwdt ;cambio desde el TMR0 al WDT
movlw b'xxxx1xxx'
movwf OPTION_REG
y luego de la secuencia requerida, recién los bits PS<2:0> toman el valor deseado, sea 000 ó 001.
como se podrá observar, esto solo se realiza cuando el prescaler es reasignado desde el TMR0 al WDT, pero que sucede si es al revés, bueno aqui el asunto es más fácil, ya que no hay prerequisitos para la configuración de los bits PS<2:0>, entonces la secuencia sería como sigue:
movlw b'xxxx0xxx'
movwf OPTION_REG
y resulta que esta es la forma que generalmente más se usa, ya que por defecto (es decir, cuando alimentamos el microcontrlador), el prescaler inicia asignado al WDT, oséa el bit PSA seteado, entonces cuando queremos asignar el prescaler al TMR0, solo realizamos la secuencia anterior sin ningun prerrequisito, y si en caso contrario, queremos darle un prescaler de 1 ó 2 o x al WDT, pues ya no es necesario la secuencia requerida ya que el prescaler ya esta asignado al WDT por default.
Bueno, eso es todo, espero haber contribuido en algo, un saludo a todos y chao.