C#中的串行端口信号读取,接收到错误的数据
本文关键字:错误 数据 读取 串行端口 信号 | 更新日期: 2023-09-27 18:24:29
一个micro向我发送一个10位帧,其中第一位是Startbit
,最后一位也是Stopbit
。我使用了以下程序来获取数据,但数据是假的;例如当它向我发送21时,我接收33。出了什么问题?
class Program
{
static void Main(string[] args)
{
dataCollector dc = new dataCollector();
dc.Start("COM23");
}
public class dataCollector : IDisposable
{
private static dataCollector collector;
public dataCollector()
{
thread = new Thread(new ThreadStart(ThreadMain));
}
private Thread thread;
private SerialPort port;
private void ThreadMain()
{
try
{
if (port.IsOpen)
throw new Exception();
}
catch (Exception)
{
Console.Out.WriteLine("port is not open!!");
}
while (port.IsOpen)
{
try
{
var b = port.ReadByte();
Console.Out.WriteLine(b);
//System.Threading.Thread.Sleep(2000);
}
catch (Exception) { }
}
}
public void Start(string portName, int rate=2600)
{
port = new SerialPort("COM23");//baudrate is 2600;
port.BaudRate = 9600;
//port.DataBits = 8;
//port.StopBits = StopBits.One;
//port.Parity = Parity.None;
port.Open();
thread.Start();
}
public void Stop()
{
if (port != null)
{
if (port.IsOpen) port.Close();
if (thread.IsAlive) thread.Join();
port.Dispose();
}
}
public void Dispose()
{
Stop();
}
}
您的值实际上是正确的。发生的情况是,您在微控制器上看到的值是十六进制的,但当您用c#打印出来时,它们是以十进制显示的。使用您的示例,0x21是十进制的33,0x83是十进制的131。
如果您将行Console.Out.WriteLine(b);
更改为像Console.Out.WriteLine("{0:x}", b);
这样的十六进制格式,您应该会发现它们实际上是一样的。