如何用C#的serialport类接收单片机发送的数据

为什麽下面的程序只能实现发送数据而不能接收??、请问还有其他方法实现接收数据嘛/?若有好的建议请上传程序并写上注释。。谢谢privatevoidbutton1_Click... 为什麽下面的程序只能实现 发送数据而不能接收??、请问还有其他方法实现接收数据嘛/?若有好的建议请上传程序并写上注释。。谢谢

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 ();
}
展开
 我来答
板凳瓜子准备好了
2013-09-18 · TA获得超过163个赞
知道小有建树答主
回答量:278
采纳率:0%
帮助的人:130万
展开全部

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

        }


这是以前写的一段代码,你改改吧
whj_njit
2013-09-18 · TA获得超过230个赞
知道小有建树答主
回答量:387
采纳率:0%
帮助的人:255万
展开全部
有读数据啊serialPort1.ReadLine().ToString (); 这不就是从串口中读数据
其实可以添加一个串口接收数据的事件,这样有数据过来,就可以读了
追问
private voidserialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)是不是用这个事件接收,好像好像还要用到委托,是吧。。。可用serialPort1.ReadLine().ToString ();  为什麽读不出来 ???谢谢
追答
是的,这个读不出来,有报错吗?你可以try catch一下错误信息。可能情况是你读出来的数据是不可见字符
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mlz13
2013-09-18
知道答主
回答量:50
采纳率:0%
帮助的人:16.8万
展开全部
serialport打开后,不要关闭,定义接收数据的委托函数,在委托函数里处理数据
追问
发送和接收都已经判断串口是否已经打开,并且用到serialPort1.Open();  是不是可以保证能接收到数据。serialport打开后,不关闭的情况只能发送一次数据,不能连续发送,这个情况怎么解决??
追答
serialport.open后是不需要关闭的,serialport有接收数据事件,是可以连续发的,建议你去下载一个serialport的源码,网上很多
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式