写了一个单片机的测试程序,想从串口中读取数据,但是不知道怎么把它实时显示出来
读串口函数int  Read_Com(char *strread,int lenread);
//读串口,lenread代表读数据长度,strread代表将读到数据保持的地址。怎么做才能使得当单片机有数据发送上来时,我的测试软件时随时读取并显示出来要用多线程技术吗

解决方案 »

  1.   


    这是板上程序还是PC的?Read_Com是什么?
      

  2.   

    一个监控线程,有数据就放到自己开的buff里。
    一个异步处理线程。
      

  3.   

    MFC有支持串口的控件,可以通过消息的形式来做。
      

  4.   

    我自己写的int Read_Com(char *strread,int lenread);这个函数可以从串口里面读到数据,
    现在的问题是,从串口里来的数据是不定时,如果单片机有数据发送到PC机来,我要实时去接收并把它显示在接收区域里,我该怎么做呢
      

  5.   

    WaitCommEvent,用CreateFile,ReadFile,WriteFile,GetOverlappedResult...异步I/O文件读写的方式操作串口
      

  6.   

    用MSCOMM控件,用消息触发循环处理,
    void CSCommTestDlg::OnComm() 
    {
          // TODO: Add your control notification handler code here
          VARIANT variant_inp;
          COleSafeArray safearray_inp;
          LONG len,k;
          BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
          CString strtemp;
          if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
          {               ////////以下你可以根据自己的通信协议加入处理代码
              variant_inp=m_ctrlComm.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); //字符型
                  strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放              m_strRXData+=strtemp; //加入接收编辑框对应字符串 
              }
          }
    }