资源简介

C++ 串口类 串口通信 RS232 不需要使用微软件的串口控件

资源截图

代码片段和文件信息

#include “stdafx.h“   
#include “Serial.h“   

CSerial::CSerial()   
{   
memset( &m_OverlappedRead 0 sizeof( OVERLAPPED ) );   
memset( &m_OverlappedWrite 0 sizeof( OVERLAPPED ) );   
m_hIDComDev = NULL;   
m_bOpened = FALSE;   
}   

CSerial::~CSerial()   
{   
Close();   
}   

BOOL CSerial::Open( int nPort int nBaud )   
{   
    
if( m_bOpened ) return( TRUE );   
    
char szPort[15];   
char szComParams[50];   
DCB dcb;   
    
wsprintf( szPort “COM%d“ nPort );   
    
m_hIDComDev = CreateFile(szPort GENERIC_READ | GENERIC_WRITE   
0   
NULL   
OPEN_EXISTING   
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED   
NULL );   
    
if( m_hIDComDev == NULL ) return( FALSE );   
    
memset( &m_OverlappedRead 0 sizeof( OVERLAPPED ) );   
memset( &m_OverlappedWrite 0 sizeof( OVERLAPPED ) );   
    
COMMTIMEOUTS CommTimeOuts;   
CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF;   
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;   
CommTimeOuts.ReadTotalTimeoutConstant = 0;   
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;   
CommTimeOuts.WriteTotalTimeoutConstant = 5000;   
SetCommTimeouts( m_hIDComDev &CommTimeOuts );   
    
wsprintf( szComParams “COM%d:%dn81“ nPort nBaud );   
    
m_OverlappedRead.hEvent = CreateEvent( NULL TRUE FALSE NULL );   
m_OverlappedWrite.hEvent = CreateEvent( NULL TRUE FALSE NULL );   
    
dcb.DCBlength = sizeof( DCB );   
GetCommState( m_hIDComDev &dcb );   
dcb.BaudRate = nBaud;   
dcb.ByteSize = 8;   
unsigned char ucSet;   
ucSet = (unsigned char) ( ( FC_RTSCTS & FC_DTRDSR ) != 0 );   
ucSet = (unsigned char) ( ( FC_RTSCTS & FC_RTSCTS ) != 0 );   
ucSet = (unsigned char) ( ( FC_RTSCTS & FC_XONXOFF ) != 0 );   
if( !SetCommState( m_hIDComDev &dcb ) ||   
!SetupComm( m_hIDComDev 10000 10000 ) ||   
m_OverlappedRead.hEvent == NULL ||   
m_OverlappedWrite.hEvent == NULL )   
{   
DWORD dwError = GetLastError();   
if( m_OverlappedRead.hEvent != NULL ) CloseHandle( m_OverlappedRead.hEvent );   
if( m_OverlappedWrite.hEvent != NULL ) CloseHandle( m_OverlappedWrite.hEvent );   
CloseHandle( m_hIDComDev );   
return( FALSE );   
}   
    
m_bOpened = TRUE;   
    
return( m_bOpened );   
}   

BOOL CSerial::Close( void )   
{   
if( !m_bOpened || m_hIDComDev == NULL )   
return( TRUE );   
    
if( m_OverlappedRead.hEvent != NULL )   
CloseHandle( m_OverlappedRead.hEvent );   
    
if( m_OverlappedWrite.hEvent != NULL )   
CloseHandle( m_OverlappedWrite.hEvent );   
    
CloseHandle( m_hIDComDev );   
m_bOpened = FALSE;   
m_hIDComDev = NULL;   
    
return( TRUE );   
}   

BOOL CSerial::WriteCommByte( unsigned char ucByte )   
{   
BOOL bWriteStat;   
DWORD dwBytesWritten;   
    
bWriteStat = WriteFile( m_hIDComDev   
(LPSTR)&ucByte   
1   
&dwBytesWritten   
&m_OverlappedWrite );   
    
if( !bWriteS

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        974  2011-05-12 16:50  Serial.h

     文件       4823  2011-05-12 16:16  Serial.cpp

----------- ---------  ---------- -----  ----

                 5797                    2


评论

共有 条评论