	LIST	P=16F84A
	INCLUDE	"P16F84A.INC"

Dato5	equ	0x10		;variables del cronometro
Dato4	equ	0x11
Dato3	equ	0x12
Dato2	equ	0x13
Dato1	equ	0x14
Cont01	equ	0x15		;variable contador 01
Cont02	equ	0x16		;variable contador 02
VTemp1	equ	0x17

__int_save_cont_W	equ	0x1D
__int_save_cont_STATUS	equ	0x1E
__int_save_cont_FSR	equ	0x1F
__int_save_cont_PCLATH	equ	0x20

	org	00H		;inicio de programa y direccion de interrupcion
	goto	Inicio
	ORG	04H
	goto	Inter
	org	05H

Inter	movwf 	__int_save_cont_W
	swapf 	__int_save_cont_W,F
	swapf 	STATUS, W
	movwf 	__int_save_cont_STATUS
	swapf 	FSR,W
	movwf 	__int_save_cont_FSR
	swapf 	PCLATH, W
	movwf 	__int_save_cont_PCLATH

	btfss 	INTCON,1
	goto 	label_0046
	bcf 	INTCON,1		;interrupcion para variar tiempo (PORTB,0)
	call 	VTime		;subrutina VTime
label_0046	btfss	INTCON,0
	goto 	label_0026
	bcf 	INTCON,0
	call 	Pause		;interrupcion por RB7 (Pause)
label_0026
	swapf 	__int_save_cont_PCLATH,W
	movwf 	PCLATH
	swapf 	__int_save_cont_FSR,W
	movwf 	FSR
	swapf 	__int_save_cont_STATUS,W
	movwf 	STATUS
	swapf 	__int_save_cont_W,W
	retfie
Display				;subprograma de barrido de displays
	movlw	0xff
	movwf	PORTA		;inhabilita transistores
	movlw	.10		;valor de repeticiones
	movwf	Cont02
Loopdisp				;muestra el Dato1  -->28us
	movf	Dato1,W		;dato para decodificar
	call	tabla		;decodificacion del dato
	movwf	PORTB		;mueve el dato decodificado al puerto b
	bcf	PORTA,0		;habilita Q dato 1
	call	Retdig		;retardo de digito
	bsf	PORTA,0		;deshabilita Q dato 1
	nop
	nop
				;muestra el Dato2
	movf	Dato2,W		;dato para decodificar
	call	tabla		;decodificacion del dato
	movwf	PORTB		;mueve el dato decodificado al puerto b
	bcf	PORTA,1		;habilita Q dato 2
	call	Retdig		;retardo de digito
	bsf	PORTA,1		;deshabilita Q dato 2
	nop
	nop
				;muestra el Dato3
	movf	Dato3,W		;dato para decodificar
	call	tabla		;decodificacion del dato
	movwf	PORTB		;mueve el dato decodificado al puerto b
	bcf	PORTA,2		;habilita Q dato 3
	call	Retdig		;retardo de digito
	bsf	PORTA,2		;deshabilita Q dato 3
	nop
	nop
				;muestra el Dato4
	movf	Dato4,W		;dato para decodificar
	call	tabla		;decodificacion del dato
	movwf	PORTB		;mueve el dato decodificado al puerto b
	bcf	PORTA,3		;habilita Q dato 4
	call	Retdig		;retardo de digito
	bsf	PORTA,3		;deshabilita Q dato 4
	nop
	nop

	decfsz	Cont02,F		;decrementa Cont02, y si el resultado es cero elude la siguiente instruccion
	goto	Loopdisp		;un loopdisp demora 8.26ms (8254us)
	return			;--->una subrutina de Display demora 16.5ms (16514us)
tabla
	addwf	PCL,F
	retlw	0x00		;cuando el digito es 0
	retlw	0x02		;cuando el digito es 1
	retlw	0x04		;cuando el digito es 2
	retlw	0x06		;cuando el digito es 3
	retlw	0x08		;cuando el digito es 4
	retlw	0x0A		;cuando el digito es 5
	retlw	0x0C		;cuando el digito es 6
	retlw	0x0E		;cuando el digito es 7
	retlw	0x10		;cuando el digito es 8
	retlw	0x12		;cuando el digito es 9

Retdig	clrf	TMR0		;TMR0 = 0
Explo2	btfss	TMR0,1		;TMR0<1> = 1?
	goto	Explo2		;No ha llegado TMR0 a 2d (este retardo demora 256us)
	return
