;********************************************************
;
; 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
;
;*******************************************************
LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;*******************************
; 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 TRISB
MOVLW B'11111111'
MOVWF TRISA
movlw b'00000010'
movwf OPTION_REG ;Temporizador TMR0 a 1/8 preescala
BCF STATUS,RP0 ;Banco 0
movlw b'00100000'
movwf INTCON ;Interrupcion por TMR0
MOVLW .1
MOVWF POS
CLRF CUENTA
;**************************************ESPERA 1 BOTÓN************************
ESPERA BTFSS PORTA,RA0
call ADEL
BTFSS PORTA,RA1
call ATRAS
BTFSS PORTA,RA2
call AVANCE
CLRF PORTB ;APAGA TODO PUES ESTÁ EN REPOSO
GOTO ESPERA
;****************************************ADELANTE****************************
; MUEVE UN PASO Y VUELVE
;****************************************************************************
ADEL CALL TIEMPO ;Tiempo para el antirrebote
BTFSC PORTA,RA0
return ;RUIDO
INCF POS,F
MOVLW .5
SUBWF POS,W
BTFSS STATUS, Z
GOTO NA
MOVLW .1
MOVWF POS
NA CALL PULSOS
CALL TIEMPO ;Tiempo para escitar las bobinas del motor
CALL TIEMPO ;ESPERA ESTABILIZARSE
return
;****************************************ATRAS****************************
; MUEVE UN PASO Y VUELVE
;****************************************************************************
ATRAS CALL TIEMPO ;Tiempo para el antirrebote
BTFSC PORTA,RA1
return ;RUIDO
DECF POS,F
movlw .0
subwf POS,W
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 ;Tiempo para escitar las bobinas del motor
return
;****************************************AVANCE********************************
; SOLO SE SALE CON STOP
;******************************************************************************
AVANCE CLRF TMR0
NOP
NOP
BCF INTCON, T0IF ;Bandera TMR0
BSF INTCON, GIE ;Interrupcion general
BSF INTCON, T0IE ;Interrupcion por TMR0
QUEDA BTFSS PORTA,RA3
GOTO PARA
GOTO QUEDA
;****************************************PARA**********************************
PARA CALL TIEMPO ;Tiempo para el antirrebote
BTFSC PORTA,RA3
GOTO QUEDA ;SI FUE UN RUIDO VUELVO
CLRF PORTB
BCF INTCON, GIE
BCF INTCON, T0IF
return
;**************************************TIEMPO RETARDO REBOTES*****************************
TIEMPO MOVLW .50 ;Aumentar el tiempo pues no escita las ;bobinas
MOVWF RETARDO
TI DECFSZ RETARDO,F ;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
return
CUAT MOVLW .4
SUBWF POS, 0
BTFSS STATUS, Z
return
MOVLW B'00000110' ;4 CODIGO
MOVWF PORTB
FINAL RETURN
;************************************INTERR***********************************
; CADA .25 DE SEGUNDO VIENE AQUÍ
;*****************************************************************************
INTERR INCF CUENTA,F
MOVLW .5
SUBWF CUENTA,W
BTFSS STATUS, Z
GOTO VOLVER ; SI NO LLEGÓ A 5
CLRF CUENTA ; SI LLEGÓ A 5/4 AVANZO
INCF POS,F
MOVLW .5
SUBWF POS,W
BTFSS STATUS, Z
GOTO NIN
MOVLW .1
MOVWF POS
NIN CALL PULSOS
CALL TIEMPO
VOLVER BCF INTCON, T0IF ;BOORO BANDERA
RETFIE
END