Autor Tema: como hacer un paso en ensamblador  (Leído 2642 veces)

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

Desconectado nacha4

  • PIC16
  • ***
  • Mensajes: 113
como hacer un paso en ensamblador
« 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

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: como hacer un paso en ensamblador
« Respuesta #1 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

Desconectado nacha4

  • PIC16
  • ***
  • Mensajes: 113
RE: como hacer un paso en ensamblador
« Respuesta #2 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

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: como hacer un paso en ensamblador
« Respuesta #3 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...
"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.

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: como hacer un paso en ensamblador
« Respuesta #4 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.