 LIST           P=16F88
                #INCLUDE   <P16F88.INC>


;Estas son las palabras de configuracion necesarias para este microconlador
      __CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC

     __CONFIG    _CONFIG2, _IESO_OFF & _FCMEN_OFF

;dentro de esta directiva CBLOCK   se especifican las variables con las que voy a trabajar en el programa
                 CBLOCK               0X20
                 START
                 CUENTA
                 SEG
                 MIN
                 HOR
                 REG_W  
                 REG_S
                 ESTADO
                 d1
                 d2
                 d3
                 d4
                 EMPIEZA
                 NUM
                 ENDC
                   

                 ORG                      00
                 GOTO                    CONFIGURA
           
                 
                 
;Este bloque lo uso para configurar los perofericos del microcontrolador------
CONFIGURA                    NOP
                             BANKSEL	OSCCON
                             MOVLW	0X60	;RELOJ INTERNO 4MHZ
                             MOVWF	OSCCON
                             BANKSEL   TXSTA
                             CLRF      ANSEL
                             MOVLW     B'11110000'
                             MOVWF     TRISA
                             MOVLW     B'00000000'
                             MOVWF     TRISB;       CONFIGURE ENTRADAS Y SALIDAS
                             BANKSEL   TXREG
                             
                             movlw     B'00000000'	;HABILITA TEMPORIZADOR Y CLOCK INTERNO
                            movwf       OPTION_REG
                           
                            MOVLW       D'226'
                            MOVWF       NUM
                             
                             MOVLW      B'1001'
                             MOVWF      SEG
                             MOVLW      B'1001'
                             MOVWF      MIN
                             MOVLW      B'1001'
                             MOVWF      HOR
                             MOVLW      D'100'
                             MOVWF      CUENTA


;PROGRAMA PRINCIPAL------------------------------------------------------------
 INICIO         CALL    INC    
                CALL    DEC
                CALL    STRT
                CALL    PRESET
                CALL    PRUEBA
                CALL    MUESTRA
                GOTO    INICIO
;RUTINAS-----------------------------------------------------------------------
INC             BTFSC       PORTA,0
                RETURN  
                CALL        DELAY
                BTFSC       PORTA,0
                RETURN
                INCF      SEG,1
                MOVLW      B'1010'
                SUBWF      SEG,0
                BTFSS      STATUS,Z
                RETURN
                MOVLW      B'0000'
                MOVWF      SEG
                INCF      MIN,1
                MOVLW      B'1010'
                SUBWF      MIN,0
                BTFSS      STATUS,Z
                RETURN
                MOVLW      B'0000'
                MOVWF      MIN
                INCF      HOR,1
                MOVLW      B'1010'
                SUBWF      HOR,0
                BTFSS      STATUS,Z
                RETURN
                MOVLW      B'0000'
                MOVWF      HOR
                RETURN


DEC             BTFSC      PORTA,1
                RETURN
                CALL       DELAY
                BTFSC      PORTA,1
                RETURN
                DECFSZ       SEG,1
                RETURN
                MOVLW      B'1001'
                 MOVWF      SEG
                 DECFSZ     MIN,1
                 RETURN
                 MOVLW      B'1001'
                 MOVWF      MIN
                 DECFSZ     HOR
                 RETURN
                 MOVLW      B'1001'
                 MOVWF      HOR
                 RETURN
         
STRT    BTFSC       PORTA,2
        RETURN
        CALL        DELAY
        BTFSC       PORTA,2
        RETURN
        MOVLW     NUM
        MOVWF     TMR0
        BSF       EMPIEZA,0
        RETURN
        
PRESET  BTFSC   PORTA,3
        RETURN
        CALL    DELAY
        BTFSC   PORTA,3
        MOVLW   NUM
        MOVWF   TMR0
        MOVLW   B'1001'
        MOVWF   SEG
        MOVWF   MIN 
        MOVWF   HOR
        RETURN


PRUEBA  BTFSS   INTCON,2
        RETURN
         BTFSS       EMPIEZA,0 ;PREGUNTO SI PRESIONE START
         RETURN
         DECFSZ      SEG,1  ;DECREMENTO UNIDAD
         RETURN
         MOVLW       B'1001'      ;PREGUNTO SI LLEGO A CERO
         MOVWF       SEG   ;LO PONGO EN NUEVE
         DECFSZ      MIN,1        ;DECREMENTO DECENA
         RETURN
         MOVLW       B'1001' ;PREGUNTO SI LLEGO A CERO
         MOVWF       MIN ;    LO PONGO EN NUEVE
         DECFSZ      HOR ;DECREMENTO CENTENA
         RETURN      ;PREGUNTO SI LLEGO A CERO
         MOVLW       B'1001' ; LO PONGO EN NUEVE
         MOVWF       HOR
         BCF         INTCON,2
         RETURN
        
MUESTRA MOVF    SEG,W
        MOVWF   PORTB
        BSF     PORTA,4
        CALL    ESPERO
        BCF     PORTA,4
        MOVF    MIN,W
        MOVWF   PORTB
        BSF     PORTA,5
        CALL    ESPERO
        BCF     PORTA,5
        MOVF   HOR,W
        MOVWF   PORTB
        BSF     PORTA,6
        CALL    ESPERO
        BCF     PORTA,6
        RETURN
        
ESPERO  movlw	0x03
	movwf	d1
	movlw	0x18
	movwf	d2
	movlw	0x02
	movwf	d3
Delay_1
	decfsz	d1, f
	goto	$+2
	decfsz	d2, f
	goto	$+2
	decfsz	d3, f
	goto	Delay_1
    RETURN




DELAY   movlw	0xCF
	movwf	d1
	movlw	0x08
	movwf	d2
Delay_0
	decfsz	d1, f
	goto	$+2
	decfsz	d2, f
	goto	Delay_0
	RETURN
 
        
        
        END; FIN DEL PROGRAMA