Inicio
	bsf	STATUS,RP0		;banco 01
	movlw	b'00000000'
	movwf	TRISA		;de RA0 a RA4 salidas, habilita Q1...Q4, QCH
	movlw	b'11100001'
	movwf	TRISB		;de RB1 A RB4 salida, 7 segmentos y el resto entradas
	movlw	b'00000110'		;Valor a cargar en OPTION (flanco para la interupcion)
	movwf	OPTION_REG		;division del TMR0 1:128
	bcf	STATUS,RP0		;banco 00
	movlw	b'10010000'
	movwf	INTCON		;permiso de interupcion por activacion de RB0
	movlw	0xff
	movwf	PORTA		;Las lineas de salida de Puerto A a 1
	clrf	PORTB		;Las lineas de salida de Puerto B a 0
INI
	movlw	0x00		;cronometro de 10 minutos
	movwf	Dato1
	movlw	0x00
	movwf	Dato2
	movlw	0x00
	movwf	Dato3
	movlw	0x01
	movwf	Dato4
	call	Retardo
Prevstar	
	movlw	.1		;valor de repeticiones
	movwf	Cont02
	call	Loopdisp		;displaya el tiempo por defecto
	nop			;si RB0 se activa, salta a la subrutina variar tiempo 
	nop
label_0027	
	clrw
	btfsc	PORTB,7
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	Prevstar
	bcf	INTCON,4		;se prohiben las interrupciones de RB0, imposible variar el tiempo
	bcf	PORTB,7
	movlw	D'20'
	movwf	Cont02
	call	Loopdisp		;retardo de 22.22ms
label_0030
	clrw
	btfsc	PORTB,7
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	label_0031
	goto	label_0030
label_0031
	bcf	PORTB,7
	movlw	D'20'
	movwf	Cont02
	call	Loopdisp		;retardo de 22.22ms
label_0032
	clrw
	btfsc	PORTB,7
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	label_0033
	goto	label_0032
label_0033
	nop
	nop
	nop
	bsf	INTCON,3		;permiso de interrupcion por activacion de RB7 (Play / Pause)
Star	
	clrw		
	nop
Crono01	bcf	STATUS,Z		;ponemos en cero bit "Z"
	movf	Dato1,W
	xorlw	0x00
	btfsc	STATUS,Z
	goto	Crono02
	decf	Dato1,F		;decrementas en uno la variable Dato1
	call	Retardo		;demora un segundo
	goto	Crono01
Crono02	movlw	0x09
	movwf	Dato1
	bcf	STATUS,Z		;ponemos en cero bit "Z"
	movf	Dato2,W
	xorlw	0x00
	btfsc	STATUS,Z
	goto	Crono03
	decf	Dato2,F		;decrementas en uno la variable Dato2
	call	Retardo		;demora un segundo
	goto	Crono01
Crono03	movlw	0x05
	movwf	Dato2
	bcf	STATUS,Z		;ponemos en cero bit "Z"
	movf	Dato3,W
	xorlw	0x00		;compara si la variable "Dato3"=0
	btfsc	STATUS,Z		;pregunta si la variable Dato3 es cero
	goto	Crono04		;cuando la variable Dato3 es cero salta a Crono04 !!!!!!
	decf	Dato3,F		;como la variable Dato3 no es cero, aun decrementas en uno la variable Dato3 !!!!
Esp00	btfsc	STATUS,Z		;pregunta si el resultado de la operacion anterior fue cero (especial para los ultimos 59 segundos 99 centecimas)
	goto	Crono05		;cuando el Dato 3 se hace cero salta a Crono05 (especial para los ultimos 59 segundos 99 centecimas)
Normal	call	Retardo		;demora un segundo
	goto	Crono01
Crono04	movlw	0x09
	movwf	Dato3		
	bcf	STATUS,Z		;ponemos en cero bit "Z"
	movf	Dato4,W
	xorlw	0x00
	btfsc	STATUS,Z
	goto	Crono06
	decf	Dato4,F		;decrementas en uno la variable Dato4
	call	Retardo
	goto	Crono01
Crono05	movf	Dato4,W
	xorlw	0x00		;compara si la variable "Dato4"=0
	btfsc	STATUS,Z		;pregunta si la variable Dato4 es cero
	goto	Especial		;si Dato4 es cero, salta a la rutina especial de los 59segundos y 99 centecimas
	goto	Normal		;si Dato4 aun no es cero regresa a la rutina normal

