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à:
#include <p16F690.inc> __config (_INTRC_OSC_NOCLKOUT&_WDT_OFF&_PWRTE_OFF&_MCLRE_OFF&_CP_OFF&_BOR_OFF&_IESO_OFF&_FCMEN_OFF)
org 0 Inici bsf STATUS,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 b'00010000' ; Posa el conversor a 1/8 de la freqüència movwf ADCON1 ; Copia W a la configuració del conversor A/D bcf STATUS,RP0 bsf STATUS,RP1 ; Tria el banc 2 movlw 0xFF ; Posa l'acumulador a FFh (tot uns) movwf ANSEL ; Configura AN0-AN7 com entrades analògiques bcf STATUS,RP0 bcf STATUS,RP1 ; Tria el banc 0 movlw b'00000001' ; 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, en total 5 bsf ADCON0,GO ; Inicia la conversió btfsc ADCON0,GO ; 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
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 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'actual menys 1) 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.

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