串行读数,只考虑前128个值

时间:2013-04-26 07:45:56

标签: c# visual-studio-2012 serial-port

我正在通过串口从MCU读取一行。该行包含14个字符,以“OK”结尾。字符转换为int然后处理。问题是当值大于128时。对于大于128的值,值(int converted)保持为63.这是代码:

            serialPort1.DiscardInBuffer();
            serialPort1.DiscardOutBuffer();
            serialPort1.Write("d");//request line from mcu
            Thread.Sleep(100);
            string line = serialPort1.ReadLine();

            int p1_low = line[0];
            int p1_high = line[1]*256;
            int p1 = p1_low + (p1_high);
            label1.Text = "Input Sensor: " + p1_low;

p1_low比p1_high变化很多,当大于128时,它会达到63值。问题出在哪里?

2 个答案:

答案 0 :(得分:2)

将编码更改为

    SerialPort1.Encoding = System.Text.Encoding.GetEncoding(28591)

您发现的默认编码会替换字节值> 127带有'?'。编码28591保留大于127的字节值。

您不需要将线程休眠为.ReadLine块。

答案 1 :(得分:0)

听起来你设置使用7个数据位。将数据位配置值更改为8,这样您就可以获得所有256个值。

参考:http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.databits.aspx