Autor Tema: Convertir 2 ascci a hexa o decimal  (Leído 2054 veces)

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

Desconectado jodorowsky

  • PIC12
  • **
  • Mensajes: 52
Convertir 2 ascci a hexa o decimal
« en: 09 de Julio de 2009, 10:35:24 »
Hola a todos!

Les escribo porque tengo un problema que no he podido resolver. Generalmente programo en C, y hace mucho tiempo que deje el assembler pero ahora estoy ayudando a alguien y necesita assembler.

Es asi: recibo por el puerto serial 2 caracteres ascci de numeros, por ejemplo desde el hyperterminal le envio  "19", entonces me llega 0x31 y 0x39. Lo que necesito es que en la variable H me quede 0x13 que en decimal es 19. Como lo hago???

Lo que logre nada mas es obtener en H 0x19 pero no es lo que necesito, necesito 0x13.

Espero se entienda y pues ya llevo mucho tiempo y nada de nada.

gracias!!

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Convertir 2 ascci a hexa o decimal
« Respuesta #1 en: 09 de Julio de 2009, 15:14:53 »
Hola, prueba así...

- Recibe el "1" que es 0x31
- Réstale 0x30: 0x01
- Multiplícalo por 0x0A y guárdalo en un byte temporal: 0x0A
- Recibe el "9" que es 0x39
- Réstale 0x30: 0x09
- Súmaselo al byte temporal: 0x0A + 0x09 = 0x13

Y listo... tendrás un 0x13 al final.

Desconectado jodorowsky

  • PIC12
  • **
  • Mensajes: 52
Re: Convertir 2 ascci a hexa o decimal
« Respuesta #2 en: 09 de Julio de 2009, 17:54:31 »
Hola Santiago

gracias por la respuesta y comentarte que esa era la idea. Pero no se como multiplicar. Es decir que deduje que debia hacer todo eso pero no hay la instruccion multiplicacion. Asi que hay que hacer sumas sucesivas. Pero ya lo consegui asi que escribo lo que hice para que quede constancia de que fue solucionado y funciono muy bien.

Código: [Seleccionar]
recibe_hora
   movwf Hora
   andlw 0x0f   
   movf Hora,w
   movwf aux_hora
   clrw
arriba
   addlw 0x0A
   decf aux_hora,1
   btfss STATUS,Z
   goto arriba
   movwf Hora
   goto vuelveh                     ;salir de subrutina
hora2
   btfsc rx1,2 ;debo recibir minutos 1
   goto minutos1                   ;voy a recibir minutos
   andlw 0x0f ;elimino los 4 bits mas significativos para obtener el digito
   addwf Hora,1 ;lo sumo al digito antes almacenado

bueno algo asi, lo que pasa es que ahorita mismo no tengo el mplab para mostrarlo mas pulcro jaja. ademas que no se entiende bien ya que es una parte de codigo de un programa mas grande. que de paso es un reloj (que se muestra en un lcd 2x16) que se puede inicializar desde el hyperterminal.

No lo hice como funcion porque es algo bastante simple y porque estaba muy apurado. subiria la aplicacion pero es algo sencillo.
aunque quien sabe, a lo mejor a alguien le sirve.
« Última modificación: 09 de Julio de 2009, 18:22:22 por jodorowsky »