串口通讯

时间:2009-06-05 07:00:56

标签: visual-c++ serial-port mscomm32

我想将数据十六进制格式(0x01)或(0xff)发送到连接rs232电缆的端口。我在VC ++ 6.0中使用MSCOMM控件。这是发送十六进制数据的正确方法吗?这是我的代码。

CString output;
UCHAR data1,data2;
data1=0x01;
output.Format("%x",data1);
m_mscom.SetOutput(COleVariant(output));
data2=0xff;
output.Format("%x",data2);
m_mscom.SetOutput(COleVariant(output));

如果不正确,请告诉我如何将十六进制格式数据发送到端口。

先谢谢

2 个答案:

答案 0 :(得分:1)

如果您的数据只是您要发送的十六进制值(而不是十六进制格式的字符串),您可能需要“%c”而不是“%x”。给定(例如)0x65的数据值,“%x”将在串行端口上产生两个字节:'6'(ascii值54)和'5'(ascii值53)。 “%c”将在串行端口上产生一个字节:'e'(ascii值为100或0x65)。

至于在C中的串口发送数据,请查看CSerialCSerialPort:它们可能会为您简化一些事情(请注意,我没有使用它们,我倾向于使用pyserial模块在​​python中执行串行端口应用程序,或使用wxWidgets库在ctb中执行串行端口应用程序。

编辑:另一个相当不错(我之前使用过它,但在我写原始帖子时找不到链接)是CSerialFile,是WFC库的一部分。正如我所说的,我现在倾向于使用wxWidgets,但是如果你使用的是Microsoft基础类,那么CSerialFile确实可以很容易地进行串行访问。

答案 1 :(得分:0)

我对MSCOM并不熟悉,但它似乎不起作用。 Format可能会将数据重新格式化为ASCII字符串表示形式。

或者,您可以在Windows中将任何串行端口用作“文件”。查看windows api以打开文件,您将看到可以使用“COM1:”之类的文件名将某些设备作为文件来处理。

然后,您可以像文件一样从中读/写。