如何将8位二进制数据发送到串行端口

时间:2014-09-21 15:53:20

标签: c# .net serialization serial-port

我必须以二进制格式发送数据,并且还必须以二进制格式接收另一端。我已从串口发送数据,但不知道如何将二进制数据发送到串口。这是将8位二进制数据/字节写入串口的正确方法。请任何人帮忙。提前谢谢。

port = new SerialPort("COM1", 19200, Parity.None, 8, StopBits.One);
port.DtrEnable = true;
port.RtsEnable = true;
port.Handshake = Handshake.RequestToSend;
port.ReadTimeout = 6000;
port.WriteTimeout = 5000;
port.Open();
byte[] b={0,1,1,0,1,1,1,0,1};
port.Write(b, 0, 8);

3 个答案:

答案 0 :(得分:1)

所以问题是你只能发送字节而不是位。 如果是这样,你应该做的是将你的位加到一个字节:

0110 1101 = 0x6D

现在你这样做:

byte[] b;
b[0] = 0x6D;
port.Write(b, 0, b.Length);

在接收端,您读取一个字节,并使用位掩码获取单个位;

bool bit0 = read_byte & 0x01;
bool bit1 = read_byte & 0x02;
bool bit2 = read_byte & 0x04;
bool bit3 = read_byte & 0x08;
bool bit4 = read_byte & 0x10;
bool bit5 = read_byte & 0x20;
bool bit6 = read_byte & 0x40;
bool bit7 = read_byte & 0x80;

如果你想要一个数组,你也可以用循环来做这个。

答案 1 :(得分:0)

是的,这有效。您可以发送所需的任何原始二进制值。而且,而不是写;

byte[] b={0,1,1,0,1,1,1,0,1};
port.Write(b, 0, 8);

你可以简单地写

byte[] b={0,1,1,0,1,1,1,0,1};
port.Write(b, 0, b.Length);

答案 2 :(得分:0)

如果需要8个,请不要创建8个字节。正确的方法是创建一个由您的8位组成的byte,通过串行端口发送,然后在另一侧使用&>>来接收该位值,可以是1或0,当然。

在发件人方面;

       byte[] b = new byte[1];
       b[0] = 0x12; //your byte "00010010" here.
       port.Write(b, 0, b.Length);

在猎犬方面;

       // lower nibble
       int bit0 =  receivedByte & 0x01;
       int bit1 = (receivedByte & 0x02) >> 1;
       int bit2 = (receivedByte & 0x04) >> 2;
       int bit3 = (receivedByte & 0x08) >> 3;
       // higher nibble
       int bit4 = (receivedByte & 0x10) >> 4;
       // etc.
相关问题