En aquest exemple fem servir cinc polsadors connectats a una sola entrada per encendre els LED de la placa. En aquest cas l'entrada és AN2 (RA2). Agafem un rang de 10 cap a cada costat del valor teòric que correspon a cada polsador. Cada polsador encén el LED que li correspon i el P5 els encén tots.
El programa serà el següent:
#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 necessari per al compilador XC8
// Definició de les funcions que farem servir char Polsador(void); // Funció de lectura dels polsadors
char Polsad; // Polsador que s'ha premut
void main (void) {
ANSEL = 0b00000101; // Configura AN0 i AN2 com entrada analògica
ANSELH = 0; // Desactiva les altres entrades analògiques
TRISC = 0; // Tot el port C és de sortida
TRISB = 0; // Tot el port B és de sortida
TRISA = 0xFF; // Tot el port A és d'entrada
ADCON1 = 0b00010000; // Posa el conversor a 1/8 de la freqüència
ADCON0 = 0b00001001; // Activa el conversor A/D connectat a AN2
// amb el resultat justificat per l'esquerra
while (1) {
Polsad = Polsador(); // Llegim els polsadors
if (Polsad == 5) { // Si s'ha premut el polsador 5
PORTC = 0b00001111; // Encén tots els LED
}
if (Polsad == 4) { // Si s'ha premut el polsador 4
PORTC = 0b00001000; // Encén el LED 4
}
if (Polsad == 3) { // Si s'ha premut el polsador 3
PORTC = 0b00000100; // Encén el LED 3
}
if (Polsad == 2) { // Si s'ha premut el polsador 2
PORTC = 0b00000010; // Encén el LED 2
}
if (Polsad == 1) { // Si s'ha premut el polsador 1
PORTC = 0b00000001; // Encén el LED 1
}
if (Polsad == 0) { // Si no s'ha premut cap polsador (o dos a la vegada)
PORTC = 0b00000000; // Apaga tots els LED
}
_delay(200000); // Retard per permetre la visualització
}
}
char Polsador(void) {
char Pols = 0;
ADCON0bits.GO = 1; // Posa en marxa el conversor
while (ADCON0bits.GO == 1) // Mentre no acabi
; // ens esperem
if (ADRESH < 220 && ADRESH > 200) {
Pols = 1; // Comprova polsador 1
}
if (ADRESH < 194 && ADRESH > 174) {
Pols = 2; // Comprova polsador 2
}
if (ADRESH < 163 && ADRESH > 143) {
Pols = 3; // Comprova polsador 3
}
if (ADRESH < 90 && ADRESH > 70) {
Pols = 4; // Comprova polsador 4
}
if (ADRESH < 55 && ADRESH > 35) {
Pols = 5; // Comprova polsador 5
}
return Pols;
}

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