Especial	movlw	0x09		;el tiempo llego a los ultimos 59 segundos y 99 centecimas de segundo
	movwf	Dato1
	movlw	0x09
	movwf	Dato2
	movlw	0x09
	movwf	Dato3
	movlw	0x05
	movwf	Dato4
Espc01	bcf	STATUS,Z		;ponemos en cero bit "Z"
	movf	Dato1,W
	xorlw	0x00		;compara si la variable "Dato1"=0
	btfsc	STATUS,Z		;pregunta si la variable Dato1 es cero
	goto	Espc02		;cuando la variable Dato1 es cero salta a Crono02 !!!!!!
	decf	Dato1,F		;decrementas en uno la variable Dato1
	call	Display		;demora una centesima (exactamente 1.1114cm de segundo)
	goto	Espc01
Espc02	movlw	0x09
	movwf	Dato1
	bcf	STATUS,Z		;ponemos en cero bit "Z"
	movf	Dato2,W
	xorlw	0x00
	btfsc	STATUS,Z
	goto	Espc03
	decf	Dato2,F		;decrementas en uno la variable Dato2
	call	Display		;demora una centesima (exactamente 1.1114cm de segundo)
	goto	Espc01
Espc03	movlw	0x09
	movwf	Dato2
	bcf	STATUS,Z		;ponemos en cero bit "Z"
	movf	Dato3,W
	xorlw	0x00		;compara si la variable "Dato3"=0
	btfsc	STATUS,Z		;pregunta si la variable Dato3 es cero
	goto	Espc04		;cuando la variable Dato3 es cero salta a Crono04 !!!!!!
	decf	Dato3,F		;como la variable Dato3 no es cero, aun decrementas en uno la variable Dato3 !!!!
	call	Display		;demora una centesima (exactamente 1.1114cm de segundo)
	goto	Espc01
Espc04	movlw	0x09
	movwf	Dato3		
	bcf	STATUS,Z		;ponemos en cero bit "Z"
	movf	Dato4,W
	xorlw	0x00
	btfsc	STATUS,Z
	goto	Crono06
	decf	Dato4,F		;decrementas en uno la variable Dato4
	call	Display		;demora una centesima (exactamente 1.1114cm de segundo)
	goto	Espc01
Crono06	
	clrf	Dato1		;el tiempo llego a cero
	clrf	Dato2
	clrf	Dato3
	clrf	Dato4
	movlw	b'10000'
	movwf	PORTA		;********* Chicharra de final de juego *********
	movlw	d'180'		;90 -> W
	movwf	Cont01		;carga a Cont01 con 90 repeticiones para completar un segundo 
Bucle2	call	Explora2		;llamada de subrutina Explora2
	bcf	STATUS,Z		;ponemos el bit "Z" en cero
	decf	Cont01,F		;Cont01 - 1 -> F
	btfss	STATUS,Z		;salta una posion si el bit Z del reg. STATUS es = 1
	goto	Bucle2		;Otra vez al bucle de exploracion
	goto	TimeEND		;Se ha explorado 90 veces y sea completado un segundo
Explora2
	movlw	d'10'		;Loopdisp 10 veces (11.114ms)
	movwf	Cont02
Loopdisp2				;muestra el Dato1  -->28us
	movf	Dato1,W		;dato para decodificar
	call	tabla		;decodificacion del dato
	movwf	PORTB		;mueve el dato decodificado al puerto b
	bcf	PORTA,4
	bcf	PORTA,0		;habilita Q dato 1
	call	Retdig		;retardo de digito
	bsf	PORTA,0		;deshabilita Q dato 1
	nop
	nop			;<---<305us (por lo tanto un digito demora 277us)
				;muestra el Dato2
	movf	Dato2,W		;dato para decodificar
	call	tabla		;decodificacion del dato
	movwf	PORTB		;mueve el dato decodificado al puerto b
	bcf	PORTA,4
	bcf	PORTA,1		;habilita Q dato 2
	call	Retdig		;retardo de digito
	bsf	PORTA,1		;deshabilita Q dato 2
	nop
	nop
				;muestra el Dato3
	movf	Dato3,W		;dato para decodificar
	call	tabla		;decodificacion del dato
	movwf	PORTB		;mueve el dato decodificado al puerto b
	bcf	PORTA,4
	bcf	PORTA,2		;habilita Q dato 3
	call	Retdig		;retardo de digito
	bsf	PORTA,2		;deshabilita Q dato 3
	nop
	nop
				;muestra el Dato4
	movf	Dato4,W		;dato para decodificar
	call	tabla		;decodificacion del dato
	movwf	PORTB		;mueve el dato decodificado al puerto b
	bcf	PORTA,4
	bcf	PORTA,3		;habilita Q dato 4
	call	Retdig		;retardo de digito
	bsf	PORTA,3		;deshabilita Q dato 4
	nop
	nop

	decfsz	Cont02,F		;decrementa Cont02, y si el resultado es cero elude la siguiente instruccion
	goto	Loopdisp2		;repite ciclo    <---< 1139us (un barrido de los 4 display demora 1111us)
	return
