我在做一个串口连续发送接收二进制数据程序。通过串口向单片机发送两个字节的二进制数据,单片机接收到数据后,向串口发送十三个字节的二进制数据。发送端通过timer控制,间隔100ms发送一次,程序如下:
private void timer3_Tick(object sender, EventArgs e)
{
Byte[] byt = new Byte[2];
byt[0] = 0xb8;
byt[1] = Convert.ToByte(timer3NumberVariable);
serialPort1.Write(byt, 0, 2);
timer3.Interval = 100;
}接收数据用的serialPort1_DataReceived,程序如下:(程序中receive为string类型,是全局变量)
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
System.Threading.Thread.Sleep(50); //接收数据位13个字节
byte[] bytesReceive = new byte[13];
serialPort1.Read(bytesReceive, 0, 13);
for (int i = 0; i < 13; i++)
{
receive += bytesReceive[i] + " ";
}
}
字符串receive可以在窗口中进行显示,这样可以比较清楚地看到接收到的数据。通过观察字符串receive,发现在串口接收数据过程中,如果进行其他的操作,比如:最大化、最小化窗口,就经常会出现数据丢失现象。本人接触c#时间不长,对于serialPort了解不是很多,希望各位高手不吝指教,帮我解决问题,非常谢谢!
private void timer3_Tick(object sender, EventArgs e)
{
Byte[] byt = new Byte[2];
byt[0] = 0xb8;
byt[1] = Convert.ToByte(timer3NumberVariable);
serialPort1.Write(byt, 0, 2);
timer3.Interval = 100;
}接收数据用的serialPort1_DataReceived,程序如下:(程序中receive为string类型,是全局变量)
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
System.Threading.Thread.Sleep(50); //接收数据位13个字节
byte[] bytesReceive = new byte[13];
serialPort1.Read(bytesReceive, 0, 13);
for (int i = 0; i < 13; i++)
{
receive += bytesReceive[i] + " ";
}
}
字符串receive可以在窗口中进行显示,这样可以比较清楚地看到接收到的数据。通过观察字符串receive,发现在串口接收数据过程中,如果进行其他的操作,比如:最大化、最小化窗口,就经常会出现数据丢失现象。本人接触c#时间不长,对于serialPort了解不是很多,希望各位高手不吝指教,帮我解决问题,非常谢谢!
解决方案 »
- datatable加一列或者替换一列信息怎么做
- ckeditor、ckfinder配置使用的问题
- WPF控件无法输入任何字符, 只能删除或者粘贴? why?
- 急!请问如何用C#来模拟物体的匀速直线运动
- a href的问题
- datagridview新添加列和赋值问题
- 求助,怎么写这个单表的统计SQL语句
- 对于C#你用的是2005还是2003?
- 一个新的类中去控制另外的窗口的问题
- SOS!c#中如何通过语句实现给 一个表增加一个字段?!!谢谢!!
- 1 摄像头如果不是免驱动的,那么用WIN API是不是也调不同摄像头? 2 视频会议类似的开发视频用什么方法传输会好一些?
- winform打印excel表格
C# 串口操作系列(2) -- 入门篇,为什么我的串口程序在关闭串口时候会死锁 ?
C# 串口操作系列(3) -- 协议篇,二进制协议数据解析
去掉