TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado 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.
-
movf REG1,W
subwf REG2,W
btfsc STATUS,Z
goto SonIguales
btfsc STATUS,C
goto REG2Mayor
Reg1Mayor goto REG1Mayor
-
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.
-
.
Jaja, pues ahora mi método parece bastante inútil. Voy a tener que probar de nuevo con lo que me sugieren Muchas gracias.
-
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 !
-
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.