; FILE TECLADO_877.ASM

	PROCESSOR 16F877
	INCLUDE	  <P16F877.INC>

	 __CONFIG _FOSC_EXTRC & _WDTE_OFF & _PWRTE_OFF & _BOREN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF

	ERRORLEVEL -302 ;v2	s
	ORG 0X0
	
	CBLOCK 0X20
VUELTAS			;20		CONTADOR 4 ROTACIONES
FILA			;21		VALOR RENGLÓN (RB4..RB7)
COLUMNA			;22		VALOR COLUMNA (RB0...RB3)
TECLALIBRE?		;23		VARIABLE PARA CHECAR TECLA LIBERADA
RENGLON1		;24		EQU 	H'80'
RENGLON2		;25		EQU 	H'C0'
DECEN			;26
DECEN2			;27
DECEN_ASCII		;28
UNID_ASCII		;2B
DECEN_SEGM		;2D		;2E
RESULT_H		;2F
RESULT_L
FACTOR_A
FACTOR_B
FLAG
NO_HAY_DECEN
D1
D2
D3
	ENDC
#DEFINE	BANCO0	BCF	STATUS,RP0
#DEFINE	BANCO1	BSF	STATUS,RP0

	ORG 		0
	GOTO BEGIN
		.
		.
		.
	BEGIN:
	BANCO1					
	MOVLW	H'00'		;RB0..RB7 SON SALIDAS
	MOVWF	TRISB
	MOVWF	TRISA		;RA0..RA4 SON SALIDAS
	MOVWF	TRISC
	MOVWF	TRISD
	BANCO0				;ELIGE EL BANCO 0
	CLRF	PORTC
	CLRF	PORTD
	BSF		PORTC,6
	BSF		PORTD,6
		.
		.
		.	
DEC_UNID
	CALL	SEGUNDO			;EMPEZAMOS A TEMPORIZAR	
	DECF	UNID_ASCII,F	;DECREMENTAMOS UNIDADES
	MOVFW	UNID_ASCII
	ADDLW	D'16'			;PUNTERO PARA TABLA
	CALL	TABLA
	MOVWF	PORTC			;PINTAMOS UNIDADES
	MOVFW	UNID_ASCII		;UNIDADES A W
	BTFSS	STATUS,Z		;HEMOSW LLEGADO A 0
	GOTO	DEC_UNID		;NO. DECREMENTAMOS UNIDADES
	GOTO	DEC_DECEN		;	
	
DEC_DECEN:
	CALL	SEGUNDO
	MOVFW	DECEN_ASCII		;EN SEGUNDA VUELTA Z NO SE PONE A 1
	MOVWF	DECEN_ASCII		
	BTFSC	NO_HAY_DECEN,1	;SI HAY DECENAS SEGUIMOS
	GOTO	BEGIN			;no se rinicia correctamente deswpues de este GOTO
	DECF	DECEN_ASCII,1
	MOVF	DECEN_ASCII,W
	BTFSC	STATUS,Z
	CALL	ZERO2	
	MOVLW	D'9'
	MOVWF	UNID_ASCII
	ADDLW	D'16'
	CALL	TABLA
	MOVWF	PORTC
	GOTO	DEC_UNID
		.
		.
		.
		end