LIST P=16F876A
INCLUDE <P16F876A.INC>
BYTEALTO_1 EQU 0X20
BYTEBAJO_1 EQU 0X21
BYTEALTO_2 EQU 0X22
BYTEBAJO_2 EQU 0X23
BYTEALTO_3 EQU 0X24
BYTEBAJO_3 EQU 0X25
CONTADOR EQU 0X26
CONSUMO_1 EQU 0X27
CONSUMO_11 EQU 0X28
CONSUMO_2 EQU 0X29
CONSUMO_22 EQU 0X30
CONSUMO_3 EQU 0X31
CONSUMO_33 EQU 0X32
ORG 0X00
BCF STATUS,IRP
BCF STATUS,RP1 ;BANCO 0 O 1
BSF STATUS,RP0 ;BANCO 1
MOVLW B'10000100' ;JUSTIFICADO A LA DERECHA, RA0,1,3 ANALOGO, VDD, VSS
MOVWF ADCON1
BCF STATUS,RP0 ;BANCO 0
MOVLW B'1000001' ;CANAL 0, MODULO HABILITADO
MOVWF ADCON0
CALL DEMORA_20US ; DEMORA DE ADQUISICION
BSF ADCON0,GO ; PONE EN MARCHA LA ADQUICICION
CALL DATO1
MOVLW B'10001001' ;CANAL 1, MODULO HABILITADO
CALL DEMORA_20US ; DEMORA DE ADQUSISCION
BSF ADCON0,GO ;PONE EN MARCHA LA ADQUSICION
CALL DATO2
MOVLW B'10011001' ;CANAL3, MODULO HABILITADO
MOVWF ADCON0
CALL DEMORA_20US ;DEMORA DE ADQUSICION
BSF ADCON0,GO ;PONE EN MARCHA LA ADQUISICION
CALL DATO3
Mul_1
DECF BYTEBAJO_1,1 ;DECREMENTA EL VALOR
CLRW
ADDLW B'00011110' ;SUMO 30 QUE ES LA RESOLUCION Y LA RAZON DE TRANSFORMACION
MOVF C,CONSUMO_11 ;MUEVO EL CARRIE A FINAL DEL VALOR ALTO (error)
BTFSC BYTEBAJO_1 ; CONSULTA POR SI EL REGISTRO LLEGO A CERO.
GOTO Mul_1 ; VUELVE A MULTIPLICAR
Mul_2
MOVWF CONSUMO_1 ;DESPLAZAMOS LOS VALORES A NUEVO REGISTRO
DECF BYTEALTO_1,1 ;DECREMENTA EL VALOR
CLRW
ADDLW B'00011110' ;SE SUMA 30 QUE ES LA RESOLUCION Y LA RAZON DE TRANSFORMACION
BTFSC BYTEALTO_1 ; CONSULTA POR SI EL REGISTRO LLEGO A CERO
GOTO Mul_2
ADDWF CONSUMO_11,1 ;SUMO EL CARRIE CON LA MULTIPLICACION Y LO GUARDO EN EL REGISTRO.
Mul_3
DECF BYTEBAJO_2,1 ;DECREMENTA EL VALOR
CLRW
ADDLW B'00011110' ;SUMO 30 QUE ES LA RESOLUCION Y LA RAZON DE TRANSFORMACION
MOVF C,CONSUMO_22 ;MUEVO EL CARRIE A FINAL DEL VALOR ALTO
BTFSC BYTEBAJO_2 ; CONSULTA POR SI EL REGISTRO LLEGO A CERO.
GOTO Mul_3 ; VUELVE A MULTIPLICAR
Mul_4
MOVWF CONSUMO_2 ;DESPLAZAMOS LOS VALORES A NUEVO REGISTRO
DECF BYTEALTO_2,1 ;DECREMENTA EL VALOR
CLRW
ADDLW B'00011110' ;SE SUMA 30 QUE ES LA RESOLUCION Y LA RAZON DE TRANSFORMACION
BTFSC BYTEALTO_2 ; CONSULTA POR SI EL REGISTRO LLEGO A CERO
GOTO Mul_4
ADDWF CONSUMO_22,1 ;SUMO EL CARRIE CON LA MULTIPLICACION Y LO GUARDO EN EL REGISTRO.
Mul_5
DECF BYTEBAJO_3,1 ;DECREMENTA EL VALOR
CLRW
ADDLW B'00011110' ;SUMO 30 QUE ES LA RESOLUCION Y LA RAZÓN DE TRANSFORMACION
MOVF C,CONSUMO_33 ;MUEVO EL CARRIE A FINAL DEL VALOR ALTO
BTFSC BYTEBAJO_3 ; CONSULTA POR SI EL REGISTRO LLEGO A CERO.
GOTO Mul_5 ; VUELVE A MULTIPLICAR
Mul_6
MOVWF CONSUMO_3 ;DESPLAZAMOS LOS VALORES A NUEVO REGISTRO
DECF BYTEALTO_3,1 ;DECREMENTA EL VALOR
CLRW
ADDLW B'00011110' ;SE SUMA 30 QUE ES LA RESOLUCION Y LA RAZON DE TRANSFORMACION
BTFSC BYTEALTO_3 ; CONSULTA POR SI EL REGISTRO LLEGO A CERO
GOTO Mul_6
ADDWF CONSUMO_33,1 ;SUMO EL CARRIE CON LA MULTIPLICACION Y LO GUARDO EN EL REGISTRO.
DATO1
BTFSC ADCON0,GO ;ESPERA QUE TEMINE LA CONVERCION
GOTO DATO1
MOVF ADRESH,W ;MOVEMOE EL RESULTADO DE LA CONVERCION (ALTO)
MOVWF BYTEALTO_1 ;SE GUARDA LO OBTENIDO
BSF ESTATUS,RP0 ;BANCO 1
MOVF ADRESL,W ;MOVEMOS EL RESULTADO DE LA CONVERSON (BAJO)
MOVWF BYTEBAJO_1 ;SE GUARDA LO OBTENIDO
BCF ESTATUS,RP0 ;BANCO 0
BSF ADCON0,ADON ;APAGA EL MODULO DE CONVERCION.
DATO2
BTFSC ADCON0,GO ;ESPERA QUE TEMINE LA CONVERCION
GOTO DATO2
MOVF ADRESH,W ;MOVEMOE EL RESULTADO DE LA CONVERCION (ALTO)
MOVWF BYTEALTO_2 ;SE GUARDA LO OBTENIDO
BSF ESTATUS,RP0 ;BANCO 1
MOVF ADRESL,W ;MOVEMOS EL RESULTADO DE LA CONVERSON (BAJO)
MOVWF BYTEBAJO_2 ;SE GUARDA LO OBTENIDO
BCF ESTATUS,RP0 ;BANCO 0
BSF ADCON0,ADON ;APAGA EL MODULO DE CONVERCION.
DATO3
BTFSC ADCON0,GO ;ESPERA QUE TEMINE LA CONVERCION
GOTO DATO3
MOVF ADRESH,W ;MOVEMOE EL RESULTADO DE LA CONVERCION (ALTO)
MOVWF BYTEALTO_3 ;SE GUARDA LO OBTENIDO
BSF ESTATUS,RP0 ;BANCO 1
MOVF ADRESL,W ;MOVEMOS EL RESULTADO DE LA CONVERSON (BAJO)
MOVWF BYTEBAJO_3 ;SE GUARDA LO OBTENIDO
BCF ESTATUS,RP0 ;BANCO 0
BSF ADCON0,ADON ;APAGA EL MODULO DE CONVERCION.
Bucle
goto Bucle
;**** Demora ****
DEMORA_20US
movlw 0x05 ;
movwf Contador ; Iniciamos contador1.-
Repeticion
decfsz Contador,1 ; Decrementa Contador1.-
goto Repeticion ; Si no es cero repetimos ciclo.-
return ; Regresa de la subrutina.-
end