Banner publicitario de PCBWay

Concatenar bytes para el msp430 en IAR

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.
 
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:
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;
 
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
 
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;
 
Atrás
Arriba