Concatenar bytes para el msp430 en IAR

#1
Buenas,

estoy haciendo un programa en el que recibo datos desde el puerto serie. el problema es que necesito concatenar 3 bytes en hexadecimal y luego convertir ese dato a decimal.
 
#3
te importaría decirme cómo lo solucionaste?
gracias

bueno he conseguido concatenar los bytes. ahora tengo un entero de 32 bits en hexadecimal y me gustaria saber cómo lo puedo pasar a decimal.
gracias
 
Última edición:
#4
Eso depende como lo has enviado.
Si has dividido el numero entero grande de 32bits en cuatro partes;
O usaste una limitación decimal para hacerlo mas fácil la transformación.
Si lo primero y ya tienes el array cargado de recepción.
Por ejemplo te llego estos datos recivido[]={0x0f,0xab,0x1c,0xfa}.
Son dos números enteros de 16 bits.
el byte recivido[0] es el mas significativo.
p1 y p2 un varible entera sin signo.
p1=recivido[0]*0x100;
p1=p1+recivido[1];
p2=recivido[2]*0x100;
p2=p2+recivido[3];

Si es un numero de 32bits
p3 es un entero largo.
p3=p1*0x10000+p2;
 
#5
A ver, yo lo que tengo es un entero de 32 bits. por ejemplo: num=0x0001C138 y quiero que se lea num2 = 115000.
eso es lo que me has puesto??es que estoy empezando con esto y estoy un poco perdida.

muchas gracias
 
#6
Es lo mismo para el el micro, los mcroscontroladores trabajan en HEX, si tu pones a=15 es los mismo a=0x0f, para el micro es el mismo valor. No te confundas en la forma de reprecentarlo para ver en LCD o Serial(hiperterminal) por que eso sonn son caractres ASCII que tienes que transformarlo usando las funciones de stdio.h en C.
Del ejemplo anterior hay otra forma de hacerlo con union{}.
el valor enviado (0x00f0ab50) tx.
sea el array recivido[]={0x00,0xf0,0xab,0x50}.
union valor{
unsigned long a;
char b[4];
}
unsigned long valor_final;
....
..
union valor entero;
entero.b[0]=recivido[0];
entero.b[1]=recivido[1];
......
entero.b[3]=recivido[3];
valor_final=entero.a;
 
Arriba