TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: FER_CBA en 22 de Abril de 2007, 17:28:35

Título: Comparar dos bytes!!
Publicado por: FER_CBA en 22 de Abril de 2007, 17:28:35
Alguien conoce una rutina que funcione para compara 2 bytes de los cuales solo uso los 4 bits menos significativos, osea que el valor del byte nunca es mayor a 15. Uso un pic 16F628a en lenguaje ensamblador. Estuve tratando con los bits dc yc ero no me funciono. necesito saber cuando uno es mayor que otro o igual. gracias
Título: Re: Comparar dos bytes!!
Publicado por: BrunoF en 22 de Abril de 2007, 21:42:32
Hola.Por lo que te entendí, podría ser así:

Compara
                    movf Byte1,W           ;W= Byte1
                    subwf Byte2,W          ;W = Byte2 - W = Byte2 - Byte1
                    btfsc  STATUS,Z       ;¿Son distintos?
                    goto SonIguales        ;No.Entonces son iguales.

                    btfsc  STATUS,C       ;¿Byte2 > Byte1? (*)
                    goto   Byte1EsMayor ;No.(Entonces Byte1 es mayor a Byte 2)

Byte2EsMayor  nop                        ;Si.Byte2 es mayor a Byte1

(*) STATUS,C se pone a CERO SI Y SOLO SI SE PRODUCE UN UNDERFLOW, es decir que la resta da "negativa".
Entonces, si la resta da mayor a cero o igual, el bit C del registro STATUS se seteará.
Fijate que yo debería haber puesto como comentario entonces en esa linea:
btfsc  STATUS,C       ;¿Byte2 => Byte1?

pero como ya había comprobado mediante el Z si la resta habia dado cero, puedo eliminar el signo =, quedando:
btfsc  STATUS,C       ;¿Byte2 > Byte1?

Hay muchas variantes de hacer esto mísmo.

Saludos.