0

我正在通过串口从 MCU 读取一条线。该行由 14 个以“OK”结尾的字符组成。字符被转换为 int 然后被处理。问题是当值大于 128 时。对于大于 128 的值,值(int 转换)保持在 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 值。问题可能出在哪里?

4

3 回答 3

2

将编码更改为

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

正如您所发现的,默认编码会将大于 127 的字节值替换为“?”。编码 28591 保留大于 127 的字节值。

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

于 2013-04-26T12:29:43.780 回答
0

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

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

于 2013-04-26T07:47:59.940 回答
-1

使用方法 Write(Byte[], int32, int32) 因为字节是数值 --> (0-255) 或 (0x00-0xFF) 或 (b00000000-11111111)。可以对字符或字符串进行编码,但不能对字节进行编码。确保不要使用 Write(Char[], int32, int32)

于 2021-10-05T01:24:32.837 回答