Yo utilizo la siguiente formula para los retardos:
Retardo = (((256*3+3)*256+3)*valor3+8) * Tiempo de instrucción
El tiempo de instrucción es 4 veces mayor que el periodo de oscilación. Por ejemplo, si tienes un cuarzo de 4MHz, el tiempo de instrucción es 1us.
La rutina de retardos es la siguiente:
Codigo:
delayXX clrf contador1
clrf contador2
movlw valor3
movwf contador3
bucle decfsz contador1,f
goto bucle
decfsz contador2,f
goto bucle
decfsz contador3,f
goto bucle
return
Aqui un ejemplo de retardo de un segundo:
Codigo:
;DELAY1S Retardo de 1 seg = ((256*3+3)*256+3)*5+8 = 986903us @ 4MHz
delay1s clrf contador1
clrf contador2
movlw d"5"
movwf contador3
dly1 decfsz contador1,f
goto dly1
decfsz contador2,f
goto dly1
decfsz contador3,f
goto dly1
return