TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: micro_pepe en 21 de Julio de 2012, 17:15:53

Título: Decrementar y comparar variable de 16 bit.
Publicado por: micro_pepe en 21 de Julio de 2012, 17:15:53
Ando traduciendo un 'if' en 'c', a asm, para que sea rápido, y no consigo hacerlo funcionar bien, el código es este, espero una ayuda:

en C:
Código: [Seleccionar]
ContBaseTiempo --;
if(ContBaseTiempo.tot == 0)
{
         output_bit(LED ,!input_state(LED));
         ContBaseTiempo.tot = BASE_TIEMPO;
}

En asm:
Código: [Seleccionar]
        movlw    1
         subwf    ContBaseTiempo.bt[0],f  ;parte baja de la variable
         btfss    STATUS,C
         goto     Sigue
         subwf    ContBaseTiempo.bt[1],f  ;parte alta de la variable
         btfss    STATUS,Z
         goto     Sigue
         goto     Dentro_if


         Dentro_if
              ;cuerpo del if

         Sigue
           ;fuera del if

Saludos.
Título: Re: Decrementar y comparar variable de 16 bit.
Publicado por: MerLiNz en 21 de Julio de 2012, 17:32:15
el goto es incondicional creo, para un goto condicional deberias usar BRA
Título: Re: Decrementar y comparar variable de 16 bit.
Publicado por: micro_pepe en 21 de Julio de 2012, 17:43:51
el salto condicional que uso es btfss, los goto son para escribir el código más abajo.
Título: Re: Decrementar y comparar variable de 16 bit.
Publicado por: MerLiNz en 21 de Julio de 2012, 19:06:12
lo que te quiero decir es que en el primer GOTO el codigo saltara y no se comparara la parte alta, ademas el salto lo hara si o si independientemente del resultado del BTFSS
Título: Re: Decrementar y comparar variable de 16 bit.
Publicado por: groundman en 21 de Julio de 2012, 20:31:55
Que pic usas? Si es un 18f.hay otras instrucciones que ahorran ciclos de reloj.
Título: Re: Decrementar y comparar variable de 16 bit.
Publicado por: BrunoF en 21 de Julio de 2012, 21:48:03
Hola!

Lo más sencillo:

Código: ASM
  1. decfsz  ContBaseTiempo.bt[0],F
  2.         goto    Sigue
  3.  
  4.         decfsz  ContBaseTiempo.bt[1],F
  5.         goto    Sigue
  6.  
  7.         ;dentro del If
  8.  
  9. Sigue   ;fuera del if
Título: Re: Decrementar y comparar variable de 16 bit.
Publicado por: micro_pepe en 22 de Julio de 2012, 13:31:07
OK, BrunoF ese codigo funciona bien  :-/ :-/ muchas gracias a todos.

Tenia bastante olvidado el asm, los primeros programas los hice en asm, pero me pasé al lado oscuro del C.

Saludos.
Título: Re: Decrementar y comparar variable de 16 bit.
Publicado por: BrunoF en 22 de Julio de 2012, 14:02:48
Hola micro. Mi código está mal! A ver...
Título: Re: Decrementar y comparar variable de 16 bit.
Publicado por: BrunoF en 22 de Julio de 2012, 14:13:05
Código: ASM
  1. movlw   .1
  2.         subwf   ContBaseTiempo.bt[0],F
  3.         btfss   STATUS,C
  4.         decf    ContBaseTiempo.bt[1],F
  5.  
  6.         movf    ContBaseTiempo.bt[0],W
  7.         iorwf   ContBaseTiempo.bt[1],W
  8.         btfss   STATUS,Z
  9.         goto    Sigue
  10.        
  11.         ;Dentro
  12.  
  13. Sigue:
Título: Re: Decrementar y comparar variable de 16 bit.
Publicado por: micro_pepe en 22 de Julio de 2012, 17:11:53
Hola micro. Mi código está mal! A ver...

Pues sí, estaba mal, pero el error era pequeño y a simple vista creí que estaba bien. Gracias de nuevo.

Saludos.
Título: Re: Decrementar y comparar variable de 16 bit.
Publicado por: BrunoF en 23 de Julio de 2012, 03:03:15
Si, perdón por eso!

Saludos.
Título: Re: Decrementar y comparar variable de 16 bit.
Publicado por: micro_pepe en 23 de Julio de 2012, 14:39:35
Si, perdón por eso!

Saludos.

Tranquilo, gracias por todo.

Saludos!