Programació en C del PIC 18F45K20

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

Exemple EL - Encendre un LED

Es vol encendre el LED connectat a RD7 (el més proper a la vora de la placa. Per fer-ho, hem creat el següent programa:

#pragma config FOSC = INTIO67, FCMEN = OFF, IESO = OFF				// CONFIG1H
#pragma config PWRT = OFF, BOREN = SBORDIS, BORV = 30				// CONFIG2L
#pragma config WDTEN = OFF, WDTPS = 32768					// CONFIG2H
#pragma config MCLRE = OFF, LPT1OSC = OFF, PBADEN = ON, CCP2MX = PORTC		// CONFIG3H
#pragma config STVREN = ON, LVP = OFF, XINST = OFF				// CONFIG4L
#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF			// CONFIG5L
#pragma config CPB = OFF, CPD = OFF						// CONFIG5H
#pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF			// CONFIG6L
#pragma config WRTB = OFF, WRTC = OFF, WRTD = OFF				// CONFIG6H
#pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF		// CONFIG7L
#pragma config EBTRB = OFF							// CONFIG7H
#include "p18f45k20.h"				// Carrega el fitxer d'adreces i paràmetres del PIC 18F45K20
void main (void)				// Inici del programa principal
{
	TRISD = 0b01111111; 			// Posa el bit 7 del port D com a sortida
	LATDbits.LATD7 = 1;			// Activa el bit 7 del port D i, per tant, encén el LED
	while (1)				// Mentre el contingut del parèntesi sigui 1
	;					// repetirà aquesta línia (es bloqueja aquí)
}

De les tres parts que té un programa típic, aquí només en tenim dues ja que el nostre programa no fa servir cap variable.

A la primera part carreguem les dades del processador emprat i indiquem la configuració mínima.

A la segona part tenim el programa. A la tercera línia (pròpiament és la primera línia de programa) desactivem el bit 7 del registre TRISC per tal de configurar el bit 7 del port C com a sortida. A la quarta línia activem el bit 7 del port C, que correspon al LED que volem encendre. El programa ja està, la cinquena línia crea un bucle infinit sobre la sisena que és buida.

Una versió alternativa d'aquest programa seria:

#pragma config FOSC = INTIO67, FCMEN = OFF, IESO = OFF				// CONFIG1H
#pragma config PWRT = OFF, BOREN = SBORDIS, BORV = 30				// CONFIG2L
#pragma config WDTEN = OFF, WDTPS = 32768					// CONFIG2H
#pragma config MCLRE = OFF, LPT1OSC = OFF, PBADEN = ON, CCP2MX = PORTC		// CONFIG3H
#pragma config STVREN = ON, LVP = OFF, XINST = OFF				// CONFIG4L
#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF			// CONFIG5L
#pragma config CPB = OFF, CPD = OFF						// CONFIG5H
#pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF			// CONFIG6L
#pragma config WRTB = OFF, WRTC = OFF, WRTD = OFF				// CONFIG6H
#pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF		// CONFIG7L
#pragma config EBTRB = OFF							// CONFIG7H
#include "p18f45k20.h"				// Carrega el fitxer d'adreces i paràmetres del PIC 18F45K20
void main (void)				// Inici del programa principal
{
	TRISD = 0b01111111; 			// Posa el bit 7 del port D com a sortida
	PORTDbits.RD7 = 1;			// Activa el bit 7 del port D i, per tant, encén el LED
	while (1)				// Mentre el contingut del parèntesi sigui 1
	;					// repetirà aquesta línia (es bloqueja aquí)
}

A l'hora d'escriure, és indiferent escriure a PORTD o a LATD ja que LATD és copiat automàticament a PORTD. A l'hora de llegir no és el mateix ja que quan llegim LATD obtindrem el valor que hem escrit al port la darrera vegada (actuant com a sortida) mentre que llegint PORTD llegirem l'estat de la pota del microcontrolador. Per exemple, si la sortida està activada però té connectada una càrrega important (o té un curtcircuit) quan llegim LATD llegirem un 1 mentre que si llegim PORTD llegirem un 0 (coresponent al curtcircuit).

 

 

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