En molts programes ens cal posar un temps de retard, ja sigui per esperar algun esdeveniment o per fer una velocitat de canvi compatible amb la visualització de l'usuari.
La manera més senzilla de fer un retard és amb la funció _delay( ) que fa un retard del nombre de cicles d'instrucció indicat entre parèntesi. La configuració per defecte del microcontrolador és amb un rellotge de 4 MHz de manera que el cicle d'instrucció va a 1 MHz, per tant un cicle és 1 μs. La funció està implementada al fitxer xc.h; o sigui que cal carregar-lo. La definició de la funció és:
void _delay(unsigned long cycles);
és a dir que la funció no retorna cap resultat. Un exemple d'ús:
... #include <xc.h> // Carrega el fitxer de funcions necessari per al compilador XC8
void main (void){ // Inici del programa principal
...
_delay(200000); // Retard de 200000 cicles (aprox. 0,2 s)
...
} // Fi del programa
Si volem més precisió, tenim dues funcions més: __delay_us( ) i __delay_ms( ), que fan un retard del temps especificat, la primera en μs i la segona en ms. Per tal que el compilador pugui implementar-ho, necessita saber la freqüència del rellotge del processador que li indicarem amb una línia addicional a la part de configuració, per exemple:
... #include <xc.h> // Carrega el fitxer de funcions necessari per al compilador XC8 #define _XTAL_FREQ 4000000 // La freqüència del rellotge és 4 MHz
void main (void){ // Inici del programa principal
...
__delay_ms(500); // Retard de mig segon
...
} // Fi del programa
Per algun motiu desconegut, el programa MPLAB X IDE posa un senyal d'advertència al costat de les línies on hi ha __delay_us( ) o __delay_ms( ). Si quan compila no dona cap error, no cal donar-hi importància.
També podeu consultar el manual del MPLAB XC8 al web de Microchip.

Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.