串口设置
sp = new SerialPort(comboBox1.SelectedItem.ToString(), int.Parse(comboBox2.SelectedItem.ToString()), parity,
int.Parse(comboBox4.SelectedItem.ToString()), stopBits);
sp.ReceivedBytesThreshold = 16;
sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
sp.Open();
串口数据接收事件
void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
if (isClosing)
{
return;
}
if (!isReading)
{
sp.ReceivedBytesThreshold = 10000;
if (watch == null)
{
watch = Stopwatch.StartNew();
watch.Start();
lastTimeLeft = TimeSpan.Zero;
}
else
{
if (sp.BytesToRead > 1024)
sp.DiscardInBuffer();
else
{
isReading = true;
while (sp.BytesToRead >= 16)
{
if (sp.ReadByte() == 0xAA && sp.ReadByte() == 0x55)
{
sp.Read(dataReceived, 0, dataReceived.Length);
allData.AddRange(dataReceived);
}
}
isReading = false;
}
}
sp.ReceivedBytesThreshold = 16;
}
}
catch
{
MessageBox.Show("端口接受数据有错误,请重新打开端口!");
}
}
串口数据解析
while (allData.Count >= 14)
{
a = (Int16)(allData[1] | allData[2] << 8);
if (MaxOfRound < Math.Abs(a))
{
MaxOfRound = a;
}
aY = (Int16)(allData[3] | allData[4] << 8);
if (MaxOfRoundY < Math.Abs(aY))
{
MaxOfRoundY = aY;
}
allData.RemoveRange(0, 14);
}
来源:https://www.cnblogs.com/yshic/p/3156695.html