1.怎么一次发送多个字符给单片机,如发送两位十六进制给单片机

解决方案 »

  1.   

    Serial Communications in Win32
      

  2.   


    把多个8位的合成一个 WORD 或者 DWROD 类型之后再传输,在接收端再分解。
      

  3.   

    发送BYTE数组给单片机就可以了,上位机和下位机通讯,一般都有协议的,协议就是BYTE数组。
    协议一般包括:头、命令、长度、数据、校验、尾  等内容
      

  4.   

    看来有不少同行,这是我的发送按钮程序
    void CFirstDlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
     // TODO: Add your control notification handler code here
    int count1;                    //此处的count,temp与下面的不同
    CString temp1;
    UpdateData(TRUE);           //获取用户输入数据
    count1=m_send.GetLength( );    //获取编辑框内字符数
    temp1=m_send.GetAt(count1-1);   //取最新输入字符
    if(!m_comm.GetPortOpen( ))
        m_comm.SetPortOpen(TRUE);
    m_comm.SetOutput(COleVariant(temp1));    //发送数据
    if(count1==40)                  //如输入字符超过40,清空发送编辑框
    { m_send.Empty( );
          UpdateData(FALSE);          //更新编辑框
    }}temp1=m_send.GetAt(count1-1);   //取最新输入字符。这句就意味着只能发送最新输入的一个字符,但我想发送2个字符
      

  5.   

    当我改动程序时,运行错误
    fatal error C1853: 'Debug/first.pch' is not a precompiled header file created with this compiler
    Error executing cl.exe.
    这又是怎么回事
      

  6.   

    这里是发送一个字符,我的意思就是如何发送一个字符串,api函数不是很熟
      

  7.   

    你循环调这个不就是字符串了,不过建议用API,这个还得注册控件,自己电脑不觉得,别人用起来会挺麻烦的
      

  8.   

    在自己电脑上能运行,但在别人电脑上运行exe,不提示错误,程序界面不出来,打开任务管理器,但在进程中有1s左右的时间,这是怎么回事,又如何解决呢
      

  9.   

    你用控件写的串口程序,就得注册,否则在别人机子上程序虽然能打开,但是跑不起来;
    另外对于你的发送数据的部分,我感觉有点费解了哦,呵呵先上段代码给你参考下吧:void CXXXDlg::OnComm() 
    {
    // TODO: Add your control notification handler code here
    VARIANT variant_inp;
    COleSafeArray safearray_inp;
    LONG len,k;
    BYTE rxdata[1000]; //设置BYTE数组 An 8-bit integerthat is not signed.
    CString strtemp;

    if(m_strmscomm.GetCommEvent()==2)     //事件值为2表示接收缓冲区内有字符
    {
    variant_inp=m_strmscomm.GetInput();   //读缓冲区
    safearray_inp=variant_inp;           //VARIANT型变量转换为ColeSafeArray型变量
    len=safearray_inp.GetOneDimSize();  //得到有效数据长度

    for(k=0;k<len;k++)
    safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组

    for(k=0;k<len;k++)             //将数组转换为Cstring型变量
    {
    BYTE bt=*(char*)(rxdata+k);      //字符型
                               DataAnalysis_object.Pushback(bt);//这是我另外一个类,用于对接收数据进行解析的。
    }
    }
    }void CXXXDlg::CommDataSend(BYTE data)
    {
    CByteArray hexdata;
    hexdata.Add(data);
    m_strmscomm.SetOutput(COleVariant(hexdata));
    }void CSendOrder::SendInstructionSet()
    {
    //发送前清空缓冲区
    m_strmscomm.SetRTSEnable(0);
    m_strmscomm.SetInBufferCount(0);

    for(int i=0; i<length; i++)
    {
    CommDataSend(receive_array[i]);//
    Sleep(10);
    }
    }void CXXXDlg::CommPortInit()
    {
    if(m_strmscomm.GetPortOpen())
    m_strmscomm.SetPortOpen(FALSE);

    m_strmscomm.SetCommPort(m_Port_CommSet);   //选择端口
    m_strmscomm.SetInBufferSize(1024);
    m_strmscomm.SetOutBufferSize(512);

    if( !m_strmscomm.GetPortOpen())
    m_strmscomm.SetPortOpen(TRUE);//打开串口

    m_strmscomm.SetSettings("2400,e,8,1"); //设置波特率等参数
    m_strmscomm.SetRThreshold(1); //表示有一个字符就引发一个事件
    m_strmscomm.SetInputLen(0);//设置当前接收区数据长度为0
    m_strmscomm.SetInputMode(1);//text,binary
    m_strmscomm.GetInput();//先预读缓冲区以清除残留数据
    }