;//////////////////Encabezado///////////////////////////////////////////////

	list      p=16F84A            
	#include <p16F84A.inc>  
	radix   hex

;//////////////////Configs//////////////////////////////////////////////////

__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC

;/////////////////variables/////////////////////////////////////////////////

reset   ORG     0x00
        GOTO    inicio
        ORG     0x05
reg1	equ	0x0D		; 3 registros para el retardo
reg2	equ	0x0E
reg3	equ	0x0F
cont	equ	0x10
	cblock	0x0
	segtcu			;segundos del TC unidad
	segtcd			;segundos del TC decena
	mint1u			;minutos del T1 unidad
	miny1d			;minutos del T1 decena
	hort1u			;hora del T1 unidad
	hort1d			;hora del T1 decena
	mint2u			;minutos del T2 unidad
	mintt2d			;minutos del T2 decena
	hort2u			;hora del T2 unidad
	hort2d			;hora del T2 decena
	endc


;///////////////Configuración de PUERTOS////////////////////////////////////

inicio  BSF     STATUS, 5
        MOVLW   b'00000'            ;RAs SALIDAs
        MOVWF   TRISA
        MOVLW   b'11110000'	    ;LSB RBs SALIDAs - MSB RBs ENTRADAs	
        MOVWF   TRISB
        BCF     STATUS, 5
        CLRF	PORTB
        CLRF	cont
	CLRF	PORTA
		

;/////////////////Interrupciones///////////////////////////////////////////

;	BSF	INTCON,GIE	; habilitamos todas las interrupciones
;	BSF	INTCON,INTE	; que sean interrupciones externas


;//////////////////Principal///////////////////////////////////////////////

;principal
;ciclo
;	CALL reini
;	CALL disp_
;	GOTO ciclo	




reini	CLRF	cont		; pone el contador a 0
	MOVF	cont,W		; pasa el contador a w (índice)
	CALL	digit		; llama a la tabla
	MOVWF	PORTB		; pasa el dato obtenido a PORTB
	
	CALL	retardo

disp_	MOVF	cont,W
	XORLW	B'1001'		; verifica si el contador llegó a 9 
	BTFSC	STATUS,Z	; si no es así salta una línea
	GOTO	reini		; si llegó a 9 lo atiende en reini
	
	INCF	cont,F		; incrementa el contador
	MOVF	cont,W		; pasa el contador a w (índice)
	CALL	digit		; llama a la tabla
	MOVWF	PORTB		; pasa el dato obtenido en la tabla a PORTB
	CALL	retardo
	GOTO	disp_
	



;/////////////////////Botones-Entradas//////////////

;////////////////////Tablas/////////////////////////

digit	ADDWF	PCL, F
	RETLW	B'0000'		; código para 0
	RETLW	B'0001'		; código para 1		
	RETLW	B'0010'		; código para 2
	RETLW	B'0011'		; código para 3
	RETLW	B'0100'		; código para 4
	RETLW	B'0101'		; código para 5
	RETLW	B'0110'		; código para 6
	RETLW	B'0111'		; código para 7
	RETLW	B'1000'		; código para 8
	RETLW	B'1001'		; código para 9


;///////////////////Rutinas de Retardos///////////////

retardo	movlw	28		; Aquí se cargan los registros
	movwf	reg1		; reg1, reg2 y reg3
tres	movlw	28		; con los valores 40 (mas o menos 1 segundo)
	movwf	reg2
dos	movlw	28
	movwf	reg3

uno	decfsz	reg3,1		; Aquí se comienza a decrementar
	goto	uno
	decfsz	reg2,1
	goto	dos
	decfsz	reg1,1
	goto	tres
	retlw	00		; regresare del retardo



END
