Problema programacion pic. Robot seguidor de luz

Buenas soy nuevo en este foro y necesito ayuda, estoy realizando un programa en lenguaje ensamblador con el pic 16f876A, el funcionamiento del programa es el de un seguidor de luz formado por dos resistencias y dos motores, el programa lo estoy empezando y lo que adjunto seria solo una parte del proyecto final. El problema es que solo me funciona bien una de las LDR en proteus que cuando recibe menos de 4v el pic en el puerto RA0 funciona el motor contrario a cada ldr. He revisado el programa y no se donde esta el problema en un inicio pensé que en el conversor pero para ello instale unos leds en el puerto B para que me sacara el registro adresh y eso funciona bien luego ahi no esta. Les agradezco su atención muchas gracias.

PROGRAMA:
Código:
  LIST P=16F876A
   INCLUDE "p16F876A.INC"
   CONTA1 EQU 0X20
   CONTA2 EQU 0X21
   CONTA3 EQU 0X22
   VALOR1 EQU 0X23
   VALOR2 EQU 0X25
   VALUZI EQU 0X26
   VALUZD EQU 0X27
   
   ORG H'0000'
   GOTO INICIO
   ORG H'0005'   


   


INICIO 

   BCF STATUS,5
   CLRF VALUZI
   CLRF VALUZD
   CLRF PORTA
   CLRF PORTC
   CLRF INTCON

   BSF STATUS,5
   BSF TRISA,0
   BSF TRISA,1
   CLRF TRISC
   CLRF TRISB
   
   
   MOVLW b'00000100' ; CONFIGURACION ADCON1
   MOVWF ADCON1
START

   BCF STATUS,5
   MOVLW   b'11000001'   ; Se activa el conversor en RA0
   MOVWF   ADCON0      ; Se activa el conversor
   CALL   RETA
   BSF   ADCON0,GO
   
CONVERSOR1         ; pregunto si ha terminado la conversion
   BTFSC    ADCON0,GO
   GOTO   CONVERSOR1
   
   MOVF   ADRESH,W   ; guardo el valor de la luz del ldr derecho
   MOVWF   VALUZD
   CLRW
   MOVLW   b'11001001'   ; Se activa el conversor en RA1
   MOVWF   ADCON0      
   CALL   RETA
   BSF   ADCON0,GO
   
CONVERSOR2         ; pregunto si ha terminado la conversion
   BTFSC    ADCON0,GO
   GOTO   CONVERSOR2
   CALL   RETA
   MOVF   ADRESH,W   ; guardo el valor de la luz del ldr izquierdo
   MOVWF   VALUZI
   MOVWF   PORTB
   CLRW

PRINCIPAL
   CLRW
   MOVLW b'11001100'   ; comoparo el valor del ldr derecho si es menor de 204 (4v), si es menor activo motor izquierdo
   SUBWF VALUZD,W      ; si no es menor vemos el valor del ldr izquierdo, para ver si estraa parado o solo va hacia la derecha
   BTFSS STATUS,C
   GOTO GIRAR
   GOTO COMPIZQ
   

VOLVER            ; paramos el coche
   BCF PORTC,0
   BCF PORTC,1
   CALL RETA
   
   GOTO START

COMPIZQ            ; vemos si el coche va a la izquierda o se para

   MOVLW b'1101100'
   SUBWF VALUZI,0
   BTFSS STATUS,C
   GOTO IZQUIERDA
   GOTO VOLVER
   

GIRAR            ;vemos si el coche va recto o a la derecha
   CLRW
   MOVLW b'11001100'
   SUBWF VALUZI,0
   BTFSS STATUS,C
   GOTO RECTO
   GOTO DERECHA
   
   

RECTO   
   BSF PORTC,1
   BSF PORTC,0
   CALL RETA
    
   
   GOTO START 

DERECHA   
   BCF PORTC,1
   BSF PORTC,0
   CALL RETA
   
   
   GOTO START
   
IZQUIERDA   

   BSF PORTC,1
   BCF PORTC,0
   CALL RETA
   
   GOTO START







;--------------------- RETARDOS----------------------
RETA
   MOVLW D'5'
   MOVWF CONTA1    
TRES   
   MOVLW D'80'
   MOVWF CONTA2
DOS
   MOVLW D'250'
   MOVWF CONTA3
UNO
   NOP
   NOP
   DECFSZ CONTA3,1
   GOTO UNO
   DECFSZ CONTA2    
   GOTO DOS
   DECFSZ CONTA1,1
   GOTO TRES
RETURN

END
 
Última edición por un moderador:
Atrás
Arriba