我用VS2005的串口控件写过两个程序,一个经232〉485〉TTL转换后控制一51单片机(51程序也为本人开发),另一个通过232接一个数控液压泵,均无法使用,症状相似,极其怪异:1、用VS2005程序向下位机发送命令,无反应!(调试51单片机时发现能够引起串行中断,但数据不对)
2、用串口调试助手向下位机发同样的指令,有反映!
3、用VS2005程序发送指令,通过串口调试助手从另一串口接收,指令正常!
4、用Bus Hound截取串口调试助手和VS2005程序发送的指令,完全相同!!!!疯了!!!有神或大侠能救救我吗???

解决方案 »

  1.   

    PC上串口数据兼容性比较,比如51上发往PC,数据位不做任何设置,PC上都可以接收,但是51上接收一般都是9位数据位的。
      

  2.   

    俺以前做过一块板子,将非标准波特率转换成标准波特率,有两个51,连着PC的51中用如下代码可以顺利将数据发给PC。 TH2 = ( unsigned char )( ( BAUDRATE >> 8 ) & 0xff );
    TL2 = ( unsigned char )( BAUDRATE & 0xff );
    RCAP2H = ( unsigned char )( ( BAUDRATE >> 8 ) & 0xff );
    RCAP2L = ( unsigned char )( BAUDRATE & 0xff );
    TR2 = 1; // 启动时钟
    SCON = 0x7A; // 0b0111 1010 第一种工作方式而另一个CPU处于监听状态,用相同的代码就不能接收,忘了查了几个资料了,将其数据位设为9位,就能够正确接收了 T2CON = 0x35;                         // 0b0011 0101 16位串行波特率
                                            // 发生器,自动重装
    TH2 = 0xff;
    TL2 = 0xd2;
    RCAP2H = 0xff;
    RCAP2L = 0xd2;
    TR2 = 1; // 启动时钟 SCON = 0xD0; // SM0 = 1
    // SM1 = 1
    // SM2 = 0
    // 9位数据位通信好像51收数据时,2,3两种模式只支持数据位为9位。
      

  3.   

    这个我是明白的,9位数据位用于一主多从的系统中进行地址判断,某些单片机还具有硬件地址判断功能,51的各种方式我都尝试过,那个泵也不能正常接收……另外请看看我写的2和4,谢谢2、用串口调试助手向下位机发同样的指令,有反映! 
    4、用Bus   Hound截取串口调试助手和VS2005程序发送的指令,完全相同!!!! 
      

  4.   

    buf hound我也用过,只抓过USB的,能抓波形吗?数据相同还不能表明发送时的波形就是一致的,另外还有字符间隔等等,既然下位机能够接收助手的指令,说明你上面发的数据还是不一样的。
      

  5.   

    不能抓波形,VS2005的程序和串口助手都是N81格式,如果数据相同波形为什么会不同呢,求教?字符间隔应该不是问题,因为那两个程序中有一个全是单字节命令。
      

  6.   

    我也不知道,示波器这东西用起来确实麻烦。我也没在实际项目用过VB的串口控件,好像他的output = 数组之前,得先设置好了发送的长度才对。
      

  7.   

    shell调用一个串口助手,findwindow与findwindowex配合得到其内部有用的窗口的句柄,用sendmeessage来实现对其的操作,比如输入框的char事件等等,也挺繁杂的,且不保险。
      

  8.   

    vs2005实际上还是用的VB6.0的MSCOMM控件,这个控件发送的数据分为binary和text。不知道你是否设置对了。