Autor Tema: de ascii a binario  (Leído 3719 veces)

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

Desconectado julio_med

  • PIC10
  • *
  • Mensajes: 13
de ascii a binario
« en: 21 de Septiembre de 2007, 03:56:26 »
buenas

la cuestion es esta:

tengo en dos registros dos numeros en ascii
ej:
reg1=3 en ascii
reg2=5 en ascii

lo que necesito es cojer estos registros y sumarlo (me imagino que sumarlos) para que queden asi: 35, y luego pasar este nuevo numero a binario b'00100011'.

gracias 

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: de ascii a binario
« Respuesta #1 en: 21 de Septiembre de 2007, 09:49:57 »
Que tal Julio_med,

Primero que nada un saludo. Se entiende lo que necesitas hacer, pero si sumas dos numeros como en tu caso, no tiene sentido qeu si sumo 3 + 5 = 35??????
3+5 = 8, o no?.  Sin animos de ofender, pero pienso que se te barrio.

El numero ascii 3 realmente es un 33 hexadecimal (0x33,$33,33h, segun la representacion que uses) y para el numero 5 ascii es un 35 hexadecimal. Ahora bien tienes estos dos registros, lo primero que tienes que hacer es convertir el registro reg1 que contiene el 33h, que representa para ti 3 decenas, esto quiere decir que representa el numero 30 decimal. Ahora bien como haces el proceso.
1.- Primero restale 30h al reg1, esto es reg1 = reg1 - 30h. Ejemplo: reg1 = $33 - $30 = $03, esto lo convierte a su valor en binario
2.- Ahora bien como este registro representa las decenas, quiere decir que lo tienes que multiplicar por 10, correcto?, esto es: reg1 = reg1 * 10
     Ejemplo: reg1 = $03 * $0A = $1E
3.- ahora convierte las unidades en binario, que en tu caso es el registro2, esto es restale $30 a reg2.
      reg2 = reg2 - $30. Ejemplo: reg2 = $35 - $30 = $05
4.- Ahora si, realizas la suma de los dos registros y obtienes el resultado que necesitas. binario = reg1 + reg1
     Ejemplo: binario = $1E + $05 = $23

Este es un procedimiento, pero pueden exister otros.

Saludos y espero que te sirva.

Elreypic

Desconectado julio_med

  • PIC10
  • *
  • Mensajes: 13
Re: de ascii a binario
« Respuesta #2 en: 21 de Septiembre de 2007, 19:55:48 »
ELREYPPIC

amigo gracias.

con la info pude hacer un programa que me funciona y pasa de ascii a binario

      MOVLW   30H
      SUBWF   NUM1,F      ;valor de las decenas
      MOVLW   30H          ;le resto 30h a cada numero ascii
      SUBWF   NUM2,F      ;valor de las unidades
      MOVLW   .9
      MOVWF   COUNT
                MOVF   NUM1,W
      MOVWF   TEMP       ;la forma de multiplicar *10 las decenas fue esta
TT           MOVF   TEMP,W
      ADDWF   NUM1,F
      DECFSZ   COUNT,F
      GOTO   TT
      MOVF   NUM2,W
      ADDWF   NUM1,F

esta forma; a mi poarecer, es poco elegante. si depronto sabes como hacerlo de otra forma me prodrias decir como? o vos que sos EL REY PIC te parece que esta bien  :D

suerte y gracias

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: de ascii a binario
« Respuesta #3 en: 24 de Septiembre de 2007, 17:19:23 »
Que tal Julio,

Ahora si, "limosnero y con garrote"  :D
Por que no solamente quieres la solucion sino que sea "elegante". Pues yo te recomiendo que le vistas de etiqueta. :D

Bueno menos bromas y mas accion.

A mi parecer el programa que hiscte es bueno y el codigo es relativamente sencillo. Existe una manera de hacer la multiplicacion un tanto mas sencilla y esta se realiza rotando a la izquierda el valor contenido en una variable. Esto hace que el valor se multiplique en 2. Ejemplo, si queremos multiplicar digamos 3 X 2, hacemos esto:

MOVLW       03H
MOVWF       NUM
RLF              NUM,F

Ahora bien si lo rotamos a la izquierda una vez mas el valor de NUM, entonces estariamos multiplicando 3 X 4, si la rotas una vez mas, seria 3X8.

Pero la pregunta es, como le hago para multiplicar NUM por 10. Lo hacemos asi (suponiendo que NUM = 3 dec)

RLF              NUM,W      ;W = NUM *2, esto es W = 6
MOVWF       NUM          ;NUM = 6
MOVWF       AUX           ;AUX = 6
RLF              NUM,F      ;NUM = NUM*2, esto es NUM =12
RLF              NUM,W     ;W = NUM*2, esto es W =24
ADDWF       AUX,W      ; W = 24 + 6, esto es W = 30

y entonces para obtener el binario del ascii, simplemente realizamos la suma de NUM2 con W, esto es

ADDWF       NUM2,F     ;NUM2 = NUM2 + 30

Asi de simple puedes hacerlo, esta es una forma mucho mas elegante, simple y mas eficiente.

Saludos y espero haber respondido tu duda. Perdon por no hacerlos antes, pero es muy dificil ingresar al foro como colaborador, ya que esta un poco enfermo el foro.

Elreypic.


Desconectado flacoclau

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1692
    • El Micro Reactor
Re: de ascii a binario
« Respuesta #4 en: 24 de Septiembre de 2007, 20:55:24 »
 Otra forma sería hacer un bucle nVeces que vaya sumando de 10 en 10 donde n es el número a multiplicar por 10.
 El código sería mas o menos este:

    clrw                    ;borra el registro w
    movf numero,f     ;mueve el número a si mismo para saber
    btfsc status,z       ;si el número es cero
    goto salir             ;sale del bucle
suma10
    addlw .10            ;le suma 10 a w
    decfsz numero,f   ;decrementa número si es cero sale del bucle
    goto suma10        ;sigue el bucle
salir
    mowf decena       ;guarda el resultado en el registro decena

espero te sirva, saludos!!
Las personas con buena ortografía me atraen textualmente.

El Micro Reactor

Córdoba capital - Argentina.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: de ascii a binario
« Respuesta #5 en: 26 de Septiembre de 2007, 07:26:53 »
     
   solo un apunte que creo que no teneis en cuenta en las rotaciones es que en esta operacion interviene el carry y si no lo borras te ensucia la operocion y te da resultados incorrectos.
   es decir despues de cada RRF hay que hacer un BCF STATUS,C para garantizar que el bit que va a ingresar por la derecha es 0.
   

   saludos