繁体   English   中英

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

[英]How to send 8 bits binary data to 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);

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

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;

如果需要数组,也可以使用循环来执行此操作。

是的,这可行。 您可以发送所需的任何原始二进制值。 另外,不要写;

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);

如果需要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.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM