TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: mtristan en 25 de Septiembre de 2009, 21:18:13

Título: Comparar valores
Publicado por: mtristan en 25 de Septiembre de 2009, 21:18:13
.

Esto que voy a escribir puede parecer una tontería para muchos, pero muchos otros tal vez lo encuentren útil.
Lo que quiero explicar es el método que uso para saber comparar dos registros para determinar cuál tiene un valor mayor (o menor, variando un poco la cosa). Espero que si alguien conoce un método más eficiente me lo haga saber  ;-).

La idea es simple:

1. Cargo W con 0xFF,
2. Cargo un registro auxiliar (R_AUX, por ej.) con el valor de W (o sea 0xFF),
3. Cargo W con el valor del primer registro a comparar (REG1 para este caso),
4. Resto W a R_AUX y guardo el resultado en R_AUX,
5. Cargo W con el valor del segundo registro a comparar (REG2),
6. Sumo W con R_AUX (guardo en W o R_AUX, lo mismo).
7. Si el bit C del registro STATUS está en 1, REG2>REG1, sino REG2<=REG1 (menor o igual).

Si entre los pasos (4) y (3) agregamos:
4,5. Incremento R_AUX en 1 y guardo en R_AUX.
El bit C en 1 nos indicará que REG2>=REG1, en 0 dirá que REG2<REG1.

Teóricamente, si directamente resto REG1 de REG2, y resulta que REG2 era mayor, el bit C debería ponerse en 1, con lo cual la cosa sería mucho más sencilla. Pero lo probé y no me funcionó. Si alguien pudo así, por favor hágamelo saber.
Saludos.

Título: Re: Comparar valores
Publicado por: BrunoF en 25 de Septiembre de 2009, 21:47:01
Código: [Seleccionar]
                   movf   REG1,W
                    subwf   REG2,W
                    btfsc   STATUS,Z
                    goto    SonIguales

                    btfsc   STATUS,C
                    goto   REG2Mayor
Reg1Mayor    goto   REG1Mayor
Título: Re: Comparar valores
Publicado por: jim_17 en 26 de Septiembre de 2009, 07:01:41
Sip, simplemente restando ya te das cuenta de si es mayor o menor dependiendo de si salta el bit de carry o no salta.


Salu2.
Título: Re: Comparar valores
Publicado por: mtristan en 26 de Septiembre de 2009, 18:20:01
.

Jaja, pues ahora mi método parece bastante inútil. Voy a tener que probar de nuevo con lo que me sugieren Muchas gracias.

Título: Re: Comparar valores
Publicado por: jim_17 en 26 de Septiembre de 2009, 20:20:37
Si pero bueno, está muy bien la manera que has encontrado de resolver este problema, lo que pasa es que había una solución más fácil que no sabías. Me ha gustado tu método pero si hubieras leido profundamente el datasheet te hubieras dado cuenta de que al restar dos valores el bit de carry puede verse afectado, saludos !
Título: Re: Comparar valores
Publicado por: BrunoF en 26 de Septiembre de 2009, 21:29:27
Si, opino igual que jim_17 y te pido disculpas por mi post puramente funcional, pero cero personal. No tenia mucho tiempo y sólo escribí las líneas de código...

Un saludo.