TimeEND				;fin del juego
	bsf	PORTA,4		;apaga la chicharra
	call	Retardo		;espera un nuevo inicio
	clrf	INTCON		;prohibe interrupciones
label_0034	
	clrw			;Play nuevo juego
	btfsc	PORTB,7
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	TimeEND		;continua en cero, fin del juego
	bcf	PORTB,7
	movlw	D'20'
	movwf	Cont02
	call	Loopdisp		;retardo de 22.22ms
label_0035
	clrw
	btfsc	PORTB,7
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	label_0036
	goto	label_0035
label_0036
	bcf	PORTB,7
	movlw	D'20'
	movwf	Cont02
	call	Loopdisp		;retardo de 22.22ms
label_0037
	clrw
	btfsc	PORTB,7
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	label_0038
	goto	label_0037
label_0038
	movlw	0x00
	movwf	Dato1
	movlw	0x00
	movwf	Dato2
	movlw	0x00
	movwf	Dato3
	movlw	0x01
	movwf	Dato4
	call	Retardo		;1 segundo
	call	Retardo		;1 segundo
	movlw	b'10010000'
	movwf	INTCON		;permiso de interupcion por activacion de RB0
	call	Retardo		;1 segundo
	goto	Prevstar		
Pause	
label_0007	clrw
	btfsc	PORTB,7
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	label_0021
	bcf	INTCON,3		;se prohiben las interrupciones de RB7
	bcf	PORTB,7
	movlw	D'20'
	movwf	Cont02
	call	Loopdisp		;retardo de 22.22ms
label_0008
	clrw
	btfsc	PORTB,7
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	label_0009
	goto	label_0008
label_0009
	bcf	PORTB,7
	movlw	D'20'
	movwf	Cont02
	call	Loopdisp		;retardo de 22.22ms
label_0010
	clrw
	btfsc	PORTB,7
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	label_0011
	goto	label_0010
label_0011
	nop
	call	Display
	nop

label_0012	clrw
	btfsc	PORTB,7
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	label_0011
	bcf	PORTB,7
	movlw	D'20'
	movwf	Cont02
	call	Loopdisp		;retardo de 22.22ms
label_0013
	clrw
	btfsc	PORTB,7
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	label_0014
	goto	label_0013
label_0014
	bcf	PORTB,7
	movlw	D'20'
	movwf	Cont02
	call	Loopdisp		;retardo de 22.22ms
label_0015
	clrw
	btfsc	PORTB,7
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	label_0016
	goto	label_0015
label_0016
	nop
	nop
	movlw	b'10001000'
	movwf	INTCON		;permiso de interupcion por activacion de RB7 (Play / Pause)
label_0021
	return			;retorno del evento de la interrupcion RB7 (interupcion pause)	
VTime	
puertoB0_01	clrw
	btfsc	PORTB,0
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	return			;retorna de la interupcion variar tiempo *******	
	bcf	PORTB,0
	movlw	D'20'
	movwf	Cont02
	call	Loopdisp		;retardo de 22.22ms
puertoB0_02
	clrw
	btfsc	PORTB,0
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	puertoB0_03
	goto	puertoB0_02
puertoB0_03
	bcf	PORTB,0
	movlw	D'20'
	movwf	Cont02
	call	Loopdisp		;retardo de 22.22ms
puertoB0_04
	clrw
	btfsc	PORTB,0
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	puertoB0_05
	goto	puertoB0_04
