En aquest cas tindrem un potenciòmetre connectat a una entrada analògica i escriurem el valor llegit a la pantalla.
En el nostre cas tindrem un resultat de 10 bits (valors de 000h a 3FFh; o sigui de 0 a 1023) que guardarem en una variable entera. El que farem doncs serà triar l'alineació a la dreta (ADFM valdrà 1). Un cop tinguem el valor, en separarem els dígits, els convertirem a caràcters ASCII i els enviarem a la pantalla.
El programa que emprarem serà:
#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 #define _XTAL_FREQ 4000000 // La freqüència del rellotge és 4 MHz
unsigned int Lectura; // Valor llegit char Digits[5]; // Variable amb el número dígit a dígit // Digits[0] són les unitats
// Definició de les funcions que farem servir void EnviaL(char Caracter); // Envia un caràcter void Esborra(void); // Esborra la pantalla i posa el cursor a l'inici
void main (void){
TRISC = 0b00000000; // Posa el port C com a sortida
TRISB = 0b00000000; // Posa el port B com a sortida
TRISA = 0xFF; // Posa el port B com a entrada
ANSEL = 0; // Desactiva totes les entrades analògiques
ANSELH = 0;
ANSELbits.ANS0 = 1; // I ara activa la del potenciòmetre (AN0)
ADCON1 = 0b00010000; // Posa el conversor a 1/8 de la freqüència
ADCON0 = 0b10000001; // Activa el conversor connectat a AN0
// amb el resultat justificat per la dreta
__delay_ms(2000); // Esperem que arrenqui la pantalla
TXSTAbits.BRGH = 1; // Configuració de velocitat
BAUDCTLbits.BRG16 = 0; // Paràmetre de velocitat de 8 bits
SPBRG = 25; // Velocitat de 9600 baud
TXSTAbits.SYNC = 0; // Comunicació asíncrona
TXSTAbits.TX9 = 0; // Comunicació de 8 bits
RCSTAbits.SPEN = 1; // Activa comunicació sèrie
TXSTAbits.TXEN = 1; // Activa comunicació
while (1){ // Bucle infinit
Esborra(); // Esborra la pantalla i posa el cursor a l'inici
ADCON0bits.GO = 1; // Posa en marxa el conversor
while (ADCON0bits.GO == 1) // Mentre no acabi
; // ens esperem
Lectura = ADRESH;
Lectura = Lectura << 8;
Lectura = Lectura | ADRESL; // Valor llegit
for (signed char j = 0; j < 5; j++){ // 5 dígits
Digits[j] = (Lectura % 10) + '0'; // Li sumem el codi ASCII de 0
Lectura = Lectura / 10;
}
for (signed char j = 4; j >= 0; j--){ // 5 dígits
EnviaL(Digits[j]);
}
__delay_ms(1000); // Retard per permetre la visualització
}
}
void EnviaL(char Caracter) {
TXREG = Caracter; // Agafa el caràcter i l'envia
__delay_ms(1); // Donem temps
while (PIR1bits.TXIF == 0) // Esperem que s'acabi d'enviar
; // No fem res
}
void Esborra(void) {
EnviaL(254); // Caràcter de control
EnviaL(1); // Esborra la pantalla i posa el cursor a l'inici
}

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