Buenas, soy nuevo en lo de programar pics el problema es que quiero hacer girar un Stepper para un lado si le doy a un botón y para otro si le doy al otro botón. Puedo hacerlo girar de forma continua pero al añadir los interruptores cuando le doy a alguno lo que es ponerme en alto solo una de las patillas del Puerto B y no hace la secuencia. Lo de los interruptores creo que está bien ya que en vez de poner las rutinas de giro del motor probe poniendo que encendiera el led uno de los botones y el otro lo apagase. Aquí les dejo el código a ver que opinan. He puesto el giro a la derecha usando bsf y bcf y e girar a la izquierda colocando el numero binario completo al PORTB. Gracias de antemano.
LIST P=16F648A
#INCLUDE "p16F648A.inc"
; Programa simple para probar pic16f648A PORTA se activa al activar RB4 (pin10)
__config 0x3D18
;
;
; Register Usage
; Start Registers at End of the Values
cblock 0x20
d1
d2
endc
; Enable all of A & B for Output
org 0x05
clrf STATUS
clrf PORTA
clrf PORTB
movlw 0x07 ;Turn comparators off and
movwf CMCON
banksel TRISA
movlw b'00000011' ;Value used to initialize
;data direction
movwf TRISA
movlw b'00000000'
movwf TRISB
banksel PORTA
clrf PORTB
clrf PORTA
goto comprueba
comprueba
btfsc PORTA,0
goto $+3
call ANTIRREBOTES
call derecha
goto comprueba
derecha
bsf PORTB,0
call Delay1
bcf PORTB,3
call Delay1
bsf PORTB,1
call Delay1
bcf PORTB,0
call Delay1
bsf PORTB,2
call Delay1
bcf PORTB,1
call Delay1
bsf PORTB,3
call Delay1
bcf PORTB,2
call Delay1
bftsc PORTA,0
return
goto derecha
izquierda
movlw b'00001000'
movwf PORTB
call Delay1
movlw b'00001100'
movwf PORTB
call Delay1
movlw b'00000100'
movwf PORTB
call Delay1
movlw b'00000110'
movwf PORTB
call Delay1
movlw b'00000010'
movwf PORTB
call Delay1
movlw b'00000011'
movwf PORTB
call Delay1
movlw b'00000001'
movwf PORTB
call Delay1
btfsc PORTA,1
return
goto izquierda
ANTIRREBOTES
btfss PORTA,0
goto ANTIRREBOTES
btfss PORTA,1
goto ANTIRREBOTES
return
Delay1
;4993 cycles
movlw 0xE6
movwf d1
movlw 0x04
movwf d2
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto Delay_0
;3 cycles
goto $+1
nop
return
END