			
 #include <p16F628.inc>
 __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _LVP_OFF & _PWRTE_ON
 errorlevel -302

;*********************************************************************************************

indo         =      0
opcion       =      1
pc           =      2
status       =      3
fsr          =      4
ptoa         =      5
ptob         =      6

intcon       =      0Bh
PIR1         =      0Ch
PIE1         =      8Ch
CMCON        =      1Fh

;VRCON        =      9Fh

loops        =      21h
loops2       =      22h
rota         =      23h
dig1         =      24h
dig2         =      25h
dig3         =      26h
dig4         =      27h
;conta        =      28h
cuenta       =      29h
minuto       =      2Ah
temp         =      2Bh
DIEZ_1       =      2Ch
temporal     =      2Dh
DIEZ         =      2Eh
CERO         =      2Fh
contador     =      30h
bandera      =      31h
loops11      =      32h
loops22      =      33h
dig11        =      34h
dig22        =      35h
dig33        =      36h
dig44        =      37h
tempo        =      38h
diario       =      39h

;============================================================================================

          org     0
          goto    inicio
	  org     5

          org     4     
          goto    interr  
            
          
interr    btfss   intcon,2
          goto    sale
          nop
          
int       incf    cuenta,1
          movf    cuenta,W
          xorlw   .15                            
          btfss   status,2
          goto    sale
          clrf    cuenta

          btfsc   bandera,0
          goto    precio
          nop
          goto    SUMA

precio    movlw   b'00001111'
          movwf   ptoa
          
ambos     movlw   .10
          movwf   DIEZ_1

anterior  movf    minuto,w
          movwf   temp

ante      btfsc   bandera,1               ;Cuando temporal llegue a 0 bandera,1 es 1
          goto    sale

          MOVLW   0AH
	  MOVWF	  DIEZ

inc       INCF    dig4,1
          MOVF    dig4,w
          SUBWF   DIEZ,w
          BTFSS   status,2
          goto    aqui
          CLRF    dig4

          INCF    dig3,1
          MOVF    dig3,w
          SUBWF   DIEZ,w
          BTFSS   status,2
          goto    aqui
          CLRF    dig3

          INCF    dig2,1
          MOVF    dig2,w
          SUBWF   DIEZ,w
          BTFSS   status,2
          goto    aqui
          CLRF    dig2

          INCF    dig1,1
          MOVF    dig1,w
          SUBWF   DIEZ,w
          BTFSS   status,2
          goto    aqui
          clrf    dig1


aqui      decfsz  temp,1
          goto    ante
          nop

          decfsz  DIEZ_1,1
          goto    anterior
          nop

          decfsz  temporal,1
          goto    ambos
          nop
          bsf     bandera,1
          clrf    temporal
          goto    sale

;============================================================================================

SUMA      MOVLW    0AH
	  MOVWF	   DIEZ
          movlw    .6                  ;.6
          movwf    contador

incre     INCF    dig4,1
          MOVF    dig4,w
          SUBWF   DIEZ,w
          BTFSS   status,2
          goto    sale
          CLRF    dig4

          INCF    dig3,1
          MOVF    dig3,w
          SUBWF   contador,w     ;verifico si llego a 6
          BTFSS   status,2
          goto    sale
          CLRF    dig3

          incf    temporal,1     ;llevo cuenta parcial de los minutos    
          incf    diario,1       ;llevo cuenta total de los minutos    
                    
          INCF    dig2,1
          MOVF    dig2,w
          SUBWF   DIEZ,w
          BTFSS   status,2
          goto    sale
          CLRF    dig2

          INCF    dig1,1
          MOVF    dig1,w
          SUBWF   DIEZ,w
          BTFSS   status,2
          goto    sale
          clrf    dig1
          goto    incre             

sale      movf     dig4,w
          call     tabla
          movwf    dig44

          movf     dig3,w
          call     tabla
          movwf    dig33
  
          movf     dig2,w
          call     tabla
          movwf    dig22
  
          movf     dig1,w
          call     tabla
          movwf    dig11
  
          bcf     intcon,2   
          retfie

tablita   addwf    pc,1     ;tabla que contiene el precio del minuto X 10
          retlw    .10
          retlw    .15
          retlw    .20
          retlw    .25
          retlw    .30
          retlw    .35
          retlw    .40
          retlw    .45
          retlw    .50
         
;============================================================================================

inicio    bsf     STATUS,RP0
          movlw   b'11110000'
          movwf   ptoa
          movlw   b'10000000'
          movwf   ptob
          movlw   b'11000111'
          movwf   opcion
          BSF     PCON,OSCF         ;elijo el oscilador interno
          
          bcf     STATUS,RP0
          
          MOVLW   B'00000111'
          MOVWF   CMCON          ;define el modo de operación del comparador analógico
          
          movlw   b'11000000'    ;Aseguro digitos en cero
   
          movwf   dig11
          movwf   dig22
          movwf   dig33
          movwf   dig44

          clrf    dig4
          clrf    dig3
          clrf    dig2
          clrf    dig1
          
          movlw   b'00001111'
          movwf   ptoa           ;apaga todos los transistores          
          clrf    ptob                 
          clrf    cuenta
          clrf    bandera                
          clrf    tempo   
                                                                      
program   btfsc   ptoa,5            ;reviso pulsador de programacion  
          goto    leer
          nop

          bsf      bandera,7        ;bandera

          btfsc    ptoa,7           ;reviso pulsador de cambiar valor de minutos
          goto     program
          
          call     delay
          call     delay
          call     delay
          
                   
          movf     tempo,w
          call     tablita  

          BSF      STATUS,RP0
          CLRF     EEADR 
          BCF      STATUS,RP0
          call     EE_Write                               
          incf     tempo,1                                 
                              
          goto    program
 

leer      BSF     STATUS,RP0
          CLRF    EEADR
          BCF     STATUS,RP0
          call    EE_Read 
          movwf   minuto    

          BSF     STATUS,RP0
          MOVLW   1
          MOVWF   EEADR
          BCF     STATUS,RP0
          call    EE_Read 
          movwf   diario        
       
          btfss   bandera,7
          goto    empe
antes     call    SUMA
          decfsz  diario,1
          goto    antes
          clrf    diario
                     
empe      movlw   b'11110111'
          movwf   rota
          movlw   dig11            ;Muevo el dato del primer digito a fsr
          movwf   fsr

disp      bsf     status,0         ;ojo cambio
          movlw   0
          movwf   ptob

          movf    rota,0
          movwf   ptoa
          movf    indo,0          ;Muevo el dato de fsr al registro de trabajo
          movwf   ptob
          movlw   3
          call    retardo         ;retardo de 20 ms.
          btfss   rota,0                                    
          goto    empe
          bsf     status,0        ;pone el carry en cero para no afectar rotaciones
          rrf     rota,1 
          incf    fsr,1           ;apunta al proximo digito

          btfss   bandera,2       ;reviso si se oprimio conteo
	  goto    sigue 
	  nop      

revisa    btfsc   ptoa,4           ;se oprimio mostrar valor 
          goto    sigue
          
          call    delay                            
          goto    valor

sigue     btfsc   ptoa,7           ;se oprimio iniciar conteo
          goto    disp
         
          call    delay

                         
conteo    bcf     bandera,0
          
          movlw   b'10100000'
          movwf   intcon           ;Activo interrupcion por TMR0          
          goto    disp        

valor     movlw   b'00000000'      ;Desactivo interrupcion
          movwf   intcon
          
          goto     disp             ;Sigo mostrando el valor de los digitos


;============================================================================================











