Autor Tema: Problema interruptores y motor PaP  (Leído 1616 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Twistx77

  • PIC10
  • *
  • Mensajes: 1
Problema interruptores y motor PaP
« en: 06 de Septiembre de 2008, 12:32:53 »
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