C#串口編程實例代碼
由于工作需要,第一次接觸串口編程.所以不得不在網(wǎng)上查閱各種編程實例.最后結(jié)合自己的理解與實踐,最終有了如下代碼.
本代碼只經(jīng)過了簡單的軟件測試,與簡單的硬件測試.
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;//接受結(jié)束狀態(tài),true為成功接收到數(shù)據(jù). private byte[] reciveData = null;//接受到的數(shù)據(jù)存儲到這里. 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;//設(shè)置端口 serialPort.BaudRate = baudRate;//設(shè)置波特率 serialPort.DataBits = dataBits;//設(shè)置數(shù)據(jù)長度 serialPort.Parity = parity;//設(shè)置奇偶校驗協(xié)議 serialPort.StopBits = stopbits;//停止位 serialPort.ReceivedBytesThreshold = 1;//這里是讀事件觸發(fā)條件,1代表一個字節(jié) serialPort.DtrEnable = true;//啟用數(shù)據(jù)終端就緒信號 serialPort.RtsEnable = true;//請求發(fā)送就緒信號 serialPort.DataReceived += new SerialDataReceivedEventHandler(Data_Recive);//綁定處理讀事件的函數(shù). } public void SendBuff(byte[] data) { try { serialPort.Write(data, 0, data.Length);//這里是寫 } catch (Exception e) { if (serialPort != null && serialPort.IsOpen) { status = false; //這個status是我在上層類中判斷端口讀寫狀態(tài)的屬性,可以去掉 serialPort.Close(); } } } void Data_Recive(object o, EventArgs e)//這個是讀端口,事件處理函數(shù) { try { Thread.Sleep(3); int length = serialPort.BytesToRead; reciveData = new byte[length]; serialPort.Read(reciveData, 0, length); while (serialPort.BytesToRead != 0)//由于數(shù)據(jù)長度讀寫不一,而且時間很難確定,所以在這里做了這樣的處理 { Thread.Sleep(1); } if (serialPort.IsOpen) { status = true; //serialPort.Close();//這里不應(yīng)該關(guān)閉,應(yīng)當(dāng)在更高層次的程序上關(guān)閉端口. } } 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> /// 關(guān)閉端口 /// </summary> public void PortClose() { if (serialPort != null && serialPort.IsOpen) { serialPort.Close(); } } } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
您可能感興趣的文章
- 01-10WinForm繪制圓角的方法
- 01-10C#實現(xiàn)txt定位指定行完整實例
- 01-10C#停止線程的方法
- 01-10C#實現(xiàn)清空回收站的方法
- 01-10C#實現(xiàn)多線程下載文件的方法
- 01-10C#自定義簽名章實現(xiàn)方法
- 01-10C#文件斷點續(xù)傳實現(xiàn)方法
- 01-10C#實現(xiàn)簡單的Login窗口實例
- 01-10C#自定義事件監(jiān)聽實現(xiàn)方法
- 01-10C#實現(xiàn)寫系統(tǒng)日志的方法


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實現(xiàn)txt定位指定行完整實例
- 01-10WinForm實現(xiàn)仿視頻播放器左下角滾動新
- 01-10C#停止線程的方法
- 01-10C#實現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實現(xiàn)讀取注冊表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機閱讀
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10C#中split用法實例總結(jié)
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10delphi制作wav文件的方法
- 04-02jquery與jsp,用jquery
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-11ajax實現(xiàn)頁面的局部加載