PC transmite: 0x9E, 0x6D, 0x9B y 0x3E
Es correcto.... Invertido el orden:
0x3E, 0x9B, 0x6D, 0x9E
Esto es IEEE 754, el problema es que CCS utiliza el mismo formato que Microchip. Cito al manual de CCS:
CCS uses the same format Microchip uses in the 14000 calibration constants
Cambiando el lugar del bit de signo:
IEEE754 32-bit sxxxxxxx.yxxxxxxx.xxxxxxxx.xxxxxxxx
MIcrochip 32-bit xxxxxxxx.sxxxxxxx.xxxxxxxx.xxxxxxxx
Siendo la "y" en el IEEE754 el ultimo bit del exponente. Se cambia el formato por que es mas simple de operar teniendo el exponente en un solo registro. Para que se entienda el formato, cambiaron el lugar del signo del primer byte al segundo, corriendo obviamente todo.
La forma de solucionar esto es mover el bit de signo hacia el primer byte. Sigamos con el ejemplo:
0x3E, 0x9B, 0x6D, 0x9E
00111110.10011011.01101101.10011110 (Recalco el bit de signo)
01111101.00011011.01101101.10011110
0x7D1B6D9E
Suponiendo que sean seguidos y tengas:
float numDecimal = (float)0x7D1B6D9E;
int1 temp;
temp = bit_test(numDecimal,31); //guardo el signo
rotate_left(&numDecimal,2); //roto a la izquierda el exponente y el primer byte.
rotate_right(&numDecimal+1,1); //roto a la derecha el 2do byte.
if (temp)
{
bit_set(&numDecimal+1,7); // En caso de haber estado en 1 el bit de signo lo seteo.
}
Mas info sobre el formato de Microchip:
http://ww1.microchip.com/downloads/en/AppNotes/00575.pdf