我想写一个仪器(DSM-2)与计算机的COM接口的数据传送程序,单不知道怎么写?
请帮忙看看! 谢谢!!!

解决方案 »

  1.   

    http://www.yesky.com/20010529/181919.shtml
    http://www.yesky.com/20010529/181919_1.shtml
      

  2.   

    用CREATEFILE, WRITEFILE.READFILE....等API函数,可以参考MSN,下面给你一个简单的例子
    // 打开并配置串口
    BOOL SZM::OpenComPort( int nPort, int nBaud )
    {
    if( m_bOpened ) return( TRUE ); char szPort[15];
    char szComParams[50];
    DCB dcb; wsprintf( szPort, "COM%d", nPort );
    idComDev = CreateFile( szPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL , NULL );
          //文件名称,参与方式,共享方式,安全属性,建立,文件属性,文件句柄
    if( idComDev == INVALID_HANDLE_VALUE ) return( FALSE ); wsprintf( szComParams, "COM%d:%d,n,8,1", nPort, nBaud );
    dcb.DCBlength = sizeof( DCB );
    GetCommState( idComDev, &dcb );
        SetupComm( idComDev, 1024, 1024 ); dcb.BaudRate = nBaud;
    dcb.ByteSize = 8;
        dcb.Parity = NOPARITY;
        dcb.StopBits = ONESTOPBIT;
        dcb.fInX = dcb.fOutX = true;    dcb.fOutxDsrFlow = dcb.fOutxCtsFlow = false;
        dcb.fDtrControl = DTR_CONTROL_ENABLE;
        dcb.fRtsControl = RTS_CONTROL_ENABLE; if( !SetCommState( idComDev, &dcb ) ||
    !SetupComm( idComDev, 10000, 10000 ) ){ CloseHandle( idComDev );
    return( FALSE );
    }
        PurgeComm ( idComDev ,PURGE_TXCLEAR | PURGE_RXCLEAR );
    m_bOpened = TRUE; return( m_bOpened );
    }
      

  3.   

    // 写串口
    BOOL  SZM::WriteCommByte( unsigned char ucByte )
    {
    int bWriteStat;
    DWORD dwBytesWritten;

    bWriteStat = WriteFile( idComDev, (LPSTR) &ucByte, 1, &dwBytesWritten, NULL );
    if (bWriteStat ==1)
    return( TRUE );
    else return( FALSE );
    }
    // 读串口
    int SZM::ReadData( void *buffer, int limit )
    {
    unsigned long rc;
    if( !m_bOpened || idComDev == NULL ) return( 0 ); DWORD dwBytesRead, dwErrorFlags;
    COMSTAT ComStat; ClearCommError( idComDev, &dwErrorFlags, &ComStat );
    if( !ComStat.cbInQue ) return( 0 ); dwBytesRead = (DWORD) ComStat.cbInQue;
    if( limit < (int) dwBytesRead ) dwBytesRead = (DWORD) limit; ReadFile( idComDev, buffer, dwBytesRead, &rc, NULL );
    return( rc );
    }
    // 关闭串口
    BOOL SZM::CloseComPort()
    {
    if ( (m_bOpened==FALSE) || ( idComDev != INVALID_HANDLE_VALUE )  ) return (TRUE);
    CloseHandle(idComDev);
    m_bOpened = FALSE;
    idComDev = NULL; return TRUE;
    }