; Intento practicar para visualizar el comportamiento de los registros y su funcioamiento.
; Es un contador de impulsos aplicado por RA0 sin retardo para ejemplo, contando en BCD a dos digitos 
; cuyas variables son Unidad y Decenas.





; ZONA DE DATOS **********************************************************************

	LIST		P=16F876A
	INCLUDE		<P16F876A.INC>
	__CONFIG	_CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
	
	CBLOCK		0x0C
	Decenas
	Unidad
	Cuenta
	Cuenta_1
	ENDC
	
	
; ZONA DE CÓDIGOS ********************************************************************

	org 	0						; El programa comienza en la direccion 0.
	goto	Inicio
Inicio

	bsf		STATUS,RP0				; Acceso al Banco 1.
	clrf	TRISB
	movlw	0x06					; Las lineas del Puerto B se configuran como salida.
	movwf	ADCON1
	movlw	b'00000001'				; La lineas del Puerto A,0 se configuran como entrada.
	movwf	TRISA
	bcf		STATUS,RP0				; Acceso al Banco 0.
	movlw	.9
	movwf	Cuenta					; Variable a comparar con Unidad. max 9
	movlw	.99
	movwf	Cuenta_1				; Variable a comparar con Decenas max 99
	clrf	Unidad					; Variable Unidad cero
	clrf	Decenas					; Variable Decenas cero
	clrf	PORTA					; Salidas del PORTA todas a cero
	clrf	PORTB					; salidas del PORTB todas a cero

Principal
	
	btfsc	PORTA,0			;Comprueba si ha recibido un impulso (1) en el PORTA,0
	goto	Unidad_suma		; Si se ha pulsado va a Unidad_suma( encargada de aumentar el valor Unidad)
	goto	Principal		; Se debe colocar un retardo, pero vuelva a comprobar i el PORTA,0 no se ha pulsado.
	
Unidad_suma	

	incf	Unidad,F		;Incrementa Unidad, ( el problema es que cuando vale 1 e incrementa a 2 se pone a cero.
	movf	Unidad,W		;Mueve el valor de Unidad al registro W para comparar si ha llegado a 9.
	subwf	Cuenta,W		;Resta Cuenta (9) al valor Unidad.
	btfsc	STATUS,Z		;Si ha llegado a 9 se cumple la condici˘n y va a Unidad_cero......
	goto	Unidad_cero
	goto 	Principal
	
Unidad_cero

	clrf	Unidad	
	incf	Decenas,F		;Problema no se porque no incrementa decena cuando vale mas de uno.
	movf	Decenas,W
	subwf	Cuenta_1,W
	btfsc	STATUS,Z	
    goto	Principal
    
	goto 	Principal
	
	End
	
