有谁能帮我做串口通讯啊!
包括CRC验证什么的!
包括CRC验证什么的!
解决方案 »
- 网页的"图片另存为"功能,用VC如何实现(MFC)?】我用的webbrowser.ExecWB(4,2,NULL,NULL)
- 哪位给点int3断点的资料
- 制作一个下雨的仿真系统
- 圆柱被分割成4部分,每部分颜色不一样,请问如何着色?
- 请问这是什么地址,wangwang:SendIM?name&uid_t=name2&suid=name3,IE居然能识别?
- 想建一个具有none边框的propertysheet嵌入到一个DIALOG里,怎么创建得了none边框的呢?
- 这样能用进程控制么???
- 有谁知道windows media控件中,如何知道一个文件总共需要要多长时间可以播完,并已经播了多少时间?100分
- 在com中如何访问数据库
- 这样在IE中调用dll中函数??
- 急人,怎样才能找到关键字?
- VC中有延迟函数吗? 类似于Delphi中的Delay(int s)
BOOL CSerial::Open(int nPort,int nBaud)
{
nport = nPort;
if( m_bOpened ) return( TRUE ); char szPort[15];
char szComParams[50];
DCB dcb;
DWORD dwError; 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 = 10;
CommTimeOuts.WriteTotalTimeoutConstant = 0;//5000;
SetCommTimeouts( m_hIDComDev, &CommTimeOuts ); wsprintf( szComParams, "COM%d:%d,n,8,1", 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;
dcb.XonLim =1;
dcb.XoffLim = 1 ;
/* 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, 2048, 256) ||
m_OverlappedRead.hEvent == NULL ||
m_OverlappedWrite.hEvent == NULL ){
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 );
}
if(!FlushFileBuffers(m_hIDComDev))
{
dwError = GetLastError();
return(false);
} m_bOpened = TRUE; return( m_bOpened );}
BOOL CSerial::Close()
{
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;
dwBytesWritten=1;
bWriteStat = WriteFile( m_hIDComDev,
&ucByte,dwBytesWritten,&dwBytesWritten, &m_OverlappedWrite );
if( !bWriteStat && ( GetLastError() == ERROR_IO_PENDING ) ){
if( WaitForSingleObject( m_OverlappedWrite.hEvent, 1000 ) ) dwBytesWritten = 0;
else{
GetOverlappedResult( m_hIDComDev, &m_OverlappedWrite, &dwBytesWritten, FALSE );
m_OverlappedWrite.Offset += dwBytesWritten;
}
} return( TRUE );}int CSerial::SendData( const char *buffer, int size )
{ if( !m_bOpened || m_hIDComDev == NULL ) return( 0 ); DWORD dwBytesWritten = 0;
int i;
for( i=0; i<size; i++ ){
WriteCommByte( buffer[i] );
dwBytesWritten++;
}
return( (int) dwBytesWritten );}int CSerial::ReadDataWaiting( void )
{ if( !m_bOpened || m_hIDComDev == NULL ) return( 0 ); DWORD dwErrorFlags;
COMSTAT ComStat; ClearCommError( m_hIDComDev, &dwErrorFlags, &ComStat ); return( (int) ComStat.cbInQue );}int CSerial::ReadData( char *buffer, int limit )
{ if( !m_bOpened || m_hIDComDev == NULL ) return( 0 ); BOOL bReadStatus;
DWORD dwBytesRead, dwErrorFlags;
COMSTAT ComStat; ClearCommError( m_hIDComDev, &dwErrorFlags, &ComStat );
if( !ComStat.cbInQue ) return( 0 ); dwBytesRead = (DWORD) ComStat.cbInQue;
if( limit < (int) dwBytesRead ) dwBytesRead = (DWORD) limit; dwBytesRead = (DWORD) limit ;
bReadStatus = ReadFile( m_hIDComDev, buffer, dwBytesRead, &dwBytesRead, &m_OverlappedRead );
if( !bReadStatus ){
if( GetLastError() == ERROR_IO_PENDING ){
WaitForSingleObject( m_OverlappedRead.hEvent, 1000 );//2000
return( (int) dwBytesRead );
}
return( 0 );
} return( (int) dwBytesRead );}你试试吧
http://www.codeproject.com/system/cserialport.asp
http://www.codeproject.com/system/serial.asp