Tengo un problema y no se cual puede ser, tengo un código de leer tres infrarrojos de sharp por RA2,RA3 Y RA4 y de sacarme un valor digital al llegar a una cierta distancia por RC5, RC6, RC7 pero cuando conecto algo a RA2, o RA4, no me hace nada, y cuando lo conecto a RA3 me funciona pero me modifica además el RC7, bueno, aquí está el código que lo explica mejor:
org 0x00
goto inicio
org 0x08
org 0x18
org 000020h
inicio
;preparamos los registros
;configuramos los pines de E/S:
bsf TRISA, 0 ;entrada analógica del sensor
bsf TRISA, 2 ;entrada infrarrojo derecha
bsf TRISA, 3 ;entrada infrarrojo central
bsf TRISA, 4 ;entrada infrarrojo izquierda
bcf TRISC, 5 ;salida infrarrojo derecha
bsf TRISC, 6 ;salida infrarrojo central
bsf TRISC, 7 ;salida infrarrojo izquierda
clrf LATA ;reseteamos todos los puertos
clrf LATC
;configuramos las entradas analógicas
bsf ADCON0, 0 ;habilitar A/D
bsf ADCON0, 1 ;inicialmente a 0, poner a 1 para iniciar la conversión (comprobar despues hasta leer 0, finalizada la conversión)
bsf ADCON0, 3 ;SELECCIONAMOS EL CANAL C
bcf ADCON0, 2
bcf ADCON0, 4 ;canal simple habilitado
bcf ADCON0, 5 ;modo simple (=1 modo continuo)
bcf ADCON1, 4 ;buffer FIFO deshabilitado
bcf ADCON1, 6 ;Referencia de tensión analógica interna
bcf ADCON1, 7
bcf ADCON2, 0 ;reloj de conversión Fosc/4
bcf ADCON2, 1
bsf ADCON2, 2
bcf ADCON2, 3 ;sin retardo para la conversión
bcf ADCON2, 4
bcf ADCON2, 5
bcf ADCON2, 6
bcf ADCON2, 7 ;justificación izquierda
bcf ADCON3, 0 ;sin disparo para la conversión
bcf ADCON3, 1
bcf ADCON3, 2
bcf ADCON3, 3
bcf ADCON3, 4
bsf ANSEL0, 2 ;AN2 con entrada analógica y no digital(=0)
bsf ANSEL0, 3 ;AN3 con entrada analógica
bsf ANSEL0, 4 ;AN4 con entrada analógica
clrf ADCHS ;selección de grupos A,B,C,D
bsf ADCHS, 0 ;selecciono el AN4 en lugar de AN0
bsf ADCON0, 1 ;EMPEZAMOS LA CONVERSIÓN
polling
;COMPROBAMOS LOS INFRARROJOS ¿OBSTÁCULO?
btfss ADCON0, 1
call leer_analogico
goto polling
;SUBRUTINA LEER ANALÓGICO
leer_analogico
; movlw b'00010100' ;comprobamos si está a menos de 30cm (0.4v)
movlw b'00101110' ;comprobamos si está a menos de 15cm (0.9v)
subwf ADRESH
bnc encender ;si está a menos de 30cm encendemos un aviso
nop
nop
apagar
clrf alerta ;si no apagamos el aviso
return
encender
movlw 0x01
movwf alerta
comprueba
btfsc cont_an, 1 ;¿quién ha sido?
goto leer_infrarrojo3
btfss cont_an, 0
goto leer_infrarrojo1
goto leer_infrarrojo2
leer_infrarrojo1
btfss alerta, 0
goto cuenta1
goto reset1
cuenta1
movlw 0x01
addwf infra1
movlw 0xFF
subwf infra1
bnc alerta1
return
reset1
clrf infra1
bsf LATB, 7
bsf ADCON0, 3 ;SELECCIONAMOS EL CANAL D
bsf ADCON0, 2
bsf ADCON0, 1 ;volvemos a activar la lectura analógica
incf cont_an
return
alerta1
bcf LATB, 7
bsf ADCON0, 3 ;SELECCIONAMOS EL CANAL D
bsf ADCON0, 2
bsf ADCON0, 1 ;volvemos a activar la lectura analógica
incf cont_an
return
leer_infrarrojo2
btfss alerta, 0
goto cuenta2
goto reset2
cuenta2
movlw 0x01
addwf infra2
movlw 0xFF
subwf infra2
bnc alerta2
return
reset2
clrf infra2
bsf LATB, 6
bsf ADCON0, 3 ;SELECCIONAMOS EL CANAL B
bsf ADCON0, 2
bsf ADCON0, 1 ;volvemos a activar la lectura analógica
incf cont_an
return
alerta2
bcf LATB, 6
bsf ADCON0, 3 ;SELECCIONAMOS EL CANAL B
bsf ADCON0, 2
bsf ADCON0, 1 ;volvemos a activar la lectura analógica
incf cont_an
return
leer_infrarrojo3
btfss alerta, 0
goto cuenta3
goto reset3
cuenta3
movlw 0x01
addwf infra3
movlw 0xFF
subwf infra3
bnc alerta3
return
reset3
clrf infra3
bsf LATB, 5
bsf ADCON0, 3 ;SELECCIONAMOS EL CANAL C
bsf ADCON0, 2
bsf ADCON0, 1 ;volvemos a activar la lectura analógica
incf cont_an
return
alerta3
bcf LATB, 5
bsf ADCON0, 3 ;SELECCIONAMOS EL CANAL C
bsf ADCON0, 2
bsf ADCON0, 1 ;volvemos a activar la lectura analógica
incf cont_an
return
ESPERO QUE PODAIS AYUDARME HABER PORQUE NO ME FUNCIONA EL PROGRAMA
GRACIAS!!