Programació en C del PIC 16F690 amb PICkit 2

Referència Trucs Perifèrics   Recursos CITCEA
Tutorial Exemples Projectes   Inici

Temps de retard

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
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
#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 dóna cap error, no cal donar-hi importància.

També podeu consultar el manual del MPLAB XC8 al web de Microchip.

 

 

Licencia de Creative Commons
Esta obra de Oriol Boix está licenciada bajo una licencia no importada Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0.