Programació en C del PIC 16F690

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

Funcions

Una funció és un tros de programa que fa una tasca específica. Les funcions permeten definir aquesta tasca (les seves instruccions) en forma separada i després podem fer servir la funció diverses vegades en el mateix programa. Les funcions es caracteritzen pel seu nom.

Quan es fa la crida a una funció se li passen uns paràmetres, és a dir les variables amb les que haurà de fer el càlcul. Normalment la funció retorna un resultat que passa a substituir el nom de la funció en el lloc on se la crida.

Imaginem-nos que volem fer una funció que calcula l'àrea d'un triangle per emprar-la en un programa en el que hem de sumar les àrees de tres triangles. El tros de programa que crida a la funció podria ser:

	...
	total = area(b1, h1) + area (b2, h2) + area(2*sb3, h3);
	...

Cada cop que cridem a la funció, aquesta s'executarà amb els paràmetres enviats. L'equació de dalt sumarà els tres valors obtinguts com a resultat de les tres crides a la funció.

Els paràmetres poden ser variables (b1, b2, etc.) o expressions més complicades (2*sb3).

En la definició de la funció cal especificar el tipus de variable de cada paràmetre i el del resultat. La definició de la funció anterior podria ser:

float area(float base, float altura)
{
	float resultat;
	resultat = (base * altura) / 2;
	return resultat;
}

Dins el parèntesi de la primera línia li definim el nom de les variables que fan de paràmetres dient-li que són de tipus float. També li diem que el resultat de la funció es comportarà com un valor float.

Fixem-nos que els noms dels paràmetres a la definició de la funció són els que farem servir dintre de la definició de la funció però en la línia on la cridem hi podem posar qualsevol altra variable o expressió; serà l'ordre dels paràmetres de la crida el que indicarà a quina variable interna va cada valor. Per exemple en la tercera crida el primer paràmetre és 2*sb3, doncs aquest valor serà el que es guardarà a base durant els càlculs.

En la primera línia dins la funció definim la variable resultat. Aquesta serà una variable local, és a dir que només existeix dins la funció. També són variables locals base i altura.

El valor que retorna la funció és el que posem després de la paraula return.

La funció area la podríem definir de la següent forma (més compacta):

float area(float base, float altura)
{
	return (base * altura) / 2;
}

Una funció pot tenir més d'una sentència return, per exemple:

float modul(float valor)
{
	if (valor >= 0)
		return valor;
	else
		return -valor;
}

També hi pot haver funcions que facin una tasca específica però que no retornin cap resultat. Per exemple, podem tenir una funció que escrigui una lletra a una posició d'una pantalla. En C aquestes funcions es defineixen com a void (sense tipus). Per exemple:

void escriu_pantalla(int x, int y, char lletra)
{
	...
}

Les funcions void no tenen la sentència return ja que no hi ha cap valor a retornar; la funció s'acaba quan arriba al final.

El programa principal també és una funció que és de tipus void i no té paràmetres:

void main (void){
	...
}

És important destacar que la funció ha d'estar definida abans de ser cridada. Normalment les funcions les hem de modificar molt menys que el programa principal (main) i, per tant, és més pràctic tenir el programa principal tan amunt com sigui possible i les funcions al final. Tenim la possibilitat de fer una definició bàsica de les funcions (indicant només el nom i els paràmetres) al començament del programa i deixar la definició completa de la funció al final.

...
...
void Funcio(char Valor);
void main (void) {
	...
	while (1) {
		...
		Funcio(Val);
		...
	}
}
void Funcio(char Valor) {			// Envia un joc de valors als tres MAX7221
	...
}

Les nostres funcions poden estar en un fitxer separat i així és més fàcil poder-les carregar en tots els programes en els que les necessitem. Per carregar el fitxer de funcions cal fer servir una instrucció #include, tal com es mostra a l'exemple ST.

 

 

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