Mira, me estoy guiando con otro programa que el circuito a la entrada teniene dos sensor lm35(sensor de temperatura y da como resultado un voltaje) que es lo que entra por el puerto A. Ya le puse en comentarios lo que yo creo que no voy a utilizar, pues no me interesa mostrar la temp. solo controlarla.
;programa para realizar una conversión analógica digital y da la temperatura en 2 digitos a un display
LIST P=16F877
include<p16f877.inc>
RDELAY EQU 0x21
CONTA0 EQU 0x22
CONTA1 EQU 0x23
CONTA2 EQU 0x24
conta_n EQU 0x25
DIS1 EQU 0x26
DIS2 EQU 0x27
temp EQU 0x28
contb_n EQU 0x29
conta EQU 0x30
;TABLA ADDWF PCL,1 ; Cargamos el valor del acumulador en el registro
; PLC. Cuando se ejecute esta instruccion el pic
; saltara inmediatamente a la direccion del programa
; que le hayamos invocado.
; En esta tabla almacenaremos los valores que hay
; que sacar por el puerto para que se muestren en
; el display los numeros del 0 a 9.
DISPLAY
; cero RETLW h'40' ; Para mostrar el 0
; uno RETLW h'79' ;Para mostrar el 1
; dos RETLW h'24' ;Para mostrar el 2
; tres RETLW h'30' ;Para mostrar el 3
; cuatro RETLW h'19' ;Para mostrar el 4
; cinco RETLW h'12' ;Para mostrar el 5
; seis RETLW h'02' ;Para mostrar el 6
; siete RETLW h'78' ;Para mostrar el 7
; ocho RETLW h'00' ;Para mostrar el 8
; nueve RETLW h'10' ;Para mostrar el 9
; diez RETLW h'40' ;Para mostrar el 0
;*****************************************************************
inicio
bsf STATUS,RP0 ; Selecciona Banco 1
movlw b'00011111'
movwf TRISA ; Configura PA como entrada (5 bits)
clrf ADCON1 ; 8 entradas Analogicas, justificado izquierda (6 bits menos sig. ADDRESL cero,), Vref=Vdd, Fosc/2
bsf ADCON1,ADFM ; Se justifica a la derecha.
clrf TRISC ; PC de salida
clrf TRISB ; PB Como salida;
bcf STATUS,RP0 ; selecciona BANCO 0
clrf ADCON0 ; Seleccion del canal 0, Fosc/2, conversion apagada, convertidor apagado
bsf ADCON0,0 ; Activa el convertidor A/D
convertir
call espera20u ;Crea un pequeno retardo
bsf ADCON0,2 ;Activa bandera GO/_Done
espera
btfsc ADCON0,2 ;espera que termine proceso de conversion
goto espera
bsf STATUS,RP0 ;SELECCION BANCO 1
movf ADRESH,W ;copia ADRESL a W
bcf STATUS,RP0 ;selecciona banco 0
movwf PORTD ;copia ADDRESL a PD
movf W,temp ;Copia w a temp
clrf DIS1 ; Inicializamos la variable DIS1
clrf DIS2 ; Inicializamos la variable DIS2
clrf conta; Inicializamos la variable conta
ciclope
movf temp,w ; Copia temp a w
goto verifica;
; xorwf conta,0 ; Realiza x-or con conta
; btfsc STATUS,Z ; Verifica el resultado es cero (son iguales)
; goto continua
; bcf STATUS,Z
; movlw h'0A' ; Carga 0A en W
; xorwf DIS1,0 ; Realiza X-OR W con PORTB
; btfss STATUS,Z ; Verifica si en resultado es cero (son iguales)
; goto continua1
; incf DIS2,1 ; Incrementa el valor de contb (2do Display)
; clrf DIS1
continua1
incf conta,1;
incf DIS1;
goto ciclope;
continua
desp1
movf DIS1,conta_n
movf DIS1,W ; Guarda el resultado en conta
; call TABLA
movwf conta_n
comf conta_n,0
movwf PORTC
desp2
movf DIS2,contb_n
movf DIS2,W ; Guarda el resultado en contb
; call TABLA
movwf contb_n
comf contb_n,0
movwf PORTB
goto convertir
espera20u
movlw 0x05
movwf CONTA0
ret1
decfsz CONTA0,1
goto ret1
return
verifica
movlw .28 ; para comparar temp alta (en decimales)
xorlw PORTA ; Resultado a W
btfss STATUS,Z ; si es 1 ignora la sig. instruccion
movwf PORTB ; Manda resultado a puerto B
movlw .21 ; para comparar temp baja
xorlw PORTA;
btfss STATUS,Z;
movwf PORTC;
movlw .24 ; temp promedio y adecuada
xorlw PORTA;
btfss STATUS,Z;
clrf PORTB;
movlw .24 ; temp promedio
xorlw PORTA;
btfss STATUS,Z;
clrf PORTC;
call inicio
end