Bueno, pues he avanzado un poco mas, ya tengo los dos ADC, la multiplicación de los datos y la división del resultado para poder mostrarlo en displays, y aquí les dejo el código para el que le interese, se que se puede mejorar pero bueno hasta ahora estoy aprendiendo
INCLUDE <P16F877.INC>
CONTA EQU 20
DATO1 EQU 21
DATO2 EQU 22
productol EQU 23
productoh EQU 24
DIVIDENDOH EQU 25
DIVIDENDOL EQU 26
DIVISORH EQU 27
DIVISORL EQU 28
RESULTADOH EQU 29
RESULTADOL EQU 2A
ORG 00
CALL configuracion
CALL principal
configuracion
bcf STATUS,RP0
bcf STATUS,RP1
bsf ADCON0,ADCS0
bsf ADCON0,ADON
bsf STATUS,RP0 ;BANCO 01
clrf TRISB
clrf TRISC
clrf TRISD
clrf ADCON1
bcf STATUS,RP0 ;BANCO 00
return
principal
call time_adq ;ESPERA tiempo de adquisicion
bsf ADCON0,GO ;INICIA CONVERSION
aca
btfsc ADCON0,GO ;esperamos final de conversion
goto aca
BTFSC ADCON0,CHS0 ;
GOTO CANAL01
movf ADRESH,0 ;MUEVO RESULTADO DE CONVERSION AL REG W
MOVWF DATO1
BSF ADCON0,CHS0
GOTO principal
CANAL01
movf ADRESH,00 ;MUEVO RESULTADO DE CONVERSION AL REG W
MOVWF DATO2
BCF ADCON0,CHS0
call multiplicacion
movf productol,0
movwf DIVIDENDOL
movf productoh,0
movwf DIVIDENDOH
CLRF DIVISORH
MOVLW 6C
MOVWF DIVISORL
CALL DIVISION
CALL VISUALIZACION
goto principal
multiplicacion
clrf productol
clrf productoh
movf DATO2,f
btfsc STATUS,Z
return
movf DATO1,w
mult
addwf productol
btfsc STATUS,C
incf productoh,f
decfsz DATO2,f
goto mult
RETURN
VISUALIZACION
MOVF RESULTADOH,0
MOVWF DIVIDENDOH
MOVF RESULTADOL,0
MOVWF DIVIDENDOL
CLRF DIVISORH
MOVLW 64
MOVWF DIVISORL
CALL DIVISION ;divide por 100 para saber las centanas del numero a mostrar
MOVF RESULTADOL,0
MOVWF PORTB
CLRF DIVISORH
MOVLW 0A
MOVWF DIVISORL
CALL DIVISION ;divide por 10 para saber las decenas del numero a mostrar
MOVF RESULTADOL,0
MOVWF PORTC
MOVF DIVIDENDOL,0
MOVWF PORTD ;lo que sobra son las unidades
RETURN
time_adq
movlw 20
movwf CONTA
aqui
decfsz CONTA
goto aqui
return
DIVISION
CLRF RESULTADOH
CLRF RESULTADOL
COMF DIVISORL,1 ;COMPLEMENTO A 2 DE DIVISOR
COMF DIVISORH,1
MOVLW 01
ADDWF DIVISORL,1
BTFSC STATUS,C
ADDWF DIVISORH,1
DIVISION1
MOVF DIVISORL,0
ADDWF DIVIDENDOL,1
BTFSC STATUS,C
INCF DIVIDENDOH,1
MOVF DIVISORH,0
ADDWF DIVIDENDOH,1
BTFSC STATUS,C
GOTO MAYORCERO
GOTO MENORCERO
MAYORCERO
MOVLW 01
ADDWF RESULTADOL,1
BTFSC STATUS,C
INCF RESULTADOH,1
GOTO DIVISION1
MENORCERO
COMF DIVISORL,1 ;COMPLEMENTO A 2 DE DIVISOR
COMF DIVISORH,1
MOVLW 01
ADDWF DIVISORL,1
BTFSC STATUS,C
ADDWF DIVISORH,1
MOVF DIVISORL,0
ADDWF DIVIDENDOL,1
BTFSC STATUS,C
INCF DIVIDENDOH,1
MOVF DIVISORH,0
ADDWF DIVIDENDOH,1
RETURN
END
Bueno y si no seria mucha molestia pedirle a alguien que me de una idea de como adecuar la señal de corriente para introducirla al pic, y si pudieran colaborar con el medidor de fase, se que tengo que hacer un detector de cruce por cero de cada señal y despues meter eso por CCP para asi medir el tiempo y por consiguiente el angulo, pero de eso ni idea.
Espero que el código le sirva a alguien y acepto sugerencias sobre como reducirlo porque hay algunas rutinas que se repiten pero a duras penas hice esto.
Suerte