我这里写的串口通信程序(一) 这个串口通信程序,测试了只能够自发自收,假如我用单片机发数据就收不到了,?问:这个只是适合自发自收吗?
        SerialPort sp = new SerialPort();
        private void btn1_Click(object sender, EventArgs e)
        {
            sp.PortName = "COM3";
            sp.BaudRate = 9600;
            sp.Open();
            byte[] data = Encoding.Unicode.GetBytes(re.Text);
            string str = Convert.ToBase64String(data);
            sp.WriteLine(str);
            MessageBox.Show("数据发送成功", "系统提示");
        }        private void btn2_Click(object sender, EventArgs e)
        {
            byte[] data = Convert.FromBase64String(sp.ReadLine());
            tr.Text = Encoding.Unicode.GetString(data);
            sp.Close();
            MessageBox.Show("数据接收成功", "系统提示");
(二)这个是用事件触发的,但是用单片机发数据在revtext.Text上接受不到,问?为什么?
        }
System.IO.Ports.SerialDataReceivedEventArgs 将导致该该事件被触发;        private void mycomm_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            int DataLength = mycomm.BytesToRead;//获取接受缓冲区中数据的字节数
            int i = 0;
            StringBuilder strb = new StringBuilder();
            while (i < DataLength)
            {
                byte[] dbs = new byte[2048];
                int len = mycomm.Read(dbs,0,2048);//每次从输入缓冲区中读取2048个字节,并将这些字节写入到dbs[]数组中
                strb.Append(ASCIIEncoding.GetEncoding("gb2312").GetString(dbs, 0, len));
                i += len;
            }
            revtext.Text += strb;//  revtext.Text 将显示接收到的数据
        }(三)这个与上面类似,用单片机可以实现发数据,在界面上接收,但是收到的是乱码?问:为什么?
 private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
   {  int DataLength = serialPort1.BytesToRead;
           int i = 0;
           StringBuilder strb = new StringBuilder();
           while(i<DataLength )
           {
                byte[] dbs = new byte[14];
                int len = serialPort1.Read(dbs, 0, 14);
               
               RevAppend(ASCIIEncoding.GetEncoding("gb2312").GetString(dbs, 0, len));
               i += len;
         } void RevAppend(string str)
        {
            if (textBox1.InvokeRequired)
                this.Invoke(new MethodInvoker(delegate
                {
                    textBox1.AppendText(str); ;
                    textBox1.SelectionStart = int.MaxValue;
                    textBox1.SelectionLength = 1;
                    textBox1.ScrollToCaret();
                }));
            else
            {
                textBox1.AppendText(str);
                textBox1.SelectionStart = int.MaxValue;
                textBox1.SelectionLength = 1;
                textBox1.ScrollToCaret();
            }
        }
最后,请问下,有那位大侠,可以帮忙分析下,这一二三直接的区别和联系,已经修改的方法、

解决方案 »

  1.   

    说一下乱码,自己给自几个,数据格式是你自己定的,你可以用同一个编码进行读取,而单片机给你发的是什么格式,数据如何组织的,这和你自己给自己发可能不一样,所以会有乱码至于第二个,没收到数据,看看参数是否设置正确,串口是否正常等
      

  2.   

    先用通用的串口助手试试能不能通讯,如果确实可以通讯再上自己的代码。
    还有你要看单片机的通讯说明 发送的数据格式都要准确才行 特别是校验位要计算准确
      

  3.   

    107424627加我。试着看看你程序