导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→补充,help!.doc的具体类容

* 103280: C++串口通信问题

   wxg20020788 
wxg20020788发表的帖子 

 补充,help!.doc的具体类容
本人有一个用MFC实现的串口程序,初始化如下:
 ResetData();
    fp=fopen("output.txt","w+");     
    if(m_MSComm.GetPortOpen()) //如果串口是打开的,则行关闭串口
        m_MSComm.SetPortOpen(FALSE);
     m_MSComm.SetCommPort(1); //选择COM1
     m_MSComm.SetInBufferSize(1024); //接收缓冲区的大小
     m_MSComm.SetOutBufferSize(512);//发送缓冲区的大小
     m_MSComm.SetInputLen(0);//设置当前接收区数据长度为0,表示全部读取
     m_MSComm.SetInputMode(1);//以二进制方式读写数据
     m_MSComm.SetRThreshold(21);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件
     m_MSComm.SetSettings("19200,n,8,1");//波特率19200无检验位,8个数据位,1个停止位
     if(!m_MSComm.GetPortOpen())//如果串口没有打开则打开
         m_MSComm.SetPortOpen(TRUE);//打开串口
     else
        AfxMessageBox("Open Serial Port Failure!");
     int a;
  a=m_MSComm.GetInBufferCount();// 将输入缓冲区内等待读取的字节数赋给a
  m_MSComm.GetInput(); //先预读缓冲区以清除残留数据
 
向接受机发送了字符串“01qS”的程序如下:
int i;
 int mm,nn;
 CByteArray array;
 array.RemoveAll();
    array.SetSize(4);
 for(i=0;i<4;i++)
 {
  array.SetAt(i,tdata[1][i]);// unsigned char tdata[3][4]={{'H'},{'0','1','q','S'},
{'0','1','r','S'}};
 }
 if(!m_MSComm.GetPortOpen())
  m_MSComm.SetPortOpen(TRUE);
    //发送数据
  m_MSComm.SetOutput(COleVariant(array));
    //删除数据,释放内存
    array.RemoveAll();
    array.FreeExtra();

接收机有两种板子,分别采用射频技术和蓝牙技术。当采用射频板子时,发现板子能正确接受数据,PC随后接受到板子发来
的一系列数据(说明上面的程序是对的)。但当替换为蓝牙板子时,板子不能接受到正确的数据,而且二者的数据格式和波
特率完全相同。
本人用串口调试软件sscom32对蓝牙板子进行测试,如图1设置后能板子正确接受到PC发来的命令,由于板子接受到“01qS”
的命令后会向PC机发送数据,但sscom32并没有接受到数据。但当我选中RTS后,sscom32接受到了蓝牙板子的数据并在上面的
数据框中显示(如图2),这表明蓝牙板子已和sscom32正常通信了。
请问是否是因为我上面的程序没有添加流控制协议才导致和蓝牙板子通信的失败,还是别的原因? 请问如何解决,对上面的
程序如何修改?

急用,不胜感激!


help!.doc为我求助类容的word版,并包含图片,谢谢!!

发表时间:2007年3月12日9:33:26

  
回复该帖

本主题共有 2 帖,分页:>>>>>该主题的所有内容[2]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:Max485在收发转换时产生误码的问题我用MAX485,在收发转换时产生误码的问题,对于单机通信,在
[下一篇帖子]:单片机编号的意义请教一下单片机编号的意义,比如一片AT89C51正面的编号是:AT89C51&nbs