Que tal mardelpic,
No entiendo bien tu pregunta, pero creo que te refieres a como realizar rutinas de tiempo con respecto a algun oscilador en el PIC.
Todos los PIC de cualquier familia dividen el oscilador entre cuatro, lo que significa que si tienes un oscilador de 4MHz el micro estara corriendo a 1MHz. Ya de esta frecuencia se toma lo que se conoce como ciclo instruccion que equivale al inverso de la frecuencia de 1 MHz. La mayoria de las instrucciones del PIC se ejecutan en un ciclo instruccion a excepcion de los saltos (GOTO, CALL). Los saltos condicionales se ejecutan en 1 o 2 ciclos, eso depende de si se cumple o no la condicion. Ejemplo:
BTFSS STATUS,C 'El carry tiene un 1?
GOTO ALGO
NOP
si se cumple la condicion del carry en 1, entonces esa instruccion ocupara 2 ciclos instruccion, pero si no se cumple unicamente utilizara 1.
Con la referencia anterior si tenemos que nuestro cristal es de 4MHz y nuestra frecuencia instruccion es de 1MHz, entonces el tiempo de cada ciclo instruccion es de 1microsegundo.
Si hacemos una rutina de tiempo, por ejemplo:
CALL DELAY 'Esta instruccion usara 2 ciclos instruccion
DELAY MOVLW x 'Esta instruccion usara 1 ciclo isntruccion
MOVWF VAR 'Esta usara 1 ciclo instruccion
DECFSZ VAR,F 'Esta usara 2 ciclos si la condicion se cumple de lo contrario solo usara 1
GOTO $-1 'Esta usara 2 ciclos instruccion
RETURN 'Esta usara 2 ciclos
Con la informacio anterior entonces podemos hacer uso de nuestras amigas las matematicas para encontrar una ecuacion general. Pero comencemos con un caso particular en donde x, tiene el valor de 3
Por lo tanto;
2 ciclos del CALL
1 ciclo del MOVLW
1 ciclo del MOVWF
1 ciclo de DECFSZ hasta que la condicion se cumple
2 ciclos del GOTO
Como se puede ver las dos instrucciones anteriores se ejecutaran 2 veces, por lo que generara 3ciclos * 2 = 6 ciclos
2 ciclos del DECFSZ cuando se cunple la consicion
2 ciclos del RETUN
El total es 14 ciclos
Ahora vamos al caso general.
Entonces tenemos que: 2+1+1+3(x-1)+2+2 = numero de ciclos
numero de ciclos = 8+3(x-1)
Prueba:
Si x = 3
Sustituyendo en nuestra ecuacion:
numero de ciclos = 8+(3-1)
= 8+(3-2)
= 8+ 6
= 14
BINGO, funciona, funciona.
Pero cual es el tiempo que genera.
Si bien caca ciclo instruccion es de 1 microsegundo el cual obtuvimos de:
Frecuencia ciclo = XTAL/4
tiempo de ciclo instruccion = 1/frecuencia ciclo = 4/XTAL
Ahora bien si el tiempo total de la rutina lo obtnemos multiplicando el numero de ciclos de nuestra rutina por el valor del tiempo del ciclo instruccion, entonces
Tiempo total = (4*numero de ciclos)/XTAL
Asi entonces volviendo a nuestro ejemplo, si la rutina genera 14 ciclos instruccion, sustituyendo en nuestra ecuacion,
Tiempo toal = (4*14)/4MHz
=56/4Mz
=14 microsegundos
FUNCIONA, FUNCIONA.
Asi entonces solo tenemos que cambiar el valor de x desde 0 hasta 255 y sustituirla en nuestra ecuacion y obtendremos lo que buscamos.
Esta es una de las razones del porque si se gusta de la electronica formal, son tan necesarias las matematicas. Y asi no hay falla ni estar con los dolores de cabeza y preguntandonos por que no funciona.
Espero esto sirva y ayude a solucionar los problemas que muchos tenemos.
Y recuerden para eso estamos, para ayudar en lo que se pueda.
Feliz navidad y propero anio nuevo.
Elreypic