;********************************************************
;
; 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
;
;*******************************************************
;ZONA DE DATOS *****************************************
LIST P=16F88
INCLUDE <P16F88.INC>
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
; Oscilador cristal externo 4 MHz, con dos condensadores de 22 pF.
; _CP_OFF: Protección de código DESACTIVADO.
; _DEBUG_OFF: Debug en circuito DESACTIVADO.
; _WRT_PROTECT_OFF: Protección a escritura en memoria de programa DESACTIVADO.
; _CPD_OFF: Protección de código de datos DESACTIVADO.
; _LVP_OFF: Programación en baja tensión DESACTIVADO.
; _BODEN_OFF: Reset por Brown-out DESACTIVADO.
; _MCLRE_ON: Reset por pin externo ACTIVADO.
; _PWRTE_ON: Retraso al reset ACTIVADO.
; _WDT_OFF: Watchdog DESACTIVADO.
; _XT_OSC: Oscilador externo del tipo XT.
; _IESO_OFF: Modo de intercambio de externo a interno DESACTIVADO.
; _FCMEN_OFF: Monitor de CLK DESACTIVADO.
;*******************************
; DEFINICIÓN DE REGISTROS
;********************************
CBLOCK 0x20
POS ;Aquí va el número de paso de 1 a 4
CUENTA ;Cuenta cada interrupción de 0.25 segundos, a las 5 dá un paso
RETARDO
ENDC
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, INT0IF ;Bandera TMR0
BSF INTCON, GIE ;Interrupcion general
BSF INTCON, INT0IE ;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, INT0IF
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, INT0IF ;BOORO BANDERA
RETFIE
END