Primero partamos de que el Pic funciona a 4 MHz, por lo general cada instruccion como ANDWF, BCF, BSF, etc. demora 4 ciclos de reloj, osea a 4 MHz podremos ejecutar 1 millon de instrucciones, que en tiempo equivale a que cada instruccion demora 1 microsegundo.
Pero hay instrucciones como CALL , GOTO, RETURN, etc que demoran el doble en ejecutarse osea 2 microsegundos. Otras intrucciones como BTFSC, BTFSS, etc. pueden demorar 1 o 2 microsegundos dependiendo de lo que esten haciendo.
Quedando claro lo anterior veamos el ejemplo
No te confundas con los nombres, estos los pone el programa.
Como dice Nelson, PDel0 y PDel1 variables usadas como contadores que son fijados a cierta valor, estos valores los calcula el programa dependiendo de la demora que necesites.
PLoop1, PLoop2, PDelL1 y PDelL2 son etiquetas, que sirven para realizar los loops y/o consumir tiempo, mas adelante se detallaran.
Ahora nos centraremos en el codigo de la demora:
DEMORA movlw .197 ; 1 set numero de repeticion (B)
movwf PDel0 ; 1
PLoop1 movlw .253 ; 1 set numero de repeticion (A)
movwf PDel1 ; 1
PLoop2 clrwdt ; 1 clear watchdog
clrwdt ; 1 ciclo delay
decfsz PDel1,1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0,1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2
return ; 2+2 Fin.
;---------------------------------------