首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

.NET Compact Framework 串口通訊實作:SerialPort 類別完整收發範例

     編輯:關於.NET

在 Windows CE 與 Windows Mobile 裝置上,GPS 接收器等設備常以串口(Serial Port/Com Port)提供存取介面,透過串口接收 NMEA 資料。CF.NET 2.0 起,微軟將串口操作封裝於 System.IO.Ports.SerialPort,大幅簡化操作,無需 P/Invoke。

完整收發類別實作

分離發送與接收邏輯,分別在不同裝置運行:

接收端:ReceiverPort

public class ReceiverPort : IDisposable
{
    private readonly System.IO.Ports.SerialPort serialPort;

    public ReceiverPort()
    {
        serialPort = new System.IO.Ports.SerialPort("COM1", 4800,
            System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One);
        serialPort.Handshake = System.IO.Ports.Handshake.None;

        try
        {
            serialPort.DataReceived += new
                System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort_DataReceived);
            serialPort.Open();
            if (serialPort.IsOpen)
                Console.WriteLine("Open the serial port successful");
            else
                Console.WriteLine("Fail to open the serial port");
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }

    public void Dispose()
    {
        if (serialPort.IsOpen) serialPort.Close();
        serialPort.Dispose();
    }

    private void serialPort_DataReceived(object sender,
        System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        Console.WriteLine("RECEIVED:" + serialPort.ReadLine());
    }
}

發送端:SenderPort

public class SenderPort : IDisposable
{
    private readonly System.IO.Ports.SerialPort serialPort;

    public SenderPort()
    {
        serialPort = new System.IO.Ports.SerialPort("COM1", 4800,
            System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One);
        serialPort.Handshake = System.IO.Ports.Handshake.None;

        try
        {
            serialPort.Open();
            if (serialPort.IsOpen)
                Console.WriteLine("Open the serial port successful");
            else
                Console.WriteLine("Fail to open the serial port");
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }

    public void Dispose()
    {
        if (serialPort.IsOpen) serialPort.Close();
        serialPort.Dispose();
    }

    public bool Send(string str)
    {
        try
        {
            if (serialPort.IsOpen)
            {
                Console.WriteLine("SENT:" + str);
                serialPort.WriteLine(str + "\r");
                return true;
            }
            return false;
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            return false;
        }
    }
}

關鍵設定說明

  • 連接埠:COM1(依實際硬體調整)
  • 鮑率:4800(GPS 常用,視設備規格調整)
  • 奇偶校驗:None
  • 資料位:8
  • 停止位:One
  • 手震協定:None
  • 事件驅動接收:DataReceived 事件非同步處理
  • 資源釋放:實作 IDisposable 確保關閉與釋放

此模式適用於嵌入式裝置間的可靠串口通訊,代碼結構清晰、易於擴展與維護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved