Anem a provar el funcionament d'una entrada analògica. Agafarem l'entrada analògica on hi ha connectat el potenciòmetre i llegirem el valor de l'entrada.
En el nostre cas tindrem un resultat de 10 bits (valors de 000h a 3FFh; o sigui de 0 a 1023) però només tenim quatre LED. Si agaféssim els quatre bits de més a la dreta ens trobaríem que al llarg de tot el recorregut del potenciòmetre els valors passarien diverses vegades de 0000 a 1111 recorrent tots els valors intermedis. El mateix passaria si agaféssim bits del mig. En canvi, si agafem els bits de valor més alt (els de més a l'esquerra) només passarem un cop per cada combinació de bits en tot el recorregut de la roda del potenciòmetre.
El que farem doncs serà triar l'alineació a l'esquerra (ADFM valdrà 0). Quan acabi la conversió permutarem els nibbles del resultat (instrucció swapf) i copiarem el resultat al port on hi ha els LED. Estarem escribint valors a les altres quatre sortides però com no les farem servir no passa res. Si féssim servir les altres quatre sortides del port C caldria complicar el programa amb un emmascarament de bits.
La figura següent és un esquema del que fem amb els bits del resultat.

El programa que emprarem serà:
PROCESSOR 16F690 #include <xc.inc> config FOSC = INTRCIO, WDTE = OFF, PWRTE = OFF, MCLRE = OFF, CP = OFF config CPD = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF
PSECT code, class=CODE, delta=2, abs ; A l'inici de la memòria main: bsf RP0 ; Tria el banc 1 movlw 0xFF ; Posa l'acumulador a FFh (tot uns) movwf TRISA ; Posa tots els bits del port A com a entrada clrf TRISC ; Posa tots els bits del port C com a sortida movlw 00010000B ; Posa el conversor a 1/8 de la freqüència movwf ADCON1 ; Copia W a la configuració del conversor A/D bcf RP0 bsf RP1 ; Tria el banc 2 movlw 0xFF ; Posa l'acumulador a FFh (tot uns) movwf ANSEL ; Configura AN0-AN7 com entrades analògiques bcf RP0 bcf RP1 ; Tria el banc 0 movlw 00000001B ; activa el conversor A/D connectat a AN0 movwf ADCON0 ; amb el resultat justificat per l'esquerra Bucle: nop ; espera un microsegon nop ; espera un microsegon nop ; espera un microsegon nop ; espera un microsegon nop ; espera un microsegon bsf GO_DONE ; Inicia la conversió btfsc GO_DONE ; Quan el bit sigui 0 la conversió haurà acabat goto $-1 ; repetim la línia fins que deixi de ser 1 swapf ADRESH,w ; Permuta els nibbles dels bits superiors movwf PORTC ; Copia el resultat sobre els LED goto Bucle END main
Veiem que al començament hi ha uns quants canvis de banc (bits RP0 i RP1) ja que necessitem registres dels bancs 0, 1 i 2. Tota la part inicial del programa (fins a l'etiqueta Bucle) és on es configura el funcionament. En començar el bucle esperem els 5 μs i activem el bit GO_DONE per iniciar la conversió. La instrucció btfss mira l'estat del bit i si encara està activat la instrucció goto torna una línia enrere ($-1 vol dir l'anterior de l'actual) i ho torna a mirar. Quan el bit es desactiva es salta el goto i es tracta el resultat tal com hem comentat. Un cop fet això, es torna a repetir el cicle.
SI alimentem la placa amb el programador és probable que no arribem a encendre tots els LED perquè la tensió d'alimentació és una mica inferior a 5 V i, per tant, l'entrada analògica llegeix una tensió inferior a la màxima.

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