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:
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: