;SI SW1=1, REALIZA CORRIMIENTO LEDS HACIA LA DERECHA
;SI SW1=0, REALIZA CORRIMIENTO LEDS HACIA LA IZQUIERDA
;PARA EVOLUPIC Bootloader 16F88
;CVRCON,CMCON,ANSEL EN BANCO 1

	processor 16f88
	include	  <p16f88.inc>	

;RESERVA LOCALIDADES PARA SUBRUTINA DE RETRASO

J	equ	H'20'	 ; localidad 20 es J
K	equ	H'21'	 ; localidad 21 es K

;DEFINE NOMBRE DE LOS BITS EN LOS PUERTOS A Y B

#DEFINE	RA0	PORTA,0
#DEFINE RA1	PORTA,1
#DEFINE RA2	PORTA,2
#DEFINE RA3	PORTA,3
#DEFINE RA4	PORTA,4
#DEFINE RB0	PORTB,0
#DEFINE RB1	PORTB,1
#DEFINE RB2	PORTB,2
#DEFINE RB3	PORTB,3
#DEFINE RB4	PORTB,4
#DEFINE RB5	PORTB,5
#DEFINE RB6	PORTB,6
#DEFINE RB7	PORTB,7

;MACROS PARA LA SELECCION DE LOS BANCOS DE REGISTROS

BANCO0	MACRO
	BCF	STATUS,RP0
	BCF	STATUS,RP1
	ENDM
BANCO1	MACRO
	BSF	STATUS,RP0
	BCF	STATUS,RP1
	ENDM

;MACRO PARA INICIALIZACION DE PUERTOS PARA 16F88

PUERTOS MACRO
		BANCO0
		bcf	RCSTA,SPEN	;DESHABILITA UART
		BANCO1
		movlw	7
		movwf	CMCON		;DESHABILITA COMPARADORES
		clrf	CVRCON		;DESHABILITA VOLTAJE DE REFERENCIA
		clrf	ANSEL		;DESHABILITA CONVERTIDORES AD
		MOVLW	H'1E'
		MOVWF	TRISA		;RA0 SALIDA, RA1...RA3 ENTRADAS			
		clrf	TRISB		;RB0...RB7 SALIDAS
		BANCO0
		BCF	RA0		;APAGA RELEVADOR
		CLRF	PORTB		;APAGA LEDS
		ENDM

		ORG 0			;ORIGEN DEL PROGRAMA EN LA DIRECCION 0
		clrf	PCLATH		;REQUERIDO POR TINY
		goto	WEB
		ORG 3						
WEB		PUERTOS
		BSF 	RB0
	 	BCF	STATUS,C	;ASEGURA CARRY=0
LOOP		BTFSS 	RA1
		GOTO 	UNO
		GOTO 	DOS
UNO		CALL 	IZQ
		GOTO 	LOOP
DOS		CALL 	DER
		GOTO 	LOOP		 
IZQ		RLF 	PORTB		;CORRIMIENTO DERECHA
		CALL 	retro
		RETURN
DER 		RRF 	PORTB			;CORRIMIENTO IZQUIERDA
		CALL 	retro
		RETURN

;rutina de retraso de 200 milisegundos 
         
retro:		movlw	D'200'			; 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