HOLA:
puedes usar el registro tmro,que creo es comun para todos los pic. para un cristal de 4MHZ se incrementara cada 1us,y al desbordarse el TMR0, es decir cuando llega a su maximo conteo pone a uno el bit 2 del registro INTCON,(NO ES UNA INTERRUPCION SIMPLEMENTE MUESTRA SI SE DESBORDA EL TMR0 )simplemente calculas el retardo necesario, en segundos con la siguiente ecuacion, en funcion de un contador auxiliar "CONTA",que al cargarlo con el valor adecuado, permite tener temporizaciones grandes, en segundos:
ejemplo:
quiero una temporizacion de 3 segundos:
valor conta= (tiempo en seg *E 6)/ (VALOR PREESCALA TMR0*(255- VALOR TMR0))
*VALOR PREESCALA TMR0: SE CONFIGURA CON EL REGISTRO OPTION EN ESTE CASO SERA LA MAXIMA 1:256. con los bits PS0 PS1 PS2 A 1
*VALOR TMRO: SE LE CARGA CON VALOR TMR0=0 EN ESTE CASO.
LUEGO EL VALOR CON QUE SE CARGARA EL CONTADOR SERA:
valor conta= (3segE6)/(256*(255-0))= 45.9
COMO LOS REGISTROS DEL PIC SOLO TRABAJAN CON ENTEROS APROXIMO A 46
PREVIAMENTE ANTES DE EL PGMA PPAL DEBO CARGAR CONTA CON 46.
valor a cargar en CONTA : 46
A MODO DE SUBRUTINA:
Codigo:
TIEMPO MOVLW .0 ;cargo tmr0 con cero
MOVWF TMR0 ;
BTFSS INTCON,2 ;verifico la bandera de desbordamiento del TMR0
GOTO $-1 ;si no se ha desbordado espere a que se desborde
BCF INTCON,2 ;se desbordo, ponga bandera a cero
DECFSZ CONTA,1 ; decremento conta en 1
GOTO TIEMPO ; si conta no es cero repita
MOVLW .46 ; conta vale cero, recargue conta con 46
MOVWF CONTA ;
RETURN ;retorne de subrutina tiempo
HASTA PRONTO