Hola:
Me costó lo suyo porque usas técnicas muy obsoletas.
Compila bien, no quiere decir que funcione como desees, puede hacer cosas raras.
Un saludo.
Me costó lo suyo porque usas técnicas muy obsoletas.
Código:
;********************************************************
;
; 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
BANKSEL ANSEL ;TRABAJO BANCO 1
clrf ANSEL ; Puertos digitales.
MOVLW B'11110000' ;BITS BAJOS = SALIDA
MOVWF TRISB
MOVLW B'11111111'
MOVWF TRISA
BANKSEL INTCON
BCF INTCON, GIE
BSF INTCON, INT0IE
BCF INTCON, INT0IF
BANKSEL PORTA
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 ¿Qué es RTCC? Si lo djo, da error.
NOP
NOP
BCF INTCON, INT0IF
BSF INTCON, GIE
BSF INTCON, INT0IE
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, INT0IF
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, INT0IF ;BOORO BANDERA
RETFIE
END
Un saludo.