TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: nacha4 en 08 de Enero de 2006, 22:26:00

Título: como hacer un paso en ensamblador
Publicado 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
Título: RE: como hacer un paso en ensamblador
Publicado por: antoniof en 09 de Enero de 2006, 05:19:00
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
Título: RE: como hacer un paso en ensamblador
Publicado por: nacha4 en 09 de Enero de 2006, 08:22:00
muchas gracias, nunca lo habia pensado asi, y para los 4 bit mas significativos del mismo byte como seria
Título: RE: como hacer un paso en ensamblador
Publicado por: BrunoF en 09 de Enero de 2006, 12:21:00
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...
Título: RE: como hacer un paso en ensamblador
Publicado por: antoniof en 09 de Enero de 2006, 18:18:00
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.