;SE USA ARCHIVO AUXILIAR "KEY.inc" PARA
;LA INICIALIZACION DE LOS PUERTOS.
;MANEJA 6 CLAVES EN LOS MICROSWITCHES
;DESPUES DE RESET, REALIZA UNA ACCION
;DISTINTA EN LOS LEDS DEL PUERTO B
;DEPENDIENDO DE LA CLAVE

	include	  <p16f88.inc>
	include	  "KEY.inc"

J		EQU 0X20			;LOCALIDADES PARA SUBRUTINA DE RETRASO
K		EQU 0X21 
CLAVE	EQU	0X22
		ORG 	0
		CLRF 	PCLATH		;REQUERIDO POR EL BOOTLOADER TINY
		GOTO	INICIO		;AQUI DEBE HABER UN GOTO AL INICIO DEL PROGRAMA	
		ORG 	3		;REQUERIDO POR EL BOOTLOADER TINY. 						
INICIO		PUERTOS			;MACRO PARA INICIALIZAR LOS PUERTOS DE 16F88

;aquí inicia el programa del usuario

			movf	PORTA,W
			andlw	0x0E
			movwf	CLAVE
			sublw	B'00000000'
			btfss	STATUS,Z
			goto	CONT1
			goto	CERO
CONT1		movf	CLAVE,W
			sublw	B'00000010'
			btfss	STATUS,Z
			goto	CONT2
			goto	UNO
CONT2		movf	CLAVE,W
			sublw	B'00000100'
			btfss	STATUS,Z
			goto	CONT3
			goto	DOS
CONT3		movf	CLAVE,W
			sublw	B'00000110'
			btfss	STATUS,Z
			goto	CONT4
			goto	TRES
CONT4		movf	CLAVE,W
			sublw	B'00001000'
			btfss	STATUS,Z
			goto	CONT5
			goto	CUATRO
CONT5		movf	CLAVE,W
			sublw	B'00001010'
			btfss	STATUS,Z
			sleep
			goto	CINCO


CERO		clrf	PORTB
			sleep
UNO			movlw	0xFF
			movwf	PORTB
			sleep
DOS			bcf		STATUS,C
			bsf  	RB7
loop2		rrf		PORTB
			call 	retro
			goto	loop2
TRES		bcf		STATUS,C
			bsf  	RB0
loop1		rlf		PORTB
			call	retro
			goto	loop1
CUATRO		bcf		STATUS,C
			bsf  	RB0 
			goto 	izquierda
derecha  	rrf 	PORTB
			call 	retro
			btfss 	RB0
			goto 	derecha
			goto 	izquierda
izquierda	rlf		PORTB
			call 	retro
			btfss 	RB7
			goto 	izquierda
			goto 	derecha
CINCO		CLRF 	PORTB
			call	retro
			movlw	0xff
			movwf 	PORTB
			call 	retro
			goto 	CINCO

;rutina de retraso de 200 milisegundos 
         
retro:	movlw	D'250'		; w = 250 decimal
	movwf	J		; J = w
jloop:	movwf	K		; K = w
kloop:	decfsz	K,f		; K = K-1, omite si es cero
	goto 	kloop
	decfsz	J,f		; J = J-1, omite si es cero
	goto	jloop
	return

		END