TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: nacha4 en 08 de Enero de 2006, 22:26:00
-
Hola me trabe y no se como hacer esto, paso a enunciarlo (debe ser una tontera):
tengo que ver cuando los 4 bits menos significativos son iguales a uno que tengo yo, quiero que si son igules me tire un 1.
espero ser claro
-
Aqui te pongo un ejemplo en ensamblador:
Si tienes el byte a comparar en el registro W y lo vas a comparar con los 4 bits menos significativos del puerto B por ejemplo:
andlw 0x0F ; Te quedas con los 4 bits menos significativos
subwf PORTB ; Lo restas al puerto B o cualquier otro registro con el que quieras comparar
btfsc STATUS,Z ; Testeas el bit de cero en el registro STATUS
goto iguales
goto distintos
Si estas usando C dinos cual CCS o C30
-
muchas gracias, nunca lo habia pensado asi, y para los 4 bit mas significativos del mismo byte como seria
-
Bueno...
Veamos:
Para los 4 bits menos significativos:
ANDLW 0X0F
SUBWF PORTB,F ;TENE EN CUENTA QUE HE ELEGIDO QUE EL RESULTADO DE LA
;RESTA QUEDE CARGADO EN PORTB.
BTFSC STATUS,Z
GOTO IGUALES
GOTO DISTINTOS
Para los 4 bits mas significativos:
ANDLW 0XF0
SUBWF PORTB,F
BTFSC STATUS,Z
GOTO IGUALES
GOTO DISTINTOS
La instruccion SUBWF puede ser cambiada por la XORWF EN AMBOS EJEMPLOS...
-
Para los 4 bits más significativos te lo ha puesto Bruno.
Con la operación andlw (byte), lo que haces es poner a cero aquellos bits del registro "w" que estén a cero en el "byte". Por ejemplo:
W vale b"01101100" con andlw 0x0C te queda : W = b"00001100"
W vale b"01101100" con andlw 0x24 te queda : W = b"00100100"
W vale b"01101100" con andlw 0x70 te queda : W = b"01100000"
Asi que puedes comparar los bits que quieras de un registro con otro simplemente haciendo esta operacion para eliminar los bits que no quieres comparar.