Autor Tema: Comparar valores  (Leído 1902 veces)

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

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Comparar valores
« 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.

When you see a good move, look for a better one (Emanuel Lasker)

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Comparar valores
« Respuesta #1 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
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado jim_17

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 309
    • Blog personal
Re: Comparar valores
« Respuesta #2 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.
Share the world !

Blog's

http://www.area0x33.com

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: Comparar valores
« Respuesta #3 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.

When you see a good move, look for a better one (Emanuel Lasker)

Desconectado jim_17

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 309
    • Blog personal
Re: Comparar valores
« Respuesta #4 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 !
Share the world !

Blog's

http://www.area0x33.com

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Comparar valores
« Respuesta #5 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.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.