puertoB0_05
VTime1	bcf	STATUS,Z		;ponemos en cero bit "Z"
	movf	VTemp1,W
	xorlw	0x02		;comparas "VTemp1" con 0x02
	btfsc	STATUS,Z		;si "VTemp1" = 0x02 entonces ejecuta "goto   VTemp2"
	goto	VTime2
	incf	VTemp1,F		;incrementas en uno la variable VTemp1
	goto	seg_min_exit
VTime2	movlw	0x00
	movwf	VTemp1
	return			;retorna de la interupcion variar tiempo *******
seg_min_exit	bcf	STATUS,Z		;ponemos en cero bit "Z"
	movf	VTemp1,W
	xorlw	0x00		;comparas "VTemp1" con 0x00
	btfsc	STATUS,Z		;si "VTemp1" = 0x00
	retfie			;subrutina salir de la interrupcion Variar tiempo ********
	bcf	STATUS,Z		;ponemos en cero bit "Z"
	movf	VTemp1,W
	xorlw	0x02		;comparas "VTemp1" con 0x02
	btfsc	STATUS,Z		;si "VTemp1" = 0x02
	goto	Vmin
	bcf	STATUS,Z		;ponemos en cero bit "Z"
	movf	VTemp1,W
	xorlw	0x01		;comparas "VTemp1" con 0x01
	btfsc	STATUS,Z		;si "VTemp1" = 0x01
	goto	Vseg
	clrf	VTemp1
	return			;retorna de la interrupcion variar tiempo *******
Vseg
Vseg01	call	Display
puertoB0_06	clrw
	btfsc	PORTB,0
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	puertoB5_01	
	bcf	PORTB,0
	movlw	D'20'
	movwf	Cont02
	call	Loopdisp		;retardo de 22.22ms
puertoB0_07
	clrw
	btfsc	PORTB,0
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	puertoB0_08
	goto	puertoB0_07
puertoB0_08
	bcf	PORTB,0
	movlw	D'20'
	movwf	Cont02
	call	Loopdisp		;retardo de 22.22ms
puertoB0_09
	clrw
	btfsc	PORTB,0
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	puertoB0_10
	goto	puertoB0_09
puertoB0_10
	goto	VTime1
puertoB5_01
	clrw
	btfsc	PORTB,5
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	puertoB6_01	
	bcf	PORTB,5
	movlw	D'20'
	movwf	Cont02
	call	Loopdisp		;retardo de 22.22ms
puertoB5_02
	clrw
	btfsc	PORTB,5
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	puertoB5_03
	goto	puertoB5_02
puertoB5_03
	bcf	PORTB,5
	movlw	D'20'
	movwf	Cont02
	call	Loopdisp		;retardo de 22.22ms
puertoB5_04
	clrw
	btfsc	PORTB,5
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	puertoB5_05
	goto	puertoB5_04
puertoB5_05	
	call	decseg
puertoB6_01
	clrw
	btfsc	PORTB,6
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	Vseg	
	bcf	PORTB,6
	movlw	D'20'
	movwf	Cont02
	call	Loopdisp		;retardo de 22.22ms
puertoB6_02
	clrw
	btfsc	PORTB,6
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	puertoB6_03
	goto	puertoB6_02
puertoB6_03
	bcf	PORTB,6
	movlw	D'20'
	movwf	Cont02
	call	Loopdisp		;retardo de 22.22ms
puertoB6_04
	clrw
	btfsc	PORTB,6
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	puertoB6_05
	goto	puertoB6_04
puertoB6_05	
	call	incseg
	goto	Vseg		;permanece en variar segundos hasta que se pulse denuevo RB0
decseg
s001	bcf	STATUS,Z		;ponemos en cero bit "Z"
	movf	Dato1,W
	xorlw	0x00
	btfsc	STATUS,Z
	goto	s002
	decf	Dato1,F		;decrementas en uno la variable Dato1
	return
s002	movlw	0x09
	movwf	Dato1
	bcf	STATUS,Z		;ponemos en cero bit "Z"
	movf	Dato2,W
	xorlw	0x00
	btfsc	STATUS,Z
	goto	s003
	decf	Dato2,F		;decrementas en uno la variable Dato2
	return
s003	movlw	0x05
	movwf	Dato2
	return
incseg
s01	bcf	STATUS,Z		;ponemos en cero bit "Z"
	movf	Dato1,W
	xorlw	0x09
	btfsc	STATUS,Z
	goto	s02
	incf	Dato1,F		;decrementas en uno la variable Dato1
	return
