LIST P=16F819
#INCLUDE<P16F819.INC>
;DECLARACION DE VARIABLES
;CONVERSOR ANALOGO DIGITAL A UN DIGITO. DISPLAY
;
TIMER0 EQU 01
PCL EQU 02
STATUS EQU 03
PORTA EQU 05
PORTB EQU 06
ADCON0 EQU 1F
ADRESL EQU 9E
ADRESH EQU 1E
INTCON EQU 0B
AVE_LOW EQU 20
AVE_HIG EQU 21
JAI_LOW EQU 22
JAI_HIG EQU 23
COS_LOW EQU 24
COS_HIG EQU 25
SUC_LOW EQU 26
SUC_HIG EQU 27
REG1 EQU 28
REG2 EQU 29
REG3 EQU 2A
NAL EQU 2B
VALLEN EQU 2C
UNO EQU 2D
DOS EQU 2E
CERO EQU 2F
; EQU 30
; EUQ 31
; EQU 32
;BITS
ADIF EQU 6
GODONE EQU 2
ADON EQU 0
ADFM EQU 7
C EQU 0
ORG 00
GOTO INICIO
TABLA ADDWF PCL,1 ;DISPLAY DE ANODO COMUN
RETLW B'11000000' ;0
RETLW B'11111001' ;1
RETLW B'10100100' ;2
RETLW B'10110000' ;3
RETLW B'10011001' ;4
RETLW B'10010010' ;5
RETLW B'10000010'
RETLW B'11111000'
RETLW B'10000000'
RETLW B'10011000' ;9
RETAR
DEC4 MOVLW .180
MOVWF REG2
DEC5 MOVLW .160
MOVWF REG3
DEC6 DECFSZ REG3,1
GOTO DEC6
DECFSZ REG2,1
GOTO DEC5
RETURN
RETARD
MOVLW .100 ;RETARDO PARA MENSAJE
MOVWF REG1
nop
nop
nop
nop
DEC9 DECFSZ REG1,1
GOTO DEC9
RETURN
INICIO
BSF STATUS,5
BCF STATUS,6
CLRF PORTB
MOVLW B'00000001'
MOVWF PORTA
COROSO CALL CONVERSIONANALOGODIGITAL
CALL MULTIPLICACION
CALL B2BCD
CALL VISUALIZACION
GOTO COROSO
CONVERSIONANALOGODIGITAL
MOVLW B'10001110' ;RA0 ANALOGO JUSTIFICACION LOS OCHO PRIMEROS BITS
DE ADRESL Y DOS BITS DE ADRESH
MOVWF ADCON1
BCF STATUS,5
EEE MOVLW B'10000001'
MOVWF ADCON0
CALL RETARD
BCF PIR1,ADIF
BSF ADCON0,GODONE
CALL RETARD
E BTFSS PIR1,ADIF
GOTO E
BSF STATUS,5
MOVF ADRESL,0 ;LOW PARTE
BCF STATUS,5
MOVWF JAI_LOW
MOVF ADRESH,0 ;HIG PARTE
MOVWF JAI_HIG
BCF STATUS,0 ;RA1 Y RA2 ADRESH
MOVLW .232
MOVWF AVE_LOW
MOVLW .1
MOVWF AVE_HIG
RETURN
MULTIPLICACION ;RUTINA MULTIPLICACION ENTRE DOS NUMEROS DE 16 BITS
MOVLW .16 ;LOS NUMEROS SON AVE Y JAI .EL RESULTADO QUEDA EN COS Y SUC
.
MOVWF NAL ;JAI PIERDE EL NUMERO QUE TRAIA Y AVE QUEDA INTACTO.
CLRF SUC_HIG
CLRF SUC_LOW
CLRF COS_HIG
CLRF COS_LOW
MAR RRF JAI_HIG,1
RRF JAI_LOW,1
BTFSC STATUS,0
CALL SUMA
RRF COS_HIG,1
RRF COS_LOW,1
RRF SUC_HIG,1
RRF SUC_LOW,1
DECFSZ NAL,1
GOTO MAR
RETURN
SUMA MOVF AVE_LOW,0
ADDWF COS_LOW,1
BTFSC STATUS,0
INCF COS_HIG,1
MOVF AVE_HIG,0
ADDWF COS_HIG,1
RETURN
B2BCD BCF STATUS,0
MOVLW D'24'
MOVWF VALLEN
CLRF CERO
CLRF UNO
CLRF DOS
OP16 RLF SUC_LOW,1
RLF SUC_HIG,1
RLF COS_LOW,1
RLF DOS,1
RLF UNO,1
RLF CERO,1
DECFSZ VALLEN,1
GOTO A_DEC
RETURN
A_DEC MOVLW DOS
MOVWF FSR
CALL A_BCD
MOVLW UNO
MOVWF FSR
CALL A_BCD
MOVLW CERO
MOVWF FSR
CALL A_BCD
GOTO OP16 ;.............
A_BCD MOVLW .3
ADDWF INDF,0
MOVWF NAL
BTFSC NAL,3
MOVWF INDF
MOVLW 30
ADDWF INDF,0
MOVWF NAL
BTFSC NAL,7
MOVWF INDF
RETURN
VISUALIZACION
BCF STATUS,5
BCF STATUS,6
SWAPF CERO,W
ANDLW 0F
MOVWF VOLTAJE
; AQUI VIENE LA RUTINA PARA MOSTRAR EL VALOR EN EL LCD
END
caballero este programa lo realice con pic16f819 y un display para mostrar el valor del voltaje en un display por ejemplo 3v me mostraba 3.
como el tratamiemto en display en distinto tengo entendido que ya tienes configurado el lcd
y la posicion en lcd del digito a mostrar.
si tienes problema con el lcd me dices.