Programació en C del PIC 16F690 amb PICkit 2

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

Exemple EL - Encendre un LED

Es vol encendre el primer LED (el més proper al polsador) de la placa. Per fer-ho, hem creat el següent programa:

#pragma config FOSC = INTRCIO, WDTE = OFF, PWRTE = OFF, MCLRE = OFF, CP = OFF, CPD = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF
#include "pic16f690.h"				// Carrega el fitxer d'adreces i paràmetres del PIC 16F690
void main (void)				// Inici del programa principal
{
	TRISC = 0b11111110; 			// Posa el bit 0 del port C com a sortida
	PORTCbits.RC0 = 1;			// Activa el bit 0 del port C 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 0 del registre TRISC per tal de configurar el bit 0 del port C com a sortida. A la quarta línia activem el bit 0 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.

Provem d'encendre dos LED:

#pragma config FOSC = INTRCIO, WDTE = OFF, PWRTE = OFF, MCLRE = OFF, CP = OFF, CPD = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF
#include "pic16f690.h"				// Carrega el fitxer d'adreces i paràmetres del PIC 16F690
void main (void)				// Inici del programa principal
{
	TRISC = 0b11111010; 			// Posa els bits 0 i 2 del port C com a sortida
	PORTCbits.RC0 = 1;			// Activa el bit 0 del port C i, per tant, encén el LED
	PORTCbits.RC2 = 1;			// Activa el bit 2 del port C i, per tant, encén el LED
	while (1){				// Mentre el contingut del parèntesi sigui 1
		;				// repetirà aquesta línia (es bloqueja aquí)
	}
}

Observem que només s'encén el LED 2. Per què passa això? L'activació o desactivació de bits sobre els ports no funciona igual com amb la resta de memòria. Quan hi ha una instrucció de bits el microcontrolador llegeix l'adreça completa (vuit bits), modifica el bit i torna a escriure l'edreça completa. En el cas dels ports, el que es llegeix no és l'estat de les sortides sinó el de les entrades. Així quan intentem encendre el segon LED, es llegeix l'estat de les entrades i com l'entrada RC0 està desactivada tenim un zero en aquesta posició, es canvia el bit 2 i s'escriu. Una versió alternativa d'aquest programa seria:

#pragma config FOSC = INTRCIO, WDTE = OFF, PWRTE = OFF, MCLRE = OFF, CP = OFF, CPD = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF
#include "pic16f690.h"				// Carrega el fitxer d'adreces i paràmetres del PIC 16F690
void main (void)				// Inici del programa principal
{
	TRISC = 0b11111010; 			// Posa els bits 0 i 2 del port C com a sortida
	PORTC = 0b00000101;			// Activa els bits 0 i 2 del port C i, per tant, encén el LED
	while (1){				// Mentre el contingut del parèntesi sigui 1
		;				// repetirà aquesta línia (es bloqueja aquí)
	}
}

 

 

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