Hola a todos.
Estoy programando un PIC 16F876 para que al meterle una señal entre 0 y 5V por el terminal RA0, me de a la salida su equivalente en binario. He hecho el programa, me compila bien, pero a la hora de probarlo resulta que a la salida siempre me da el mismo dato, y no consigo saber porque.
Os dejo el código que estoy utilizando a ver que me decis vale?
muchas gracias de antemano.
un saludo, Elena
CODIGO:
;===============Mapa de memorias===========================
CONTA01 equ 0x20
CONTA02 equ 0x21
CONTA03 equ 0X22
CONTA04 equ 0X23
;============== Configuración de puertos ==================
ORG 0x0000
GOTO INICIO
INICIO BSF ESTADO,5 ;cambio al banco 1 del pic
CLRF TRISB ;puerta B en salida
CLRF TRISC
CLRF ADRESH
MOVLW b'00001110' ;RA0 analógica resto digitales
MOVWF ADCON1
MOVLW b'00000001'
MOVWF TRISA
BCF ESTADO,5 ;Cambio al banco 0
CLRF ADRESL
BSF PUERTAA,1
MOVLW b'10000001' ;Reloj de conversion a 32Tosc
;canal 0 (RA)/conversor activo
MOVWF ADCON0
BSF PUERTAA,2
CALL RET
BSF ADCON0,2 ;Inicio de la conversion
BSF PUERTAA,3
CONVER1 BTFSC ADCON0,2 ;Chequeo para ver fin de conversion
GOTO CONVER1
BTFSS PIR1,6 ;Chequeo del bit ADIF si es 1 salta
;he indica el fin de la conversion
GOTO CONVER1
BSF PUERTAA,4
MOVLW ADRESH
MOVWF PUERTAB ;Leemos resultado de la conversion
MOVLW ADRESL
MOVWF PUERTAC
BCF ESTADO,5 ;Cambio banco 0
BCF PIR1,6 ;Ponemos a 0 ADIF (Registro PIR1)
;CALL BUSY
;CALL BUSY
;CALL BUSY
;CALL BUSY
;CALL BUSY
;CALL BUSY
BCF PUERTAA,4
;===================== RETARDO DE 12TAD=======================================
RET MOVLW b'01100000' ;12TAD (1TAD=8us)
MOVWF CONTA02
TRES DECFSZ CONTA02,1 ;DECREMENTA Y SI ES CERO SALTA
GOTO TRES
RETURN
;===================== RETARDO 1770 us =======================================
BUSY MOVLW b'00001001' ;Ponemos el contador a 09
MOVWF CONTA03 ;Guardamos valor en CONTA01
UNO MOVLW b'10010100' ;Ponemos el contador a 40
MOVWF CONTA04 ;Guardamos el valor en CONTA01
DOS DECFSZ CONTA04,1 ;Decrementamos CONTA01, si es cero salta
GOTO DOS ;Vuelve
DECFSZ CONTA03,1 ;Decrementamos CONTA02, si es cero salta
GOTO UNO ;Volvemos a recargar CONTA01
RETURN ;volver del retardo
END