当前位置: 移动技术网 > IT编程>开发语言>c# > C#串口编程实例代码

C#串口编程实例代码

2019年07月18日  | 移动技术网IT编程  | 我要评论
由于工作需要,第一次接触串口编程.所以不得不在网上查阅各种编程实例.最后结合自己的理解与实践,最终有了如下代码. 本代码只经过了简单的软件测试,与简单的硬件测试.

由于工作需要,第一次接触串口编程.所以不得不在网上查阅各种编程实例.最后结合自己的理解与实践,最终有了如下代码.
本代码只经过了简单的软件测试,与简单的硬件测试.

using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.runtime.interopservices;
using system.threading;
using system.io.ports;
namespace packetstest
{
   
   class comsr
  {
    private serialport serialport;
    private bool status = false;//接受结束状态,true为成功接收到数据.
    private byte[] recivedata = null;//接受到的数据存储到这里.
    public bool status
    {
      set { status = value; }
      get { return status; }
       
    }
    public byte[] reciveddata
    {
      get { return recivedata; }
    }
    public serialport _serialport
    {
      get { return serialport; }
    }
 
    public comsr(string portname,int baudrate,int databits,parity parity,stopbits stopbits)
    {
      serialport = new serialport();
      serialport.portname = portname;//设置端口
      serialport.baudrate = baudrate;//设置波特率
      serialport.databits = databits;//设置数据长度
      serialport.parity = parity;//设置奇偶校验协议
      serialport.stopbits = stopbits;//停止位
      serialport.receivedbytesthreshold = 1;//这里是读事件触发条件,1代表一个字节
      serialport.dtrenable = true;//启用数据终端就绪信号
      serialport.rtsenable = true;//请求发送就绪信号
      serialport.datareceived += new serialdatareceivedeventhandler(data_recive);//绑定处理读事件的函数.
    }
 
    public void sendbuff(byte[] data)
    {
      try
      {
         
        serialport.write(data, 0, data.length);//这里是写      
      }
      catch (exception e)
      {
        if (serialport != null && serialport.isopen)
        {
          status = false; //这个status是我在上层类中判断端口读写状态的属性,可以去掉
          serialport.close();
        }
      }
    }
 
    void data_recive(object o, eventargs e)//这个是读端口,事件处理函数
    {
      try
      {
        thread.sleep(3);
        int length = serialport.bytestoread;
        recivedata = new byte[length];
        serialport.read(recivedata, 0, length);
        while (serialport.bytestoread != 0)//由于数据长度读写不一,而且时间很难确定,所以在这里做了这样的处理
        {
          thread.sleep(1);
        }
        if (serialport.isopen)
        {
          status = true;
          //serialport.close();//这里不应该关闭,应当在更高层次的程序上关闭端口.
        }
      }
      catch (exception ex)
      {
        if (serialport != null && serialport.isopen)
        {
          status = false;
          serialport.close();
        }
      }
    }
 
 
 
    public void portopen()
    {
      if (!serialport.isopen)
      {
        serialport.open();
      }
      else
      {
        serialport.close();
        serialport.open();
      }
    }
    /// <summary>
    /// 关闭端口
    /// </summary>
    public void portclose()
    {
      if (serialport != null && serialport.isopen)
      {
        serialport.close();
      }
    }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网