        list      p=16F877
        radix   hex
           
adresh    equ      0x1E             
adcon0    equ      0x1F             
adresl   equ      9e
adcon1   equ      0x9f
uni      equ      0x20              
dec	equ	0x21
cen	equ	0x22
reg1     equ      0x23           
reg2     equ      0x24             
buffer   equ      0x25
buffer1  equ      0x26
fre      equ      0x27;

reset   org     00             
        goto    inicio
        org     05h             

inicio   bsf      3,5               
         movlw    b'00001101'       ;Configura puerto A
         movwf    0x05
         movlw    b'00000000'
         movwf    0x06
         movlw    b'00000000'
         movwf    0x07
         movlw    b'00000000'
         movwf    0x08
         movlw    b'000'
         movwf    0x09
         movlw    b'10001110'      
         movwf    adcon1                
         bcf      3,5
         movlw    b'01000001'       ;Enciende y configura el convertidor A/D
         movwf    adcon0
	
         clrf     0x05            
         clrf     0x06
         clrf     0x07
         clrf     0x08
         clrf     0x09
         clrf     uni
         clrf     dec
         clrf     cen
         clrf     buffer
         clrf     reg1
         clrf     reg2
            
repe     bsf      adcon1,2              ;Inicia la conversion A/D
va       btfsc    adcon1,2              ;Espera que termine de convertir
         goto     va	
         bsf      3,5                           ;Pasa a pagina 1 (para acceder a los ocho bits bajos del resultado)
         movf     adresl,0           ;Resultado de conversion 
         bcf      3,5
         movwf    buffer             ;Guarda el valor de adresl
         movf     adresh,0
         movwf    0x09            ;guarda el valor de adresh en el puerto E
         call     dcm          
         call     tabla
         goto     repe             ;Vuelve y repite

dcm      movf     buffer,0
         movwf    uni
         btfss    0x09,0          ;si bit 0 del puerto E esta en cero cuenta hasta 255
         goto     ftu                ;si bit 0 del puerto E esta en uno
         addlw    .255             ;deberia seguir sumando mas alla de 255 
         movwf    uni              ; pero se pone a cero y vuelve y repite    
ftu      clrf     dec
         clrf     cen
         movlw    d'100'              ; cantidad de centenas
cente    subwf    uni, 1             ;Convierte el dato presente en W en UNI, DEC y CEN
         btfss    3,0
         goto     cien
	incf	cen, 1
         goto     cente
cien     addwf    uni, 1
         movlw    d'10'               ; cantidad de decenas
dece     subwf    uni, 1
         btfss    3,0
         goto     diez
	incf	dec, 1
         goto     dece
diez     addwf    uni, 1             ; queda con la cantidad de unidades

         return
	
retard   movlw    d'2'
         movwf    reg2           ;retardo
sir      movlw    d'110'
         movwf    reg1
ser      decfsz   reg1, 1        ;no estoy utilizando el retardo
         goto     ser
         decfsz   reg2, 1
         goto     sir
	return
;-----------------------------------------------------------------------
tabla    movf     uni,0
         movwf    uni
         xorlw    .9
         btfss    3,2
         goto     si1
         movlw    b'11011111'
         movwf    0x06
         goto     tabla1
si1      movf     uni,0            ;tabla para unidades
         movwf    uni             
         xorlw    .8
         btfss    3,2
         goto     si2
         movlw    b'11111111'
         movwf    0x06
         goto     tabla1
si2      movf     uni,0
         movwf    uni
         xorlw    .7
         btfss    3,2
         goto     si3
         movlw    b'10010101'
         movwf    0x06
         goto     tabla1
si3      movf     uni,0
         movwf    uni
         xorlw    .6
         btfss    3,2
         goto     si4
         movlw    b'11101111'
         movwf    0x06
         goto     tabla1
si4      movf     uni,0
         movwf    uni
         xorlw    .5
         btfss    3,2
         goto     si5
         movlw    b'11001111'
         movwf    0x06
         goto     tabla1
si5      movf     uni,0
         movwf    uni
         xorlw    .4
         btfss    3,2
         goto     si6
         movlw    b'01011101'
         movwf    0x06
         goto     tabla1
si6      movf     uni,0
         movwf    uni
         xorlw    .3
         btfss    3,2
         goto     si7
         movlw    b'10011111'
         movwf    0x06
         goto     tabla1
