Autor Tema: Comparacion 16 bits  (Leído 3626 veces)

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

Desconectado Andres71

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 149
Comparacion 16 bits
« en: 03 de Septiembre de 2006, 17:34:32 »
Saludos a todos, estoy pensando como hacer para comparar 2 valores  de 16 bits guardados cada uno en 2 registros, como lo puedo hacer++ alguien me puede ayudar?, chauuuuuuuuu
"Dice mas el necio cuando calla, que el sabio cuando habla"

ANDRES ALEGRIA
alegriaandres@gmail.com
andresalegria@hotmail.com

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: Comparacion 16 bits
« Respuesta #1 en: 03 de Septiembre de 2006, 18:28:11 »
Comparando primero los bytes más significativos...si fuesen iguales comparas los menos significativos

Deimos

  • Visitante
Re: Comparacion 16 bits
« Respuesta #2 en: 04 de Septiembre de 2006, 03:29:47 »
Como bien te han dicho lo puedes hacer comparando de byte en byte, o bien de bit a bit, con un puntero que se vaya desplazando que empiece en el MSB y acabe en el LSB, y se pare en el momento en que un bit es diferente a otro, entonces ya sabe cual es el mayor de los dos. De todas formas, ya sea byte a byte o bit a bit, puedes comparar el número que quieras, de los bits que sean.

Animo y suerte!!!!

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Comparacion 16 bits
« Respuesta #3 en: 04 de Septiembre de 2006, 05:15:41 »
En primer lugar haria falta saber el lenguaje de programación, aunque entiendo que es en ensamblador. La comparación bit a bit es poco eficiente, por lo que normalmente se hace es restar los dos bytes directamente, si se activa el flas Z es que son iguales, si se activa el flag de signo el sustraendo es mayor que el minuendo y si no se activa ninguno de los dos el minuendo es mayor que el sustraendo.

Como bien a dicho Modulay, primero se compara el byte mas significativo y en caso de ser iguales se pasa al byte menos significativo.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Deimos

  • Visitante
Re: Comparacion 16 bits
« Respuesta #4 en: 04 de Septiembre de 2006, 06:46:35 »
Por supuesto que es más eficiente hacerlo byte a byte. La solución bit a bit se la he ofrecido por si tenia problemas con la comparacion byte a byte. En definitiva el cariño es el mismo.

De todos modos se ha olvidado mencionar si lo ke se kiere hacer es ver si los dos numeros son iguales, o cual es mayor que el otro.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Comparacion 16 bits
« Respuesta #5 en: 04 de Septiembre de 2006, 08:17:33 »
Por supuesto que es más eficiente hacerlo byte a byte. La solución bit a bit se la he ofrecido por si tenia problemas con la comparacion byte a byte. En definitiva el cariño es el mismo.

Opino que si tiene complicaciones con la comparación byte a byte.. más le costará hacerla bit a bit.

Además de ser terriblemente ineficiente, la comparación bit a bit es mucho más complicada y lenta.  Creo que como ya bien han dicho, no hay muchas vueltas para esto más que probar byte a byte, después de todo el pic maneja variables a valores de byte no de bit.

En cuanto al puntero a bit, es algo que según sé recien está en la versión 4 del ccs, pero no está previsto en la arquitectura del micro con lo cual su implementación final (en ensamblador) debe ser realmente tediosa, gigante y lenta. 

Según lo que he leído y probado en estos años, lo más efectivo para hacer punteros a bit es trabajar con "or's" de valores constantes de byte porque es imposible trabajar con variables "bit" en última instancia en el set de instrucciones del microcontrolador.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Deimos

  • Visitante
Re: Comparacion 16 bits
« Respuesta #6 en: 04 de Septiembre de 2006, 09:41:42 »
Sí que se puede trabajar bit a bit, pero como bien dices es a base de máscaras, desplazando el bit que se quiere consultar. Realmente no es una buena opción, pero es una opción, que se puede emplear si se kiere. No digo que sea la mejor, pero que ahí está. En assembler no creas que sale muy muy grande, el código sale bastante reducido, no tanto como byte a byte claro, pero que tampoco sale una monstruosidad de fuente.

De todas formas, coincidimos todos en que la manera más eficiente es byte a byte. además que en ninguna parte el que escribió el primer mensaje habla de ccs, ni de c, ni de asm ni de nada. Haría falta que dijera que tipo de lenguaje usa o colgase parte de fuente que tenga hecho.

Opinar así es complicado, no es cierto?

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Comparacion 16 bits
« Respuesta #7 en: 04 de Septiembre de 2006, 10:33:34 »
Sí que se puede trabajar bit a bit, pero como bien dices es a base de máscaras, desplazando el bit que se quiere consultar. Realmente no es una buena opción, pero es una opción, que se puede emplear si se kiere. No digo que sea la mejor, pero que ahí está. En assembler no creas que sale muy muy grande, el código sale bastante reducido, no tanto como byte a byte claro, pero que tampoco sale una monstruosidad de fuente.

De todas formas, coincidimos todos en que la manera más eficiente es byte a byte. además que en ninguna parte el que escribió el primer mensaje habla de ccs, ni de c, ni de asm ni de nada. Haría falta que dijera que tipo de lenguaje usa o colgase parte de fuente que tenga hecho.

Opinar así es complicado, no es cierto?

Sí, claro que se puede bit a bit, no te estaba contradiciendo en que no se pueda, solo opiné que es algo demasiado engorroso para alguien que recién comienza.  Una comparación como la que sugirió modulay no lleva mas de 10 instrucciones, una bit a bit... no hice la prueba pero no creo que sean menos de 40 o 50, y ni hablar del tiempo de proceso :) :)

Es cierto que no mencionó el lenguaje aunque todo hacía pensar que hablaba de ensamblador. 

De todas formas, veo bien que todos opinemos lo que nos parece, aceptando la opinión del otro o argumentando la opinión cuando uno piensa diferente  :)
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Deimos

  • Visitante
Re: Comparacion 16 bits
« Respuesta #8 en: 05 de Septiembre de 2006, 05:25:16 »
Está claro que hay que opinar, respetar la opinión ajena y seguir aprendiendo, que en esto de la electrónica nunca se acaba. Ahora solo falta esperar a que este hombre cuelgue la parte del fuente que tiene hecho y que entre todos le demos un vistazo.

Desconectado Andres71

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 149
Re: Comparacion 16 bits
« Respuesta #9 en: 05 de Septiembre de 2006, 12:12:08 »
Saludos, perdon por no responder antes. la verdad no habia podido hacerlo, intente hacerlo comparando con la rutina de8 y 8 bits comenzando por los mas significativos, si eran iguales iva a  comparar los menos significativos ny listo funciono ok, mil gracias por las opiniones y por su valiosa ayuda, chauuuuuuuuuuuuuu
"Dice mas el necio cuando calla, que el sabio cuando habla"

ANDRES ALEGRIA
alegriaandres@gmail.com
andresalegria@hotmail.com

Desconectado felipito

  • PIC10
  • *
  • Mensajes: 19
Re: Comparacion 16 bits
« Respuesta #10 en: 06 de Septiembre de 2006, 03:53:57 »
Con la funciòn XOR compara los byte altos y luego los bajos si son iguales cambia la bandera de " btfss status,2 "

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Comparacion 16 bits
« Respuesta #11 en: 10 de Septiembre de 2006, 06:58:01 »
La funcion que debes usar es la XOR, ya que no solo te afectara el flag Z si el resultado de la comparacion es cero, sino que ademas, el resultado de la XOR te devolvera todos los bits distintos entre ambos registros.
Saludos.
"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.


 

anything