s02	movlw	0x00
	movwf	Dato1
	bcf	STATUS,Z		;ponemos en cero bit "Z"
	movf	Dato2,W
	xorlw	0x05
	btfsc	STATUS,Z
	goto	s03
	incf	Dato2,F		;decrementas en uno la variable Dato2
	return
s03	movlw	0x00
	movwf	Dato2
	return	
Vmin
Vmin01	call	Display
puertoB0_006	clrw
	btfsc	PORTB,0
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	puertoB5_001	
	bcf	PORTB,0
	movlw	D'20'
	movwf	Cont02
	call	Loopdisp		;retardo de 22.22ms
puertoB0_007
	clrw
	btfsc	PORTB,0
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	puertoB0_008
	goto	puertoB0_007
puertoB0_008
	bcf	PORTB,0
	movlw	D'20'
	movwf	Cont02
	call	Loopdisp		;retardo de 22.22ms
puertoB0_009
	clrw
	btfsc	PORTB,0
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	puertoB0_010
	goto	puertoB0_009
puertoB0_010
	goto	VTime1
puertoB5_001
	clrw
	btfsc	PORTB,5
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	puertoB6_001	
	bcf	PORTB,5
	movlw	D'20'
	movwf	Cont02
	call	Loopdisp		;retardo de 22.22ms
puertoB5_002
	clrw
	btfsc	PORTB,5
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	puertoB5_003
	goto	puertoB5_002
puertoB5_003
	bcf	PORTB,5
	movlw	D'20'
	movwf	Cont02
	call	Loopdisp		;retardo de 22.22ms
puertoB5_004
	clrw
	btfsc	PORTB,5
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	puertoB5_005
	goto	puertoB5_004
puertoB5_005	
	call	decmin
puertoB6_001
	clrw
	btfsc	PORTB,6
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	Vmin	
	bcf	PORTB,6
	movlw	D'20'
	movwf	Cont02
	call	Loopdisp		;retardo de 22.22ms
puertoB6_002
	clrw
	btfsc	PORTB,6
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	puertoB6_003
	goto	puertoB6_002
puertoB6_003
	bcf	PORTB,6
	movlw	D'20'
	movwf	Cont02
	call	Loopdisp		;retardo de 22.22ms
puertoB6_004
	clrw
	btfsc	PORTB,6
	movlw	D'1'
	sublw	D'0'
	btfss	STATUS,Z
	goto	puertoB6_005
	goto	puertoB6_004
puertoB6_005	
	call	incmin
	goto	Vmin		;permanece en variar minutos hasta que se pulse denuevo RB0
decmin
m001	bcf	STATUS,Z		;ponemos en cero bit "Z"
	movf	Dato3,W
	xorlw	0x00
	btfsc	STATUS,Z
	goto	m002
	decf	Dato3,F		;decrementas en uno la variable Dato3
	return
m002	movlw	0x09
	movwf	Dato3
	bcf	STATUS,Z		;ponemos en cero bit "Z"
	movf	Dato4,W
	xorlw	0x00
	btfsc	STATUS,Z
	goto	m003
	decf	Dato4,F		;decrementas en uno la variable Dato4
	return
m003	movlw	0x05
	movwf	Dato4
	return
incmin
m01	bcf	STATUS,Z		;ponemos en cero bit "Z"
	movf	Dato3,W
	xorlw	0x09
	btfsc	STATUS,Z
	goto	m02
	incf	Dato3,F		;decrementas en uno la variable Dato3
	return
m02	movlw	0x00
	movwf	Dato3
	bcf	STATUS,Z		;ponemos en cero bit "Z"
	movf	Dato4,W
	xorlw	0x05
	btfsc	STATUS,Z
	goto	m03
	incf	Dato4,F		;decrementas en uno la variable Dato2
	return
m03	movlw	0x00
	movwf	Dato4
	return
Retardo
	movlw	d'89'		;90 -> W
	movwf	Cont01		;carga a Cont01 con 90 repeticiones para completar un segundo 
Bucle	call	Explora		;llamada de subrutina Explora
	bcf	STATUS,Z		;ponemos el bit "Z" en cero
	decf	Cont01,F		;Cont01 - 1 -> F
	btfss	STATUS,Z		;salta una posion si el bit Z del reg. STATUS es = 1
	goto	Bucle		;Otra vez al bucle de exploracion
	return			;Se ha explorado 90 veces y sea completado un segundo
Explora	call	Display		;una muestra d display demora 11.114 ms
	return

	END
