Es vol encendre el primer LED de la placa. Per fer-ho, hem creat el següent programa:
#pragma config FOSC = INTRCIO, WDTE = OFF, PWRTE = OFF, MCLRE = OFF, CP = OFF #pragma config CPD = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF #include <xc.h> // Carrega el fitxer de funcions
void main (void) // Inici del programa principal
{
TRISC = 0b11111110; // Posa el bit 0 del port C com a sortida
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 #pragma config CPD = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF #include <xc.h> // Carrega el fitxer de funcions
void main (void) // Inici del programa principal
{
TRISC = 0b11111010; // Posa els bits 0 i 2 del port C com a sortida
RC0 = 1; // Activa el bit 0 del port C i, per tant, encén el LED
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 #pragma config CPD = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF #include <xc.h> // Carrega el fitxer de funcions
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í)
}
}

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