holas
no especificas que es lo que no sabes utilizar de las rutinas
;DEFINICIONES RAM
CBLOCK 0X20
N_POTE
ENDC
#DEFINE REG_POTEX (N_POTE+.1) ;+1 QUE EL ULTIMO REGISTRO USADO ASI SE PUEDEN HACER TANATAS CONVERSIONES DIFERENTES COMO ESPACIOS DE RAM QUEDEN
;LA RUTINA CANAL_AD_X SE MANEJA INDICANDOLE EL CANAL DONDE SE QUIERE HACER LA CONVERSION
;DECLARACIONES DE LOS CANALAES,CH, ANALOGICOS,AN, NUMERO DE CANAL,_X
;CH_AN_X
#DEFINE CH_AN_0 B'10000101'
#DEFINE CH_AN_1 B'10001101'
#DEFINE CH_AN_2 B'10010101'
#DEFINE CH_AN_3 B'10011101'
#DEFINE CH_AN_4 B'10100101'
#DEFINE CH_AN_5 B'10101101'
#DEFINE CH_AN_6 B'10110101'
#DEFINE CH_AN_7 B'10111101'
EJEMPLO_DE_USO
;-----------------------------CONFIGURAMOS EL CAD
CONFIG_ADCON1 ;000000000 TODOS LOS CANALES ANALOGICOS
BANKSEL ADCON1
MOVLW B'00000000'
MOVWF ADCON1
;-----------------------------
BUCLE ;ANTES DE NADA HAY QUE LIMPIAR LOS REGISTROS N_POTE Y FSR PARA QUE GUARDE
;EL RESULTADO DE LA CONVERSION EN EL ARRAY DE MEMORIA RESERVADO PARA ELLO, A PARTIR DE LA POSICION DE MEMORIA, REG_POTEX
BANKSEL N_POTE
CLRF N_POTE ;POTES Nº 0
MOVLW REG_POTEX ;DIRECCION DE LA MEMORIA RAM EN LA QUE EMPIEZA A GUARDAR LAS CONVERSIONES
MOVWF FSR
;0
MOVLW CH_AN_0 ;A W
CALL CANAL_AD_X ;CANALx DEL CAD
;1 ;Y GUARDA EL RESULTADO DE LA CONVERSION EN INDF ((REG_POTEX +.Nº DE VECES QUE SE LLAMA A LA RUTINA CANAL_ADX))
MOVLW CH_AN_1 ;A W
CALL CANAL_AD_X ;CANALx DEL CAD
GOTO BUCLE ;VUELVE A EMPEZAR
CANAL_AD_X ;SELECCIONA CANAL X DEL CAD NO INICIA LA CONVERSION
BANKSEL ADCON0
MOVWF ADCON0
CALL DEMORA_25uS ;EL TIEMPO DE ADQUISICION CORRECTO PARA CARGAR EL CONDENSADOR ANTES DE INICIAR LA CONVERSION
BANKSEL N_POTE
INCF N_POTE,F ;SIGUIENTE POTE
INCF FSR,F ;CADA VEZ QUE SE LLAMA A LA RUTINA QUE LEE EL
;VALOR DEL POTE, SE INCREMENTA EL REGISTRO FSR, PARA QUE REALICE LAS OPERACIONES
;EN EL REGISTRO DEL SIGUIENTE POTENCIOMETRO
BANKSEL ADCON0
BSF ADCON0,GO ;INICIA LA CONVERSION
ESPERA_CAD ;TESTEA HASTA QUE TERMINA LA CONVERSIÓN
BTFSC ADCON0,GO ;HASTA QUE SE PONE A CERO EL BIT GO/DONE
GOTO ESPERA_CAD ;VUELVE ATRAS HASTA QUE TERMINE
MOVF ADRESH,W
BANKSEL REG_DIVISOR
MOVWF REG_DIVISOR
RESTA
BANKSEL REG_POTEX
BCF STATUS,Z
SUBWF INDF,W
BTFSC STATUS,Z
RETURN
ENVIA_DATOS
BANKSEL REG_DIVISOR
MOVWF INDF
;aqui hace algo si el resultado de la conversion no es cero
RETURN ;Y VUELVE AL PROGRAMA
para utilizar la rutina solo tienes que poner n_pote en la ultima posicion de la ram que vayas a utilizar,
configuras ADCON1 segun los canales analogicos que quieras usar.(mirate el datasheet)
antes de llamar a la ruitna canal_ADX tienes que restaurar los valores de N_POTE y de FSR así por ej:
BANKSEL N_POTE
CLRF N_POTE ;POTES Nº 0
MOVLW REG_POTEX ;DIRECCION DE LA MEMORIA RAM EN LA QUE EMPIEZA A GUARDAR LAS CONVERSIONES
MOVWF FSR
con las definiciones CH_AN_
x seleccionas el canal que quieres convertir
movlw CH_AN_
3 = B'10011101'
y entonces llamas a la rutina
call CANAL_AD_X
esta coloca en la posicion (N_POTE + REG_POTEX) el resultado de la conversion
si haces
movlw CH_AN_0
call CANAL_AD_X ;pondra el resultado en REG_POTEX+ .1 la rutina siempre incf a N_POTE para que apunte a la siguiente posicion de la ram
si quieres hacer otra conversion a continuacion es igual, le indicas el canal donde lo quieres....
movlw CH_AN_4
....y llamas a la rutina
call CANAL_AD_X ;guardara el resultado del canal 4 en la posicion REG_POTEX+ .2 y asi hasta que vuelva a empezar, por eso lo de restaurar los valores de N_POTE y FSR antes de empezar a hacer conversiones. la rutina lo que hará, es si el resultado que hay en la posicion de memoria es diferente del que ha dado la conversion guarda el nuevo dato y lo que le pongas a continuacion como mostrar el resultado en la puerta x del pic, lcd, ..... nu se para que lo vas a usar
espero te ayude un saludo