C#串口編程執行個體代碼_C#教程

來源:互聯網
上載者:User

由於工作需要,第一次接觸串口編程.所以不得不在網上查閱各種編程執行個體.最後結合自己的理解與實踐,最終有了如下代碼.
本代碼只經過了簡單的軟體測試,與簡單的硬體測試.

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

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.