TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Andres71 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
-
Comparando primero los bytes más significativos...si fuesen iguales comparas los menos significativos
-
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!!!!
-
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
-
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.
-
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.
-
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í 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 :)
-
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.
-
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
-
Con la funciòn XOR compara los byte altos y luego los bajos si son iguales cambia la bandera de " btfss status,2 "
-
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.