欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#串口编程实例代码

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

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

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

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