|
用API操作串口
// MyCom.h
UINT CommWatchProc(LPVOID pParam); // 串口监视线程函数
class CMyCom
{
public:
CMyCom();
~CMyCom();
BOOL SetupMyCom(); // 初始化端口
BOOL WriteMyCom(LPVOID lpSndBuffer, DWORD dwBytesToWrite); // 写端口
DWORD ReadMyCom(LPVOID lpInBuffer, DWORD dwBytesToRead=35); // 读端口
void CloseMyCom(); // 关闭端口
};
// MyCom.cpp
// 串行设备的初始化
// 利用CreateFile函数实现,该函数获得串行设备句柄并对其进行通信参数设置
// 包括设置输出/接受缓冲区大小、超时控制和事件监视等
BOOL CMyCom::SetupMyCom()
{
DCB dcb;
COMMTIMEOUTS timeouts;
if(bOpen)return FALSE; // 串口被占用
// 打开COM1
hComDev = CreateFile("COM1", GENERIC_READ|GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(hComDev == INVALID_HANDLE_VALUE)
{
// MessageBox(NULL, _T("端口被占用,打印程序不能继续运行!"), _T("TRACE"), MB_OK);
return FALSE; // 打开端口失败
}
// 设置超时控制
SetCommTimeouts(hComDev, &timeouts);
// 设置接收缓冲区和输出缓冲区的大小
SetupComm(hComDev, 1024, 512);
// 获取缺省的DCB结构的值
GetCommState(hComDev, &dcb);
// 设定波特率为9600 bps
dcb.BaudRate = CBR_9600;
// 设定无奇偶校验
dcb.fParity = NOPARITY;
// 设定数据位为8
dcb.ByteSize = 8;
// 设定一个停止位
dcb.StopBits = ONESTOPBIT;
// 设定相应监视串口的错误和接收到字符两种事件响应
SetCommMask(hComDev, EV_ERR|EV_RXCHAR);
// 设置串行设备控制参数
SetCommState(hComDev, &dcb);
// 设置参数表示设备已打开
bOpen = TRUE;
&nbs [1] [2] 下一页 |