hola a todos, tengo cierto problemas con un programa para un robot rastreador de luz pero es en la parte de comparacion de tres voltajes aqui esta un ejemplo de una parte del programa que hize para probar mas no me corre correctamente alguien me puede decir como puedo hacer una comparacion de tres voltajes q le entran a un pic 16f877
Código:
LIST P=16F877
INCLUDE "P16F877.INC"
RADIX HEX
ORG 0X00
GOTO INICIO
ORG 0X04
GOTO INICIO
UNOH equ 0x20
UNOL equ 0x21
DOSH equ 0x22
DOSL equ 0x23
TRESH equ 0x27
TRESL equ 0x28
CON EQU 0X2B
BComp EQU 0X2C
BComp2 EQU 0X24
BComp3 EQU 0X25
BComp4 EQU 0X26
INICIO BCF STATUS,6
BSF STATUS,5 ;CONFIGURA LOS PUERTOS DEL PIC como salidas o entradas
MOVLW B'00000000'
MOVWF TRISB
;-----------------------------------------
MOVLW B'10000000'
MOVWF ADCON1
MOVLW B'11010111'
MOVWF OPTION_REG
BCF STATUS,5
OPP MOVLW B'10000001' ; 'xx'xxx'x' 'x' configuro el conversor y selecciono el canal 0
MOVWF ADCON0
LAZOA ;CALL RETARDO
BSF ADCON0,2
LAZOB BTFSC ADCON0,2
GOTO LAZOB
MOVF ADRESH,W
MOVWF UNOH
BSF STATUS,5
MOVF ADRESL,W
BCF STATUS,5
MOVWF UNOL
BCF PIR1,ADIF
;-------------------------------------------------
MOVLW B'10001001' ; 'xx'xxx'x' 'x' configuro el conversor y selecciono el canal 1
MOVWF ADCON0
; CALL RETARDO
BSF ADCON0,2
BUCB BTFSC ADCON0,2
GOTO BUCB
MOVF ADRESH,W
MOVWF DOSH
BSF STATUS,5
MOVF ADRESL,W
BCF STATUS,5
MOVWF DOSL
BCF PIR1,ADIF
; CALL RETARDO
;--------------- CONVERSION A VOLTAJE ---------------------------------
BCF STATUS,6
BSF STATUS,5
BCF STATUS,C
RRF UNOH,F
RRF UNOL,F
BCF STATUS,C
RRF DOSH,F
RRF DOSL,F
BCF STATUS,C
;CALL RUTINA ;CONVIERTO A BCD
CLRF CON ;LIMPIO CONTADOR
CLRF BComp ;LIMPIO COMPARADOR
ARR movlw b'11111111'
movwf PORTB
CALL Comp ;COMPARO QUE CANAL ES MAYOR O SI SON IGUALES
MOVLW 0X5B
; MOVF Centena,W
; ADDLW 0X30
; MOVF Decena,W
; ADDLW 0X30
;
;MOVF Unidad,W
; ADDLW 0X30
MOVF BComp,W
SUBLW 0X01
BTFSS STATUS,Z
GOTO ARR
a movlw b'00000000'
movwf PORTB
goto a
; cALL RETARDO
; CALL RETARDO
; CALL RETARDO
; CALL RETARDO
; CALL RETARDO
; CALL BORRAR
GOTO OPP
;----------------------------------------------------------------
BORRAR
MOVLW .032
MOVWF CON
REDD
MOVLW 0X08
; CALL TRANS
DECFSZ CON,F
GOTO REDD
CLRF CON
RETURN
;-----------------------------------------------
GOTO LAZOA
RETARDO MOVLW D'1'
MOVWF TMR0
LAZOC BTFSS INTCON,T0IF
GOTO LAZOC
BCF INTCON,T0IF
RETURN
; ******************************
; Comparador de 16 Bit
; ******************************
Comp
movf UNOH, W
subwf DOSH, W
btfsc STATUS, Z
goto A1_IGU_B1
btfsc STATUS, C ; A1 <> B1
goto A_MEN_B
goto A_MAY_B
A1_IGU_B1:
movf UNOL, W
subwf DOSL, W
btfsc STATUS, Z
goto A_IGU_B ; A = B
btfsc STATUS, C ; A2 <> B2
goto A_MEN_B
A_MAY_B: ;VALOR 1
bsf BComp, 0
bcf BComp, 1
bcf BComp, 2
goto Salir
A_IGU_B: ;VALOR 2
bcf BComp, 0
bsf BComp, 1
bcf BComp, 2
goto Salir
A_MEN_B: ;VALOR 4
bcf BComp, 0
bcf BComp, 1
bsf BComp, 2
Salir:
return
; ******************************
Última edición por un moderador: