有不少朋友来信问我上次发表的串口类库得使用方法;
我这里有个简单的程序, 有需要的朋友可以看一看;
cnComm.h见http://blog.csdn.net/wujian53/archive/2004/10/23/148385.aspx
#pragma warning(disable: 4530)
#pragma warning(disable: 4786)
#include <iostream>
#include <exception>
using namespace std;
#include <winsock2.h>
#include <windows.h>
#include "cnComm.h"
//以下程序是每500ms送一次数据从COM1 到 COM2
//我没有实际测试, 不在单位, 没连接线
//不过我相信没问题
//接收数据是在线程中
class MyComm : public cnComm//从cnComm扩展,自己处理 接受数据的
{
public:
//这是cnComm的虚函数, 供监视线程调用的, 监视线程一收到数据就会调用这个函数
//如果你是桌面应用就要发送自定义的窗口消息, 这是我在cnComm中默认用法
virtual void OnReceive()
{
char Buffer[256];
if(Read(Buffer, 256))//从串口读数据 并打印在控制台窗口
cout << "Receive Data Form COM" << _dwPort << " : " << Buffer << endl;
}
};
int main(int argc, char *argv[])
{
try
{
//测试将PC的COM1 COM2相连测试
cnComm Com1(false, 0);//阻塞 串口1 用来发送数据
Com1.Open(1, 1200);//波特率1200
MyComm Com2;//继承扩展使用 非阻塞 串口2 用来接受数据
Com2.Open(2, 1200);
char Buffer[100] = {0};
for(int i = 0; i < 10; i++)
{
Sleep(500);//每500ms送一次
sprintf(Buffer, "这是第%d组数据 From COM1", i + 1);
//这里如果用异步,即非阻塞的读写方式, 函数会立即返回, 并且返回发送的字节数为0
//实际的发送在系统的后台进行
//我这里用的是阻塞方式,为的是你可以看到发送的过程, 和发送的字节数;
//实际应用中一般用非阻塞(异步)的方式
cout << "COM1 Send Data " << Com1.Write(Buffer) << " Byte."<< endl;
}
Sleep(500);
cout << "Exit..." << endl;
Com1.Close();
}
catch(exception &e)
{
cout << e.what() << endl;
}
return 0;
}
本文地址:http://com.8s8s.com/it/it25702.htm