Hola!
Necesito transmitir el valor de unas variables int16 de CCS por UART al PC. Sin embargo, hay algunos numeros que no se estan enviando bien. Por ejemplo, el 48785 lo envía y recibe bien, 48786 el PC lo interpreta como 2879, y 48787 lo vuelve a enviar y recibir bien. Estos numeros son solo ejemplos. No he tenido oportunidad de ver en qué valores exactamente falla.
Para el envío uso la siguiente funcion, para dividir el int16 en 2xInt8:
void SplitByteNWrite (int *chptr, int n) {
int i = 0;
for (i=1; i<=n; ++i) {
putc(*chptr);
*chptr++;
}
}
La uso así porque también tengo que enviar variables float.
Una vez enviadas, en el PC las uno con la siguiente funcion, en Visual Studio:
private UInt16 Byte2int16(Byte[] Array_buffer, int offset)
{
Byte[] newVar = new Byte[2] { 0, 0};
newVar[0] = Array_buffer[0+offset];
newVar[1] = Array_buffer[1+offset];
UInt16 OutInt16 = System.BitConverter.ToUInt16(newVar, 0);
return OutInt16;
}
Asumo que el envío por parte del PIC es correcto, pues nunca he tenido problemas, y practicamente todo el tiempo lo envía correctamente.
Por lo tanto, me pregunto si el formato int16 de microchip no es el estandar, como pasa con los float, y cada vez que un determinado bit pasa a 1, me fastidia la conversión.
¿Qué creeis que puede estar pasando?
Gracias!
Saludos.