串口配置为:9600,n,8,1
帧格式为* id data #
*引导
id:1个字节,表示命令代码
data:2个字节,表示命令参数
#:结束
用bcd码表示
请各位高手指点

解决方案 »

  1.   

    http://www.vckbase.com/code/listcode.asp?mclsid=9&sclsid=907
      

  2.   

    定义的:
    public:
    HANDLE hCommDev;
    DWORD dwBytesWritten;
        int comMask,comBuf,comState;
    DCB dcb;
    COMSTAT comStat;
    DWORD dwErrorDlag;
    CSendDlg(CWnd* pParent = NULL); // standard constructor初始化的程序:
    hCommDev = CreateFile("COM2",GENERIC_READ|GENERIC_WRITE,
    0,
    NULL,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,NULL); if(hCommDev==(HANDLE)-1) {
    char ErrorMsg[128];
    switch(GetLastError()){
    case IE_BADID:
    strcpy(ErrorMsg,"不支持此设备端口");
                break;
    case IE_BAUDRATE:
    strcpy(ErrorMsg,"不支持此波特");
                break;
    case IE_BYTESIZE:
    strcpy(ErrorMsg,"不支持此设备断口");
                break;
    default:
    strcpy(ErrorMsg,"串口1初始化错误!");
    }
    ::MessageBox(0,ErrorMsg,"串口命令",MB_ICONEXCLAMATION);
    return -1;
    } comMask  = SetCommMask(hCommDev,EV_RXFLAG);
    comBuf   =SetupComm(hCommDev,1024,512);
    comState = GetCommState(hCommDev,&dcb);
    dcb.BaudRate = CBR_4800;
    dcb.ByteSize = 8;
    dcb.Parity =EVENPARITY;
    dcb.StopBits = ONESTOPBIT;
    dcb.fBinary = 1; comState = SetCommState(hCommDev,&dcb); COMMTIMEOUTS CommTimeOuts;
        CommTimeOuts.ReadIntervalTimeout = MAXDWORD;
    CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
    CommTimeOuts.ReadTotalTimeoutConstant   = 0;
    CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
    CommTimeOuts.WriteTotalTimeoutConstant = 1000;
    SetCommTimeouts(hCommDev,&CommTimeOuts);
    PurgeComm(hCommDev,PURGE_TXCLEAR);
    PurgeComm(hCommDev,PURGE_RXCLEAR); 
    数据写如串口的程序
                 CString str;
    str.Format("%4d",randdata);
    stringuse += str;
    // MessageBox(stringuse);        char strOutMsg[400];
    sprintf(strOutMsg,"%s",stringuse);
    BOOL bReturn =WriteFile(hCommDev,strOutMsg,strlen(strOutMsg),
    &dwBytesWritten,NULL);
    if(!bReturn) AfxMessageBox("Fuck COM2");