TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: black_flowers en 19 de Febrero de 2007, 09:14:32

Título: instruccion para comprobar si un registro está a cero.
Publicado por: black_flowers en 19 de Febrero de 2007, 09:14:32
holas, hay alguna instruccion en asm para comprobar si un registro está a cero (bueno y con salto incluído se supone) es decir algo como btsc pero para un registro.

un saludo.  :-)
Título: Re: instruccion para comprobar si un registro está a cero.
Publicado por: maunix en 19 de Febrero de 2007, 12:10:57
holas, hay alguna instruccion en asm para comprobar si un registro está a cero (bueno y con salto incluído se supone) es decir algo como btsc pero para un registro.

un saludo.  :-)

Código: ASM
  1. movf   REG1,f
  2.    btfss   STATUS,Z
  3.    goto    NOESCERO
  4.  
  5. ESCERO:
  6.    ;...
  7.  
  8.    goto   ESCERO
  9.  
  10. NOESCERO:
  11.    ;...
  12.  
  13.    goto   ESCERO


PD. Estas y otras dudas las puedes sacar leyendo el instruction set de tu pic.

Saludso

Título: Re: instruccion para comprobar si un registro está a cero.
Publicado por: Cryn en 19 de Febrero de 2007, 15:41:46
talvez podrias hacer un or exlusivo:

      movlw 0x00       ; primero un cero al registro W
      xorwf REG,0       ; or exclusivo con el registro REG y el registro W, y de guarda en el registro W
      btfss STATUS,Z
      goto NoCero
Cero:
      ...
      goto OtroPaso1
NoCero:
      ....
      goto OtroPaso2

Como ya se sabe el or exclusivo da cero en 0 0  y 1 1 por tanto si todos son ceros el resultado será cero:

        00000000       00000010
xor   00000000       00000000
        00000000       00000010

y en si el xor puede usarse para comparar con cualquier valor, ya que cuando se hace xor de un numero con el mismo numero el resultado siempre es cero, si uno de esos numeros es distinto del otro el resultado sera distinto de cero:

        xxxxxxxx        x1xxxxxx
xor   xxxxxxxx        x0xxxxxx
        00000000        01000000

tons en el: movlw 0x00    se puede generalizar a cualquier valor de 8 bits con: movlw XX, donde XX es un numero de 8 bits

es muy util este xor y tiene otras propiedades, que son muy utiles, saludos y espero te sirva, adios!!
Título: Re: instruccion para comprobar si un registro está a cero.
Publicado por: maunix en 19 de Febrero de 2007, 16:08:00
Cryn, de la forma que tu lo haces es más genérica y es muy útil para comprobar si un registro es igual a un "valor" determinado (incluyendo el cero).  El tema es que para comprobar si es igual a cero, la forma más simple es la de usar el movf que te ahorras una instrucción.

Saludos
Título: Re: instruccion para comprobar si un registro está a cero.
Publicado por: black_flowers en 19 de Febrero de 2007, 19:09:52
eso es, exactamente lo que buscaba  :-/

gracias otra vez.   
Título: Re: instruccion para comprobar si un registro está a cero.
Publicado por: Veguepic en 22 de Febrero de 2007, 20:10:51
Hola Black_flowers

Por una cuestion de orden seria mejor que las preguntas que tengas sobre instrucciones de asembler las postees en el sub foro Almacen del Asembler.

Asi tambien le sera util tambien a otros foristas.  :wink:

Saludos


Título: Re: instruccion para comprobar si un registro está a cero.
Publicado por: Cryn en 22 de Febrero de 2007, 21:02:35
si, seria muy bueno mover este hilo a la parte de assembler, no creo que black se moleste, asi, que un encargado de l foro, que nos haga la movida, jjejeje.
Título: Re: instruccion para comprobar si un registro está a cero.
Publicado por: Desert en 23 de Febrero de 2007, 19:29:43
clrw
subwf    reg,w
btfsc     STATUS,Z
1º-SI ES 0 ACE ESTA INSTRUCCION
2º-SINO ES CERO ACE ESTA OTRA

Título: Re: instruccion para comprobar si un registro está a cero.
Publicado por: BrunoF en 23 de Febrero de 2007, 22:02:49

Todopic habia dado otra opcion muy buena:

http://www.todopic.com.ar/foros/index.php?topic=14812.msg93478#msg93478

O su opuesta(primero decf y luego incfsz).

Saludos.