Autor Tema: DECFSZ no me funciona  (Leído 3261 veces)

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

Desconectado pizz

  • PIC10
  • *
  • Mensajes: 15
DECFSZ no me funciona
« en: 03 de Octubre de 2011, 11:07:06 »
Hola, quería ver si me podían dar una ayudita.
Estoy intentando crear un bucle consistente en dos rutinas. Es decir, de los 8 leds conectados al puerto B de mi 16F84A, primero quiero que roten los 4 primeros y cuando lo haya hecho tres veces que vaya a que roten los otros 4 leds y cuando también hayan rotado otras 3 veces, que vuelva a hacerlo.
El problema es que cuando entra en el bucle de  "Decrementa2" y hace el "CONTA2,1" siempre se queda haciendo ese bucle y se va a  "Inicio3" y siempre están rotando esos 4 leds y nunca vuelve a Inicio1. Es como si  "CONTA2" nunca restara y nunca valiera cero.
Ya sé que el resto del programa se podría hacer con rrf o rrl y demás pero este pequeño programa lo he montado más que nada para el tema de contar bucles y salir hacia otro bucle y luego poder volver y así.

Si me pudieran decir dónde puedo estar fallando se lo agradezco.
Saludos.





;*****Establecimiento constantes ****
STATUS      equ       03h             
TRISB       equ       86h             
PORTB       equ       06h             
PDel0      equ     0Ch             
PDel1      equ     0Fh
PDel2      equ     0Dh   
CONTA1      equ        0Eh           
CONTA2   equ        0Fh
;
;****Configuración del Puerto****
            bsf       STATUS,5         ; Cambiamos al banco 1Switch to Bank 1
            movlw     00h              ; Ponemos los pines del puerto B ...
            movwf     TRISB            ; ...como salidas.
            bcf       STATUS,5         ; Volvemos al Banco 0.

   


Inicio1
   clrf   CONTA1
   clrf   CONTA2
   movlw   d'4'
   movwf   CONTA1
   movlw   d'4'
   movwf   CONTA2

Decrementa1
         decfsz   CONTA1,1
         goto   Inicio2
         goto   Decrementa2
Inicio2 

   movlw      b'00000001'
   movwf      PORTB
   call       PDelay   

   movlw      b'00000010'
   movwf      PORTB
   call       PDelay   

   movlw      b'00000100'
   movwf      PORTB
   call       PDelay   
   
   movlw      b'00001000'
   movwf      PORTB
   call       PDelay   
   
   movlw      b'00000000'
   movwf      PORTB
   call       PDelay
   goto      Decrementa1
   

Decrementa2
         decfsz   CONTA2,1
         goto   Inicio3
         goto   Inicio1

Inicio3
   movlw      b'10000000'
   movwf      PORTB
   call       PDelay   

   movlw      b'01000000'
   movwf      PORTB
   call       PDelay     

   movlw      b'00100000'
   movwf      PORTB
   call       PDelay   

   movlw      b'00010000'
   movwf      PORTB
   call       PDelay
   goto      Decrementa2
   

   
PDelay  movlw     .14       ; 1 set number of repetitions (C)
        movwf     PDel0     ; 1 |
PLoop0  movlw     .72       ; 1 set number of repetitions (B)
        movwf     PDel1     ; 1 |
PLoop1  movlw     .247      ; 1 set number of repetitions (A)
        movwf     PDel2     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        decfsz    PDel2, 1  ; 1 + (1) is the time over? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel1,  1 ; 1 + (1) is the time over? (B)
        goto      PLoop1    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) is the time over? (C)
        goto      PLoop0    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 cycles delay
PDelL2  clrwdt              ; 1 cycle delay
        return              ; 2+2 Done




 end 

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: DECFSZ no me funciona
« Respuesta #1 en: 03 de Octubre de 2011, 11:20:00 »
Estás asignando el mismo lugar de memoria a PDel1 y a CONTA2, no se si será ese el único problema.  Saludos

Desconectado pizz

  • PIC10
  • *
  • Mensajes: 15
Re: DECFSZ no me funciona
« Respuesta #2 en: 03 de Octubre de 2011, 12:05:39 »
No me lo puedo creer !!!!!!.
No te imaginas la de vueltas que le he estado dando al programa.
Pues supongo que sí que será eso. En unas horas llego a casa, lo pruebo y te digo.
Siento mucho haber hecho una pregunta tan estúpida aunque de verdad que no se puede decir que no lo haya estado repasando porque me volví loco.
También debo reconocer que gracias a todos los fallos que voy cometiendo voy aprendiendo mucho de cómo "pensar" como el pic para ir haciendo los programas y creanme que se va a prendiendo mucho.
Por supuesto también es gracias a los que aquí nos ayudáis a los novatos como yo que cometemos estos fallos tan tontos. Pero si no fuera por ustedes a las dos semanas ya abandonaríamos todo.

