Autor Tema: Problema con giro de un motor  (Leído 1283 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado paolaandrea33

  • PIC10
  • *
  • Mensajes: 4
Problema con giro de un motor
« en: 15 de Marzo de 2010, 23:38:51 »
Hola a todos!!

Espero que alguien me pueda ayudar con el problema que tengo...lo que pasa es que estoy tratando de controlar un motor con el PIC16F84A y con el integrado L293D, segun yo las conexiones entre ambos estan bien, sin embargo tengo dificultades para que el motor siga las instrucciones de mi programa, ya que lo que quiero es que al presionar un push button el motor gire para un lado y se detenga (si el push sigue presionado despues de que el motor se haya detenido, entonces el motor debera continuar parado), luego si el push ya no esta presionado que gire en sentido contrario y tambien se detenga. No se que es lo que me hace falta o esta mal en el programa, aca se los anexo:

; Zona de Datos*************************************************
   
      LIST   P=16F84; tipo de procesador
      include "P16F84.INC"; Definiciones de registros internos
      __CONFIG _CP_OFF& _WDT_OFF&_PWRTE_ON&_XT_OSC
      
;Declaracion de variable****************************************

w       equ 0x00;
f       equ 0x01;
PORTB   equ 0x06;
STATUS  equ 0x03;
      CBLOCK   0x0c;
      R_CONTA
      R_CONTB
      ENDC

#DEFINE SensorMarcha  PORTA, 1; Interruptor de puesta en marcha RA1
      

      ORG    0;

Inicio
                   bsf     STATUS, RP0; Acceso al Banco 1
      bsf     SensorMarcha; configura la linea de entrada RA0
      bsf     TRISA, 1;
      clrf     TRISB; Las lineas del puertoB se configuran como salidas
      bcf     STATUS, RP0;Acceso al Banco 0


Sensar   btfsc    SensorMarcha; Salta si la entrada esta en 0
   goto    Sensar;
   movlw   0x0A; giro a favor
   movwf   PORTB;
   goto          Retardo_1ms;  se llama a la etiqueta para hacer el retardo
Paro   clrw
   movwf      PORTB; se detiene el motor
   btfss         SensorMarcha;Salta si la entrada esta en 1
                goto     Paro;
   movlw   0x06; giro en contra
   movwf   PORTB;
   goto   Retardo_1ms1;  se llama a la subrutina para hacer el retardo
 Paro1   clrw
   movwf   PORTB; Se detiene el motor
   goto    Sensar

; Subrutina "Retardo" -------------------------------------------------------------------
;
; Subrutina de retardo en milisegundos. El valor cargado en W antes del llamado a la
; subrutina indica el número de milisegundos del retardo.
;

Retardo_1ms

      
       movlw    d'249'; Numero de veces que se repetirá el ciclo para generar 100 ms
      movwf    R_CONTA
top       nop
      nop
      nop
      nop
      nop
      nop
      decfsz    R_CONTA,f ; Pregunta si termino 1 ms
      goto    top
      goto Paro

Retardo_1ms1

      
       movlw    d'249'; Numero de veces que se repetirá el ciclo para generar 100 ms
      movwf    R_CONTB
top1       nop
      nop
      nop
      nop
      nop
      nop
      decfsz    R_CONTB,f ; Pregunta si termino 1 ms
      goto    top1
      goto Paro1
   
      end


Como pueden ver me toco hacer el retardo como una etiqueta y con la instruccion goto por que cuando lo hice con la instruccion call y return no hacia el paro. En este caso, giraba una vez hacia el paro pero ya no hacia el otro giro. En verdad espero que me puedan ayudar, por que ya no se que mas hacer. Muchas Gracias!!


 

anything