如何用C#的serialport类接收单片机发送的数据
private void button1_Click(object sender, EventArgs e)
{
SerialPort serialPort1 = new SerialPort();
serialPort1.PortName = "COM3";
serialPort1.BaudRate = 9600;
serialPort1.Parity = Parity.Odd;
serialPort1.StopBits = StopBits.Two;
serialPort1.ReadTimeout = 1000; //读超时
if (serialPort1.IsOpen == false)
serialPort1.Open();
serialPort1.WriteLine(textBox1.Text);
serialPort1.Close();//多次输入
MessageBox.Show("数据发送成功!", "系统提示");
}
private void button2_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen == false)
serialPort1.Open();
textBox2.Text = serialPort1.ReadLine().ToString ();
} 展开
/// <summary>
/// 读取返回数据
/// </summary>
/// <returns></returns>
private string Read()
{
//获得返回数据
string Return = "";
string ShowReturn = ""; //显示的命令
try
{
Thread.Sleep(100);
int len = this.serialPort1.BytesToRead;
if (len > 0)
{
byte[] data = new byte[len];
if (len > 0)
{
for (int i = 0; i < len; i++)
data[i] = (byte)this.serialPort1.ReadByte();
}
for (int i = 0; i < data.Length; i++)
{
if (data[i] == 0)
{
Return += "00";
ShowReturn += "00" + " ";
}
else if (data[i] < 16)
{
Return += "0" + Convert.ToString(data[i], 16);
ShowReturn += "0" + Convert.ToString(data[i], 16) + " ";
}
else
{
Return += Convert.ToString(data[i], 16);
ShowReturn += Convert.ToString(data[i], 16) + " ";
}
}
}
else
{
Return = "未接受到返回数据";
}
}
catch (Exception ex)
{
Return = ex.Message;
}
this.txtMessage.AppendText(ShowReturn + "\r\n");
return Return.ToUpper();
}
这是以前写的一段代码,你改改吧
其实可以添加一个串口接收数据的事件,这样有数据过来,就可以读了
private voidserialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)是不是用这个事件接收,好像好像还要用到委托,是吧。。。可用serialPort1.ReadLine().ToString (); 为什麽读不出来 ???谢谢
是的,这个读不出来,有报错吗?你可以try catch一下错误信息。可能情况是你读出来的数据是不可见字符
发送和接收都已经判断串口是否已经打开,并且用到serialPort1.Open(); 是不是可以保证能接收到数据。serialport打开后,不关闭的情况只能发送一次数据,不能连续发送,这个情况怎么解决??
serialport.open后是不需要关闭的,serialport有接收数据事件,是可以连续发的,建议你去下载一个serialport的源码,网上很多