串行端口上的十六进制转换错误

时间:2014-02-23 12:36:00

标签: c# serial-port xbee

这是一个奇怪的我无法弄清楚。我真的很感激任何人的任何输入。

我正在尝试从arduino接收温度数据,通过XBEE无线网卡连接到我的PC。接收XBEE直接连接到PC上的COM8串行端口。我有一个非常简单的C#程序,它使用串口类接收数据。首先,它从串口读取一个字符

    *private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        //RxString = serialPort1.ReadExisting();
        RxRead = serialPort1.ReadChar();
        //RxRead = 0x13;
        this.Invoke(new EventHandler(DisplayText));
    }*

(忽略注释掉的位。它们是其他实验!)。然后,使用RxRead int将我写入的数据传输到一个简单的Web表单上。

    private void DisplayText(object sender, EventArgs e)
    {

            RxString = RxRead.ToString();
            textBox1.AppendText(RxString);
            textBox1.AppendText(", ");
    }

它在网络表单上打印出来。

126,0,125,51,63,0,125,51,63,0,64,63,63,82,63,63,1,49,57,46,48,48,13,10 ,63,

除了上面的125,51流中的两个实例是不正确的。它们应该是十进制19,十六进制13.我知道是这种情况,因为协议定义很好,我可以使用XCTU程序看到来自XBEE的十六进制数据,(见下文)

接收数据包

7E 00 13 90 00 13 A2 00 40 A6 90 52 90 9A 01 31 39 2E 31 32 0D 0A B5

- Start delimiter: 7E
- Length: 00 13 (19)
- Frame type: 90 (Receive Packet)
- 64-bit source address: 00 13 A2 00 40 A6 90 52
- 16-bit source address: 90 9A
- Receive options: 01
- Received data: 31 39 2E 31 32 0D 0A
- Checksum: B5

任何人都可以想到为什么这个程序应该非常高兴地拾取每一个字节,但是每次遇到十六进制13时都会出现异议? (哦,我尝试使用readbyte而不是readchar,它给了我同样的东西。

非常感谢任何想法。

2 个答案:

答案 0 :(得分:1)

确保在初始化串行端口时关闭XOn / Xoff流量控制。 0x13对应于XOFF,即“暂停传输”,它将从您收到的流中删除。我对之后发生的事情没有准确的解释,但是如果启用了XOn / Xoff,那么你要做的第一件事就是禁用它。

答案 1 :(得分:1)

我认为您应该使用ReadByte()而不是ReadChar(),因为您正在阅读二进制数据。如果切换到该方法,它是否开始打印正确的值?

其他信息:

  • 第8位设置的任何字节都表示为63(0x3F,'?')。
  • 由于某种原因,0x13字节打印为两个字节:0x7D,0x33(“} 3”)。

您是否以8位模式打开串口?