		; **** Encabezado ****
	list p=16F84A
	#include <P16F84A.inc>
	
__CONFIG  _CP_OFF & _XT_OSC & _WDT_OFF 	;Configuracion Fusibles Pic 

display1	EQU 0X0C
display2	EQU 0X0D
retardo1 	EQU 0X0E
retardo2	EQU 0X0F
retardo3	EQU 0X10

PulsadorM1 	EQU	0
PulsadorM2 	EQU 1 

Reset	org 0x00				;El programa comienza en la direccion 0 de memoria del programa
		goto Inicio
		org 0X05	
Inicio	
		bsf	STATUS,RP0		;Pone a 1 el bit 5 del STATUS. Acceso al Banco 1
		movlw	b'00000011' 	; Las 2 líneas RA2 y RA3 salidas del Puerto A y RA0 y RA1 se configuran como entrada.
		movwf	TRISA			;Las Lineas del Puerto A se Configuran como Entradas y salidas
		movlw	b'00000000'		;El Puerto B se configura como salida
		movwf	TRISB
		bcf	STATUS,RP0		;Pone a 0 el bits  Regresamos al Banco 0

		clrf	display1		; limpia el display 1
		clrf	display2

Config_7Seg	
		movlw	.0
		call 	Binario_7Seg
		movwf	PORTB

Principal
		btfss	PORTA,PulsadorM1 		;Testeamos si esta a 1 logico(¿El Bit "PulsadorM1" del PuertoA esta en 1 Logico?)
		call	M1					;Salta a la Etiqueta M1				
		btfss	PORTA,PulsadorM2 ; Testeamos si esta a 1 logico (¿El Bit "PulsadorM2" del PuertoA esta en 1 Logico?)
		call	M2					;Salta a la Etiqueta M2	
		call	MostrarDisplay
		goto	Principal	;vuelve o salta a la etiqueta Principal

;*** Lo que hacen los Display al precionar M1 y M2 ****
 M1
		incf	display2,F		;Incrementa en 1 el display2. 
		movlw	b'00000001'     ; Muestra el "PULSADOR 1" en el display1
		movwf	display1
		return
 M2
		incf	display2,F      ;Incremento en uno el valor del display2 
		movlw	b'00000010'     ; Muestra el "PULSADOR 2" en el display1
		movwf	display1
		return
;*******		
MostrarDisplay
            bcf		PORTA,3      	
            movf	display1,W       ; (activa primero el display1 al momento de precionar el pulsador)
            call	Binario_7Seg
            movwf	PORTB
            bsf 	PORTA,2
            call 	Retardo 	;deberia hber una muy pequeña demora aca (15 ciclos por ahi para que sea equivalente el tiempo en ambos displays)
            movf 	display2,W                  
            call 	Binario_7Seg
            bcf 	PORTA,2                       ; desactivo el display de unidades, pongo el valor de decenas en portb y activo display de decenas
            movwf 	PORTB
            bsf 	PORTA,3
            call 	Retardo
            return	

Retardo
			movlw d'5' 			;(Velocidad al presionar el pulsador)
			movwf retardo1
	tres	movlw d'30' 		 ;(velocidad de cambbio de display)
			movwf retardo2
	
	dos		movlw d'100'
			movwf retardo3

	uno		nop
			nop
			decfsz	retardo3,F
			goto 	uno
			decfsz  retardo2,F
			goto 	dos
			decfsz  retardo1,F
			goto 	tres
			return

Binario_7Seg

			addwf	PCL,F
			retlw	b'0111111'	; 0	
			retlw	b'0000110'	; 1	
			retlw	b'1011011'	; 2	
			retlw	b'1001111'	; 3	
			retlw	b'1100110'	; 4	
			retlw	b'1101101'	; 5	
			retlw	b'1111101'	; 6	
			retlw	b'0000111'	; 7	
			retlw	b'1111111'	; 8	
			retlw	b'1101111'	; 9	
			clrf	display2	; Si llega 10, se resetea contador
			retlw	b'0111111'	; 0
			

END