Autor Tema: Problemas con programa !!  (Leído 2344 veces)

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

Desconectado paolaandrea33

  • PIC10
  • *
  • Mensajes: 4
Problemas con programa !!
« en: 31 de Marzo de 2010, 12:43:13 »
Hola a todos !!

Espero que alguien me pueda ayudar, la verdad me imagino que mi programa no me esta funcionando como deseo por algo que estoy omitiendo poner o algo asi, ya que lo que pasa es que si hace lo que quiero pero despues de un tiempo ya no hace nada y me toca resetarlo. Empece hace muy poco y espero que alguien me pueda ayudar, mi programa hace que un motor gire se pare y cambie de sentido. Como les digo si hace tal cual lo que yo quiero pero luego se para, alguien sabe a que se debe esto? 

les pongo mi programa:

; 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      0x00   ; Aqui comienza el micro.
      
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;
      call    DEMORA
       clrw
      movwf   PORTB
Sensar2 btfss   SensorMarcha;
        goto    Sensar2;
      movlw   0x06
      movwf   PORTB
      call    DEMORA
      clrw
      movwf   PORTB

DEMORA  movlw     .117      ; 1 set numero de repeticion  (B)
        movwf     R_CONTA     ; 1 |
PLoop1  movlw     .213      ; 1 set numero de repeticion  (A)
        movwf     R_CONTB     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        clrwdt              ; 1 ciclo delay
        decfsz    R_CONTB, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    R_CONTA,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  goto PDelL3         ; 2 ciclos delay
PDelL3  clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.

   

      end



Muchas gracias por cualquier ayuda que me puedan brindar. Saludos!!!

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problemas con programa !!
« Respuesta #1 en: 31 de Marzo de 2010, 12:53:14 »
Cual es la interface que utilizas para controlar el motor? Para proteger al microcontrolador del ruido que genera?

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: Problemas con programa !!
« Respuesta #2 en: 31 de Marzo de 2010, 13:56:13 »
.


Mm.. no me queda muy claro cómo es el funcionamiento de los pulsadores. Pero más allá de eso, hay algunas líneas que "retocar" el en programa (espero no te lo tomes a mal, son con intención de ayudar):

1- La directiva ORG indica en qué lugar de la memoria de programa va a ir lo que hay por debajo de ella. En este caso has hecho lo correcto al poner ORG 0X00, ya que desde ahí empieza a leer el PIC. Pero debés tener en cuenta que en la posición 0X04 de la memoria (en este caso lo ocupa la línea CLRF TRISB) se encuentra el vector de interrupción. Es decir que ahí va a ir el uC cuando ocurra una interrupción. Es por eso que no se acostumbra iniciar el código en la línea 0X00, sino poner
Código: ASM
  1. ORG     0x00
  2.         GOTO    inicio
  3.         ORG     0x05
  4. inicio
  5.         ...     ; ACÁ EMPIEZA EL PROGRAMA
Para saltarse el vector. En caso de querer usar un programa con interrupciones, habría que poner
Código: ASM
  1. ORG     0x00
  2.         GOTO    inicio
  3.         ORG     0x04
  4.         GOTO    rutina_de_interrupcion
  5. inicio
  6.         ...     ; ACÁ EMPIEZA EL PROGRAMA
  7.  
  8.         ...
  9.  
  10. rutina_de_interrupcion
  11.         ...     ; ACÁ SE DESARROLLA LA INTERRUPCION

2- La línea
"bsf     SensorMarcha; configura la linea de entrada RA0"
no está bien ubicada. El compilador reemplaza la etiqueta SensorMarcha por PORTA,1. Es decir, estás poniendo
"bsf     PORTA,1; configura la linea de entrada RA0"
lo que es incorrecto, porque el registro PORTA está en el banco 0.

3- (Esto es una cuestión de elegancia más que de funcionamiento). En vez de poner las líneas
       clrw
      movwf   PORTB

Podrías poner
      clrf    PORTB
Hace lo mismo, pero ahorrás una línea.

4- Esta es la razón por la que el programa se ejecuta una sola vez. Antes de la etiqueta DEMORA falta poner un salto hacia la etiqueta Sensar, porque una vez que el uC llega a la instrucción movwf   PORTB (justo antes de DEMORA), la siguiente instrucción que ejecuta es movlw     .117      ; 1 set numero de repeticion  (B). Entonces llega a la rutina de retardo y luego termina en la directiva END, y de ahí no ejecuta nada más.

Espero que te hayan servido mis comentarios. Por cualquier otra duda, volvé a preguntar.  :smiley:
Saludos.

When you see a good move, look for a better one (Emanuel Lasker)

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Problemas con programa !!
« Respuesta #3 en: 31 de Marzo de 2010, 15:24:50 »
2- La línea
"bsf     SensorMarcha; configura la linea de entrada RA0"
no está bien ubicada. El compilador reemplaza la etiqueta SensorMarcha por PORTA,1. Es decir, estás poniendo
"bsf     PORTA,1; configura la linea de entrada RA0"
lo que es incorrecto, porque el registro PORTA está en el banco 0.

Lo que hizo es técnicamente correcto. Sólo que no es la mejor manera de escribirlo. Lo correcto sería poner bsf TRISA,1 pero técnicamente da igual poner bsf PORTA,1 que TRISA,1 en ese caso.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.


 

anything