在简单串口协议实验基础上进行改进,完善上位机功能,功能尽可能地丰富,给出完整的C#代码,并给出解释
时间: 2023-12-20 21:06:34 浏览: 136
C#编写的基于串口的上位机
以下是一个简单的C#串口通信程序,实现了基本的串口读写和发送指令功能:
```csharp
using System;
using System.IO.Ports;
namespace SerialPortTest
{
class Program
{
static void Main(string[] args)
{
// 创建串口对象
SerialPort com = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
// 打开串口
com.Open();
// 读取串口数据
string data = com.ReadLine();
Console.WriteLine("Received: " + data);
// 发送指令到串口
com.WriteLine("AT+CMD");
// 关闭串口
com.Close();
}
}
}
```
以上代码实现了串口通信的基本操作,但是功能比较简单。下面我们对其进行改进,增加一些实用的功能:
```csharp
using System;
using System.IO.Ports;
namespace SerialPortTest
{
class Program
{
static void Main(string[] args)
{
// 创建串口对象
SerialPort com = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
// 设置串口参数
com.Handshake = Handshake.None;
com.RtsEnable = true;
com.DtrEnable = true;
// 打开串口
com.Open();
// 定义接收缓冲区
byte[] buffer = new byte[1024];
int bytesRead = 0;
// 读取串口数据
while (true)
{
// 检查串口是否有数据
if (com.BytesToRead > 0)
{
// 读取串口数据
bytesRead = com.Read(buffer, 0, buffer.Length);
// 将字节数组转换为字符串
string data = Encoding.ASCII.GetString(buffer, 0, bytesRead);
// 显示接收到的数据
Console.WriteLine("Received: " + data);
}
// 获取用户输入
string input = Console.ReadLine();
// 发送指令到串口
com.WriteLine(input);
// 检查用户输入是否退出
if (input.Equals("exit"))
{
break;
}
}
// 关闭串口
com.Close();
}
}
}
```
改进后的代码增加了以下功能:
1. 设置串口参数:设置了流控制为无,同时使RTS和DTR信号处于高电平状态。
2. 定义接收缓冲区:使用字节数组作为接收缓冲区,每次读取的数据长度为1024个字节。
3. 循环读取串口数据:使用while循环不断地检查串口是否有数据,并将数据转换为字符串进行显示。
4. 获取用户输入:使用Console.ReadLine()方法获取用户的输入,并将其发送到串口。
5. 检查用户输入是否退出:如果用户输入了“exit”,则跳出循环,关闭串口。
以上改进使得程序更加实用和易用,同时也提高了程序的稳定性和可靠性。
阅读全文