        list      p=16F877
        radix   hex
           
adresl    equ     9e
adresh   equ      1e
adcon0    equ     1F
adcon1   equ      9f            

uni      equ      0x20              
dec	equ	0x21
cen	equ	0x22
reg1     equ      0x23           
reg2     equ      0x24             
buffer   equ      0x25
buffer1  equ      0x26
suma     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'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     uni            ;limpia puertos y registros
         clrf     dec
         clrf     cen
         clrf     buffer
         clrf     buffer1
         clrf     suma
         clrf     reg1
         clrf     reg2
            
repe     bsf      adcon0,2              ;Inicia la conversion A/D
va       btfsc    adcon0,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    buffer1             ;guarda el valor de adresh

         call     dcm          
         call     tabla
         goto     repe             ;Vuelve y repite
;-------------------------------------------------------------------
dcm      movf     buffer,0
             movwf    uni         ;Convierte el dato presente en W en UNI, DEC y CEN
            clrf         dec
	clrf	cen
         movlw    d'100'              ; cantidad de centenas
cente    subwf    uni, 1
         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
         goto     ser
         decfsz   reg2, 1
         goto     sir
	return
;-----------------------------------------------------------------------
tabla    movf     uni,0
         movwf    uni
         xorlw    .9           ;si hay 00001001 en uni (es 9)
         btfss    3,2
         goto     si1
         movlw    b'11011111'  ;sale en el display el numero 9 
         movwf    0x06         ;por el puerto b
         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            ;si hay 00001001 en dec (es 9)
         btfss    3,2
         goto     ki1
         movlw    b'11110111'   ;sale en el display el numero 9 
         movwf    0x08          ;por el puerto d
         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'11011110'
         movwf    0x07
         return
li8      movf      cen,0
         movwf     cen
         xorlw    .1
         btfss    3,2
         goto     li9
         movlw     b'00110000'
         movwf    0x07
         return
li9      movf      cen,0
         movwf     cen
         xorlw    .0
         btfss    3,2
         return
         movlw    b'11110111'
         movwf    0x07
         return
;----------------------------------------------------------------------

	end