Muchas gracias y dentro de unas horas te digo qué tal.
Saludos.

Desconectado pizz

  • PIC10
  • *
  • Mensajes: 15
Re: DECFSZ no me funciona
« Respuesta #3 en: 03 de Octubre de 2011, 17:34:24 »
Perfecto!!.
Muchas gracias. Me había obsesionado en mirar todo el código y hay que prestar atención desde el principio de todo.
Como dije antes, gracias a todos los que nos ayudáis a los más nuevos en esto. Si no fuera por vosotros, más de uno habríamos dejado ya de intentar continuar.

Saludos y hasta la próxima.

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: DECFSZ no me funciona
« Respuesta #4 en: 03 de Octubre de 2011, 17:54:47 »
Me alegro que haya funcionado. Todos aprendemos de este maravilloso foro.  :-/

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: DECFSZ no me funciona
« Respuesta #5 en: 03 de Octubre de 2011, 18:54:01 »
Hola, me alegro que ya te funciona, y para no tener que indicar las direcciones de los registros del micro, puedes definir de esta manera

LIST   P=16F873A   ;Se indica el modo de procesador
         INCLUDE   <P16f873A.inc>   ;se incluye la definicion de los registros internos

y ya te carga según los nombres del fabricante...

y tus registros, los puedes "direccionar" empleando CBLOCK

ejemplo

      CBLOCK   H'20'   ;32 decimal   H'0C'
;ASIGNACION DE REGISTRO DE USO GENERAL
UNIDADES
NUMERO
FLAG
BANDERA
DATO
loops
loops2
BYTE
   ENDC

recuenda terminar con ENDC  :mrgreen:
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado pizz

  • PIC10
  • *
  • Mensajes: 15
Re: DECFSZ no me funciona
« Respuesta #6 en: 04 de Octubre de 2011, 03:05:34 »
Uy, te agradezco mucho a ti también "todopic" por las indicaciones que me das, aunque a primera vista lo único que entiendo es lo de  "LIST P=16F873A". Tendré que buscar información sobre lo que me pones porque no me queda muy claro lo primero de que se carguen los nombres del fabricante. No sé exactamente qué quieres decir con eso ni como utilizarlo.
Y con el ejemplo que me pones me pasa igual. Buscaré información porque no me queda muy claro lo que quieres que haga con todo eso que me pones.
Indagaré acerca de "CBLOCK" y a ver qué encuentro.

Gracias y saludos.


Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: DECFSZ no me funciona
« Respuesta #7 en: 04 de Octubre de 2011, 09:17:15 »
Hola, por ejemplo, lo que tu escribes como
;*****Establecimiento constantes ****
STATUS      equ       03h             
TRISB       equ       86h             
PORTB       equ       06h             

son direcciones de registros dados por el fabricante.. que puedes ahorrar de escribir  si colocas el INCLUDE y las definiciones como te mencione arriba...

y los registros que tu  colocas con EQU, puedes hacerlo con CBLOCK y la primer dirección donde se ubica... los otros se van incrementando solitos...

por ejemplo.... escribiste
PDel0      equ     0Ch             
PDel1      equ     0Fh
PDel2      equ     0Dh   
CONTA1      equ        0Eh           
CONTA2   equ        0Fh


podrias hacer

CBLOCK  H'0C'
PDel0        ;TOMA LA DIRECCION H'0C'
PDel1        ;TOMA LA DIRECCION H'0C' +1  ETC
PDel2
CONTA1
CONTA2
ENDC


Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado pizz

  • PIC10
  • *
  • Mensajes: 15
Re: DECFSZ no me funciona
« Respuesta #8 en: 05 de Octubre de 2011, 16:46:58 »
Aaaaaahhhh !!!, ya veo ya!!.  Pues es algo super práctico.
Es algo que como bien dices, puede ahorrar mucho trabajo y además evitar errores como el que cometí yo.
Intentaré utilizarlo así como me dices para cuando depure este proyecto o si no, para el siguiente. Según vaya de tiempo.
Muchas gracias !!!
Saludos.


 

anything