si7      movf     uni,0
         movwf    uni
         xorlw    .2
         btfss    3,2
         goto     si8
         movlw    b'10111011'
         movwf    0x06
         goto     tabla1
si8      movf     uni,0
         movwf    uni
         xorlw    .1
         btfss    3,2
         goto     si9
         movlw    b'00010100'
         movwf    0x06
         goto     tabla1
si9      movf     uni,0
         movwf    uni
         xorlw    .0
         btfss    3,2
         goto     tabla1
         movlw    b'11110111'
         movwf    0x06
         ;return
;----------------------------------------------------------------------
tabla1   movf     dec,0
         movwf    dec
         xorlw    .9
         btfss    3,2
         goto     ki1
         movlw    b'11110111'
         movwf    0x08
         goto     tabla2
ki1      movf     dec,0            ;tabla para decenas
         movwf    dec             
         xorlw    .8
         btfss    3,2
         goto     ki2
         movlw    b'11111111'
         movwf    0x08
         goto     tabla2
ki2      movf     dec,0
         movwf    dec
         xorlw    .7
         btfss    3,2
         goto     ki3
         movlw    b'10100101'
         movwf    0x08
         goto     tabla2
ki3      movf     dec,0
         movwf    dec
         xorlw    .6
         btfss    3,2
         goto     ki4
         movlw    b'01111111'
         movwf    0x08
         goto     tabla2
ki4      movf     dec,0
         movwf    dec
         xorlw    .5
         btfss    3,2
         goto     ki5
         movlw    b'01110111'
         movwf    0x08
         goto     tabla2
ki5      movf     dec,0
         movwf    dec
         xorlw    .4
         btfss    3,2
         goto     ki6
         movlw    b'11100011'
         movwf    0x08
         goto     tabla2
ki6      movf      dec,0
         movwf     dec
         xorlw    .3
         btfss    3,2
         goto     ki7
         movlw     b'11110101'
         movwf    0x08
         goto     tabla2
ki7      movf     dec,0
         movwf     dec
         xorlw    .2
         btfss    3,2
         goto     ki8
         movlw   b'11011101'
         movwf    0x08
         goto     tabla2
ki8      movf     dec,0
         movwf     dec
         xorlw    .1
         btfss    3,2
         goto     ki9
         movlw    b'10100000'
         movwf    0x08
         goto     tabla2
ki9      movf     dec,0
         movwf     dec
         xorlw    .0
         btfss    3,2
         goto     tabla2
         movlw     b'10111111'
         movwf    0x08
         ;return
;----------------------------------------------------------------------
tabla2   movf     cen,0
         movwf    cen
         xorlw    .9
         btfss    3,2
         goto     li1
         movlw    b'11101111'
         movwf    0x07
         return
li1      movf     cen,0            ;tabla para centenas
         movwf     cen             
         xorlw    .8
         btfss    3,2
         goto     li2
         movlw    b'11111111'
         movwf    0x07
         return
li2      movf      cen,0
         movwf     cen
         xorlw    .7
         btfss    3,2
         goto     li3
         movlw    b'00100110'
         movwf    0x07
         return
li3      movf      cen,0
         movwf    cen
         xorlw    .6
         btfss    3,2
         goto     li4
         movlw    b'11101111'
         movwf    0x07
         return
li4      movf      cen,0
         movwf     cen
         xorlw    .5
         btfss    3,2
         goto     li5
         movlw     b'11101101'
         movwf    0x07
         return
li5      movf     cen,0
         movwf    cen
         xorlw    .4
         btfss    3,2
         goto     li6
         movlw    b'00101111'
         movwf    0x07
         return
li6      movf      cen,0
         movwf     cen
         xorlw    .3
         btfss    3,2
         goto     li7
         movlw    b'11001111'
         movwf    0x07
         return
li7      movf    cen,0
         movwf     cen
         xorlw    .2
         btfss    3,2
         goto     li8
         movlw     b'11011100'
         movwf    0x07
         return
li8      movf      cen,0
         movwf     cen
         xorlw    .1
         btfss    3,2
         goto     li9
         movlw     b'00000110'
         movwf    0x07
         return
li9      movf      cen,0
         movwf     cen
         xorlw    .0
         btfss    3,2
         return
         movlw    b'11110111'
         movwf    0x07
         return
;----------------------------------------------------------------------

	end

