	list p=16F84A
	include "p16F84A.inc"

;------------------------------------------------
			
	tecla		equ 	0x10	
	columna  	equ 	0x11
	salv_w 		equ 	0x12
	salv_s 		equ 	0x13

;------------------------------------------------
;MACROS
;------------------------------------------------

BANK0	macro
		bcf 	STATUS,RP0
		endm

BANK1	macro
		bsf		STATUS,RP0
		endm

PUSH	macro
		movwf	salv_w
		swapf	salv_w,F
		swapf	STATUS,W
		movwf	salv_s
		endm

POP		macro
		swapf	salv_s,W
		movwf	STATUS
		swapf	salv_w,W
		endm

;------------------------------------------------		
			org 	0x00
			goto 	Inicio
			
			org 	0x04
			goto 	TECLADO

;------------------------------------------------
;Tabla considerando lámparas 7 seg cátodo común.
;------------------------------------------------
TABLA 	addwf 	PCL,f ;Suma de PC con el dígito a representar
		retlw 	0x3F ;Para el cero
		retlw 	0x06 ;el uno
		retlw 	0x5B ;el dos
		retlw 	0x4F ;el tres
		retlw	0x71 ;F
		retlw 	0x66 ;el cuatro
		retlw 	0x6D ;el cinco
		retlw 	0x7D ;el seis
		retlw	0x79 ;E
		retlw 	0x07 ;el siete
		retlw 	0x7F ;el ocho
		retlw 	0x6F ;el nueve
		retlw	0x97 ;D
		retlw	0x77 ;A
		retlw	0x3F ;0
		retlw	0x7A ;B
		retlw	0x39 ;C
	 	retlw 	0x00 ;en blanco
;------------------------------------------------
;Programa Principal
;------------------------------------------------
Inicio clrf PORTB
		BANK1
		movlw b'00000000'
		movwf TRISB
		movlw b'11110'
		movwf TRISA
		movlw b'10000111'
		movwf OPTION_REG
		BANK0
		movlw 0x90
		movwf TMR0
		movlw b'10100000'
		movwf INTCON
		movlw 0x0D
		movwf tecla
		clrf columna
		bcf PORTA,0
loop	movf tecla,0
		call TABLA
		movwf PORTB
		bsf PORTA,0
		goto loop

;------------------------------------------------
;ATENCION AL TECLADO
;------------------------------------------------

	TECLADO	PUSH 
		bcf INTCON,2
		movlw 0x9C
		movwf TMR0
		bcf PORTA,0
		clrf PORTB
		BANK1
		movlw b'11110000'
		movwf TRISB
		bcf OPTION_REG,7
		BANK0
		movlw b'11110111'
		movwf PORTB
		NOP


	explora	btfss PORTB,7
		goto row0
		btfss PORTB,6
		goto row1
		btfss PORTB,5
		goto row2
		btfss PORTB,4
		goto row3
		movf columna,0
		xorlw 0x03
		btfsc STATUS,Z
		goto final
		incf columna,1
		rrf PORTB,1
		NOP
		goto explora

row0	 movf columna,0
		movwf tecla
		goto final
		

row1 	movf columna,0
		addlw 0x04
		movwf tecla
		goto final

row2 	movf columna,0
		addlw 0x08
		movwf tecla
		goto final

row3		movf columna,0
		addlw 0x0C
		movwf tecla
		goto final

final 	clrf columna
		clrf PORTB
		BANK1
		movlw b'00000000'
		movwf TRISB
		BANK0
		POP
		retfie 
	
 end