;********************************************************
;
;	Movimiento de un motor de pasos, 
;	MOTOR DE 48 PASOS POR VUELTA
;	1 PASO CADA 1.25SEG  A 32768KHz
;
;		RB3	RB2	RB1	RB0
;		
;		1	0	1	0
;		1	0	0	1	AVANCE, LOS 1 SON ON		
;		0	1	0	1	SE SUPONE A TRAVÉS DE ULN2003
;		0	1	1	0
;
;*******************************************************
IND0    EQU 0X00
RTCC    EQU 0X01
PCL     EQU 0X02
STATUS  EQU 0X03 ;LOS 8 BITS DE STATUS
IRP     EQU 7
RP1     EQU 6
RP0     EQU 5
TO      EQU 4
PD      EQU 3
Z       EQU 2
DC      EQU 1
C       EQU 0
FSR     EQU 0X04
PORTA   EQU 0X05
PORTB   EQU 0X06
EEDATA  EQU 0X08
EEADR   EQU 0X09
PCLATCH EQU 0X0A
INTCON  EQU 0X0B
GIE     EQU 7
EEIE    EQU 6
T0IE    EQU 5
INTE    EQU 4
RBIE    EQU 3
T0IF    EQU 2
INTF    EQU 1
RBIF    EQU 0
OPT     EQU 0X81
RBPU    EQU 7
INTEDG  EQU 6
T0CS    EQU 5
T0SE    EQU 4
PSA     EQU 3
PS2     EQU 2
PS1     EQU 1
PS0     EQU 0
TRIA    EQU 0X85
TRIB    EQU 0X86
EECON1  EQU 0X88
EEIF    EQU 4
WRERR   EQU 3
WREN    EQU 2
WR      EQU 1
RD      EQU 0
;*******************************
;	DEFINICIÓN DE REGISTROS
;********************************
POS	EQU	0X0C		;Aquí va el número de paso de 1 a 4
CUENTA	EQU	0X0D		;Cuenta cada interrupción de 0.25 segundos, a las 5 dá un paso
RETARDO	EQU	0X0E
	ORG	0X0000
	GOTO 	SETEOS
	ORG	0X0004
	GOTO	INTERR
	ORG	0X0008
SETEOS	BSF	STATUS, RP0	;TRABAJO BANCO 1
	MOVLW	B'11110000'	;BITS BAJOS = SALIDA
	MOVWF	TRIB
	MOVLW	B'11111111'
	MOVWF	TRIA
	BCF	OPT, T0CS
	BCF	OPT, PSA
	BCF	OPT, PS2
	BSF	OPT, PS1	; PREESCALER DIVIDE POR 8
	BCF	OPT, PS0
	BCF	STATUS, RP0
	
	BCF	INTCON, GIE
	BSF	INTCON, T0IE
	BCF	INTCON, T0IF
	MOVLW	.1
	MOVWF	POS
	CLRF	CUENTA
;**************************************ESPERA 1 BOTÓN************************
ESPERA	BTFSS	PORTA, 0	
	GOTO	ADEL
	BTFSS	PORTA, 1
	GOTO	ATRAS
	BTFSS	PORTA, 2
	GOTO 	AVANCE			
	CLRF	PORTB		;APAGA TODO PUES ESTÁ EN REPOSO
	GOTO	ESPERA
;****************************************ADELANTE****************************
;			           MUEVE UN PASO Y VUELVE
;****************************************************************************
ADEL	CALL	TIEMPO
	BTFSC	PORTA, 0
	GOTO	ESPERA		;RUIDO	
	INCF	POS
	MOVLW	.5
	SUBWF	POS,0
	BTFSS	STATUS, Z
	GOTO	NA
	MOVLW	.1
	MOVWF	POS
NA	CALL 	PULSOS
	CALL	TIEMPO
	CALL	TIEMPO		;ESPERA ESTABILIZARSE
	GOTO	ESPERA
		
;****************************************ATRAS****************************
;			           MUEVE UN PASO Y VUELVE
;****************************************************************************
ATRAS	CALL	TIEMPO
	BTFSC	PORTA, 1
	GOTO	ESPERA		;RUIDO	
	DECF	POS
	BTFSS	STATUS, Z	;controlo no baje de 1, si es 0 va a 4
	GOTO	NT		
	MOVLW	.4
	MOVWF	POS
NT	CALL 	PULSOS
	CALL	TIEMPO		;ESPERA ESTABILIZARSE
	CALL	TIEMPO
	GOTO	ESPERA
;****************************************AVANCE********************************
;			       SOLO SE SALE CON STOP
;******************************************************************************
AVANCE	CLRF	RTCC
	NOP	
	NOP
	BCF	INTCON, T0IF
	BSF	INTCON,	GIE
	BSF	INTCON, T0IE
	
QUEDA	BTFSS	PORTA, 3
	GOTO	PARA
	GOTO	QUEDA
;****************************************PARA**********************************
PARA	CALL	TIEMPO
	BTFSC	PORTA, 3
	GOTO 	QUEDA		;SI FUE UN RUIDO VUELVO
	CLRF	PORTB
	BCF	INTCON, GIE
	BCF	INTCON, T0IF
	GOTO	ESPERA
;********************************************************************************
;**************************************TIEMPO RETARDO REBOTES*****************************
TIEMPO	MOVLW	.50
	MOVWF	RETARDO
TI	DECFSZ	RETARDO		;RETARDO PARA REBOTES
	GOTO	TI
	RETURN
;*****************************************************************************************
;***************************************PULSOS*************************************
PULSOS	MOVLW	.1
	SUBWF	POS, 0
	BTFSS	STATUS, Z
	GOTO	SEG
	MOVLW 	B'00001010'	;1 CODIGO
	MOVWF	PORTB
	RETURN
SEG	MOVLW	.2
	SUBWF	POS, 0
	BTFSS	STATUS, Z
	GOTO	TER
	MOVLW 	B'00001001'	;2 CODIGO
	MOVWF	PORTB
	RETURN
TER	MOVLW	.3
	SUBWF	POS, 0
	BTFSS	STATUS, Z
	GOTO	CUAT
	MOVLW 	B'00000101'	;3 CODIGO
	MOVWF	PORTB
CUAT	MOVLW	.4
	SUBWF	POS, 0
	BTFSS	STATUS, Z
	GOTO	FINAL
	MOVLW 	B'00000110'	;4 CODIGO
	MOVWF	PORTB
FINAL	RETURN
;************************************INTERR***********************************
;                                CADA .25 DE SEGUNDO VIENE AQUÍ
;*****************************************************************************
INTERR	INCF	CUENTA
	MOVLW	.5
	SUBWF	CUENTA, 0
	BTFSS	STATUS, Z
	GOTO 	VOLVER		; SI NO LLEGÓ A 5
	CLRF	CUENTA		; SI LLEGÓ A 5/4 AVANZO
	INCF	POS
	MOVLW	.5
	SUBWF	POS,0
	BTFSS	STATUS, Z
	GOTO	NIN
	MOVLW	.1
	MOVWF	POS
NIN	CALL 	PULSOS
	CALL	TIEMPO
VOLVER	BCF	INTCON, T0IF	;BOORO BANDERA
	RETFIE
	END