2012-01-29 71 views
2

有人可以告訴我如何與串行端口讀取和寫入數據?我需要一個簡單的程序來學習C#中串口通信的基礎知識。最簡單的控制檯串口程序在C#

+7

被從[MSDN文檔]實施例(http://msdn.microsoft.com/en-us/library/system.io.ports.serialport .aspx)無益? – 2012-01-29 14:06:52

回答

2

System.IO.Ports.SerialPort MSDN文檔:

using System; 
using System.IO.Ports; 
using System.Threading; 

public class PortChat 
{ 
    static bool _continue; 
    static SerialPort _serialPort; 

    public static void Main() 
    { 
     string name; 
     string message; 
     StringComparer stringComparer = StringComparer.OrdinalIgnoreCase; 
     Thread readThread = new Thread(Read); 

     // Create a new SerialPort object with default settings. 
     _serialPort = new SerialPort(); 

     // Allow the user to set the appropriate properties. 
     _serialPort.PortName = SetPortName(_serialPort.PortName); 
     _serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate); 
     _serialPort.Parity = SetPortParity(_serialPort.Parity); 
     _serialPort.DataBits = SetPortDataBits(_serialPort.DataBits); 
     _serialPort.StopBits = SetPortStopBits(_serialPort.StopBits); 
     _serialPort.Handshake = SetPortHandshake(_serialPort.Handshake); 

     // Set the read/write timeouts 
     _serialPort.ReadTimeout = 500; 
     _serialPort.WriteTimeout = 500; 

     _serialPort.Open(); 
     _continue = true; 
     readThread.Start(); 

     Console.Write("Name: "); 
     name = Console.ReadLine(); 

     Console.WriteLine("Type QUIT to exit"); 

     while (_continue) 
     { 
      message = Console.ReadLine(); 

      if (stringComparer.Equals("quit", message)) 
      { 
       _continue = false; 
      } 
      else 
      { 
       _serialPort.WriteLine(
        String.Format("<{0}>: {1}", name, message)); 
      } 
     } 

     readThread.Join(); 
     _serialPort.Close(); 
    } 

    public static void Read() 
    { 
     while (_continue) 
     { 
      try 
      { 
       string message = _serialPort.ReadLine(); 
       Console.WriteLine(message); 
      } 
      catch (TimeoutException) { } 
     } 
    } 

    public static string SetPortName(string defaultPortName) 
    { 
     string portName; 

     Console.WriteLine("Available Ports:"); 
     foreach (string s in SerialPort.GetPortNames()) 
     { 
      Console.WriteLine(" {0}", s); 
     } 

     Console.Write("COM port({0}): ", defaultPortName); 
     portName = Console.ReadLine(); 

     if (portName == "") 
     { 
      portName = defaultPortName; 
     } 
     return portName; 
    } 

    public static int SetPortBaudRate(int defaultPortBaudRate) 
    { 
     string baudRate; 

     Console.Write("Baud Rate({0}): ", defaultPortBaudRate); 
     baudRate = Console.ReadLine(); 

     if (baudRate == "") 
     { 
      baudRate = defaultPortBaudRate.ToString(); 
     } 

     return int.Parse(baudRate); 
    } 

    public static Parity SetPortParity(Parity defaultPortParity) 
    { 
     string parity; 

     Console.WriteLine("Available Parity options:"); 
     foreach (string s in Enum.GetNames(typeof(Parity))) 
     { 
      Console.WriteLine(" {0}", s); 
     } 

     Console.Write("Parity({0}):", defaultPortParity.ToString()); 
     parity = Console.ReadLine(); 

     if (parity == "") 
     { 
      parity = defaultPortParity.ToString(); 
     } 

     return (Parity)Enum.Parse(typeof(Parity), parity); 
    } 

    public static int SetPortDataBits(int defaultPortDataBits) 
    { 
     string dataBits; 

     Console.Write("Data Bits({0}): ", defaultPortDataBits); 
     dataBits = Console.ReadLine(); 

     if (dataBits == "") 
     { 
      dataBits = defaultPortDataBits.ToString(); 
     } 

     return int.Parse(dataBits); 
    } 

    public static StopBits SetPortStopBits(StopBits defaultPortStopBits) 
    { 
     string stopBits; 

     Console.WriteLine("Available Stop Bits options:"); 
     foreach (string s in Enum.GetNames(typeof(StopBits))) 
     { 
      Console.WriteLine(" {0}", s); 
     } 

     Console.Write("Stop Bits({0}):", defaultPortStopBits.ToString()); 
     stopBits = Console.ReadLine(); 

     if (stopBits == "") 
     { 
      stopBits = defaultPortStopBits.ToString(); 
     } 

     return (StopBits)Enum.Parse(typeof(StopBits), stopBits); 
    } 

    public static Handshake SetPortHandshake(Handshake defaultPortHandshake) 
    { 
     string handshake; 

     Console.WriteLine("Available Handshake options:"); 
     foreach (string s in Enum.GetNames(typeof(Handshake))) 
     { 
      Console.WriteLine(" {0}", s); 
     } 

     Console.Write("Handshake({0}):", defaultPortHandshake.ToString()); 
     handshake = Console.ReadLine(); 

     if (handshake == "") 
     { 
      handshake = defaultPortHandshake.ToString(); 
     } 

     return (Handshake)Enum.Parse(typeof(Handshake), handshake); 
    } 
} 
相關問題