高手请进
我想用com1口接受数据
但是不知道怎么实现,谢谢高手帮忙!

解决方案 »

  1.   

    先对seriport控件进行初始化:
                serialPort1.Close();
                serialPort1 .PortName ="COM1";
                serialPort1.BaudRate = 4800;
                serialPort1.Parity = Parity.Odd;
                serialPort1.RtsEnable = true;
                serialPort1.DataBits = 8;
                serialPort1.ReceivedBytesThreshold = 1;
                serialPort1.StopBits = StopBits.One;
                serialPort1.Open();再对sriport的DataReceived进行读取数据格式进行设置:
            private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {
                intBytes = serialPort1.BytesToRead;
                byte[] bytes = new byte[intBytes];
                serialPort1.Read(bytes, 0, intBytes);
                StringBuilder sb = new StringBuilder(bytes.Length * 3);
                foreach (byte b in bytes )
                {
                    sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' '));
                }
                str = sb.ToString().ToUpper()  ;
                dspy_count += 1;
                if (dspy_count ==15)
                {
                    dspy_count = 0;
                    this.Invoke(new EventHandler(delegate { ClearText(); }));
                }
                this.Invoke(new EventHandler(delegate { SetText(); }));
            }
    最后还有两个函数用来清楚文本内容和写入文本内容:
            private void SetText()
            {
                seriport.Text += str;
            }
            private void ClearText()
            {
                seriport.Text = "";
            }
      

  2.   

    当然了还可以一个字节一个字节的读,自己琢磨了。serialPort1.ReceivedBytesThreshold = 1;
      

  3.   

    我用1个模拟软件从com2口发送数据,从com1口接受数据
    我对serialPort初始化              serialPort1.PortName = "com1";//选择串口COM1
                serialPort1.BaudRate = 9600;//设置通信口参数
                  serialPort1.DataBits = 8;//数据位 
                  serialPort1.Parity = Parity.None;//校验位 None
                serialPort1.StopBits = StopBits.One;//停止位1位
                  serialPort1.Open();问题1:
    我从com2发送数据,那com2就是发送缓冲区?
    从com1接收数据,那com1是接受缓冲区?
    我是从com1口接受数据吗?问题2:
    怎么取com2口发送的数据呢?
      

  4.   

    你从com2发数据,你要想读它发的什么数据,就得从com2读啊,不可能,com2发数据,却从com1读。
    你要想在一个计算机上读写的话,用一个跳线将串口的2、3针连接。
    你的计算机有几个串口啊?
      

  5.   

    有一个com口就完全可以实现数据的收发,没必要用两个口。当然你计算机上com口多也可以分开用
    工具箱里有serialPort控件拖一个到窗口上就可以,自己写语句定义也成。
    这个是读取由外围设备发送到计算机上的数据,也就是你说的接收数据:
    private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {
                Thread.Sleep(50);
                byte[] b = new byte[serialPort1.BytesToRead];
                serialPort1.Read(b, 0, b.Length);
             }
    关于Thread.Sleep(50); 我通过调试,发现这样可以一次性把外设的一条命令读完,否则的话有时候命令会被分割。发送数据的话就是下面的语句 当然具体命令的数据就靠你自己定义了
    byte[] mingling= { 0x7E, 0x30, 0x31, 0x30, 0x32};
    serialPort1.Write(mingling, 0, mingling.Length);