• 5428阅读
  • 0回复

【转帖】基于VC的MSCOMM串口程序 [复制链接]

上一主题 下一主题
离线fanyu
 
只看楼主 倒序阅读 楼主  发表于: 2005-08-13
原贴链接:http://www.daxia.com:81/bw/black/rs232/232comm.htm
基于VC的MSCOMM串口程序

作者:电子白菜(2004-10-24)


这里提供的程序是《VC++串口通信技术与工程实践》一书上例子,如果你有这本书和它的配套光盘,那么大可不必下载。

MSCOMM不是工具控件,所以使用的时候要添加,具体就是Project->Add To Project->Commponents and Controls 然后你在一堆ActiveX中找到Miscrosoft Communications Control,Version 6.0 添加上去就是了,如果你的工程是个对话框的话,就回在对话框上多出个电话符号咯。不过这个电话符号是不会在实际应用中出现的





插入后,就会有个CMSComm的类提供声明对象了,例如声明:

CMSComm m_Com;

那么之后你就可以利用这个m_Com对象在实现你的串口通信,

例如:

m_Com.SetCommPort(1); //选择COM1

m_Com.SetInBufferSize(1024); //设置输入缓冲大小

m_Com.SetOutBufferSize(1024); //设置输出缓冲区大小

对于写串口,也就是PC发数据,一般我们用m_Com.SetOutput(xxx);

话说MSCOMM中有个变量很难懂,就是VARIANT,一般我们是不需要明白这个东东的内在的,发数据的时候就使用函数

COleVariant(xxx)转换下就可以了.

至于收,MSCOMM是采用事件的,

BEGIN_EVENTSINK_MAP(CCommWizardDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CCommWizardDlg)
ON_EVENT(CCommWizardDlg, IDC_COMMCTRL, 1 , OnOnCommCommctrl, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

CCommWizardDlg:你的DLG的名字,如果是个窗体,那就是窗体的名字。

CDialog:因为在DLG上响应的,所以是CDialog类,如果是窗体,就用CframWnd等的东西

IDC_COMMCTRL:刚才说的那个电话的ID,不喜欢这个名字你可以改的

OnOnCommCommctrl:事件响应函数,就是有串口事件的时候就会自动运行这个函数咯

其他东西你照抄就是咯,还有附带说明一下,其实ON_EVENT是个宏来的。

之后嘛,有任何串口事件出现,都会调用这个OnOnCommCommctrl函数的,包括收和发,所以在进入这个函数的时候你得先判断是什么事件,可以通过GetCommEvent()函数知道的,一般我们用事件就是为了收数据的,收数据的事件号是2,也就是你判断GetCommEvent()==2的话就是有数据来了,之后?就是GetInput咯.

说了不少废话了,来个可以用的吧,这东西是书上光盘附带的:

MSCOMM

顺带提一下,当你添加了MSCOMM的时候,工程中就会多出个mscomm的类,有时间可以研究研究一下这个类的:)


[p:1]
快速回复
限100 字节
 
上一个 下一个