发送前:
m_ctrlComm.SetPortOpen(TRUE);了没有 ?

解决方案 »

  1.   

    写了的,
    m_ctrlComm.SetCommPort(2); //选择COM1
    m_ctrlComm.SetInputMode(1); //输入方式为二进制
    m_ctrlComm.SetInBufferSize(512);   //参数1表示每当串口接受缓冲区中有多余或等于1个字符时将引发OnComm事件;
    m_ctrlComm.SetSettings("4800,n,8,1");
    if( !m_ctrlComm.GetPortOpen())
    m_ctrlComm.SetPortOpen(TRUE);
    m_ctrlComm.SetRThreshold(1);  //参数1表示每当串口接受缓冲区中有多余或等于1个字符时将引发OnComm事件;
    m_ctrlComm.SetInputLen(0);
    m_ctrlComm.GetInput();
    return TRUE;  // return TRUE  unless you set the focus to a control
      

  2.   

    你这是接收机端啊,你怎么说上位机接收不到?你到底是编的上位机还是下位机?
    发送程序是你写的吗?给个发送程序看看。另外,把这句改下:
    strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放->strtemp.Format("%X",bt); //将字符送入临时变量strtemp存放
      

  3.   

    是上位机的,界面如下
    就是建立的时候我发送个数字比如“89”,接受区没有数字显示。下午我看了下位机的程序,感觉是对的啊,用串口调试助手都能发出和接受。这个是下位机程序
    #include<reg52.h>#define uchar unsigned char
    #define uint unsigned intvoid init();
    void display(uchar);uchar code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F};
    uchar flag,i,a,u;
    void main()
    {
    init();
    while(1)
    {
    if(flag==1)
    {
    ES=0;
    SBUF=a;
    while(!TI);
    TI=0;
    ES=1;
    flag=0;
    }
    }
    }void init()
    {
    u=0;
    TMOD=0x20;
    PCON|= 0x80;                                                          
    //TH1  = 0xFD;     //baud*2  /* reload value 19200、数据位8、停止位1。效验位无 (11.0592) 
    TH1 = 0xF3; // //baud*2  /*  波特率4800、数据位8、停止位1。效验位无 (12M)
    TL1 = 0xF3;         
    TR1=1;
    REN=1;
    SM0=0;
    SM1=1;
    EA=1;
    ES=1;
    }
      
    void ser() interrupt 4
    {
    RI=0;
    u=SBUF;
    a=u;
    flag=1;
    }
      

  4.   

    我不知道什么叫I3E标准格式= =I3E该怎么实现啊?谢谢~~
      

  5.   

    PC 上用的现在 就是 IEEE 格式 的 浮点(刚开始是 微软 浮点 格式)。
    float 由 4个 字节组成。typedef union 
    {
    unsigned char bytes[4];
    float  df;
    }IEEE;#define IEEEbyte(float,which) (((IEEE*)&float)->bytes[which])发送时就是取bytes: float a;
    int x;
    unsigned char byte1,byte2,byte3,byte4;
      a=-4.123457;//C0 83 F3 5C
    a= 4.123457;//40 83 F3 5C
    byte1=IEEEbyte(a,0);
    byte2=IEEEbyte(a,1);
    byte3=IEEEbyte(a,2);
    byte4=IEEEbyte(a,3);
      

  6.   

    那么byte1,byte2,byte3,byte4是不是分别对应着上面的C0,83,F3,5C?但是我是要二进制。比如说,我输入了1.234,我想让它转化成14位的二进制,这该怎么办?而且你用的a是float型的,利用上位机传的数应该都是char型的吧?那该怎么办呢,用atof函数?
      

  7.   

    “C0,83,F3,5C?但是我是要二进制”就是2进制:(16进制格式)
    0xC0,0x83,0xF3,0x5C
    即:
    11000000 ,10000011,11110011, 01011100
      

  8.   

    谢谢~~但我还是有些不懂。我现在要做的就是通过上位机输入0~2V之间的数若1.234V,然后将这个数变成二进制利用串口通信给单片机的某个管脚,然后再利用D/A转换器将这个数字量转换成模拟值,驱动其他设备。如果要求是14位二进制的数该怎么办?你这个得出来的是8*4的了还有你这个byte1,byte2,...得出来后,我要串行地往单片机的一个管脚输数,也就是11000000 ,10000011,11110011, 01011100我该怎么一位一位的传给单片机?麻烦你了,我编程学的不好~~
      

  9.   

    14位浮点数 不是真正浮点数, 像 Q14
    参考“C28x IQ – 数学库”0分
    http://download.csdn.net/detail/schlafenhamster/4666792
    “C28x IQ – 数学库。原文“Module11.pdf” 的翻译”
    很 原理的 。
      

  10.   

    通常 AD DC 只讲位数,如 10 位 ,1024 ,根据参考电压, 把参考 分为 1024 份,如 参考电压 2v , 每份是
    2/1024 v.
      

  11.   

    MBF和I3E有什么区别?得出来的数怎么会不一样呢?如果我把这两个二进制数串口通信传给DA转换器,哪个能得到原来的1.234V?
      

  12.   

    “二进制数串口通信传给DA转换器,哪个能得到原来的1.234V”?
    可能 那个都不能。我说过
    “通常 AD DC 只讲位数,如 10 位 ,1024 ,根据参考电压, 把参考 分为 1024 份,如 参考电压 2v , 每份是
    2/1024 v.”
    还是上面条件, 那么 
    2/1024 =1.953125 mv
    1.234v/1.953125=631所以你只要给D/A 送 631,就是 1.234 V 了 ,这里 没有 浮点数的问题。另外:
    // Intel     IEEE 格式:   S(1bit) E(8bit) M(23bit)
    // Microsoft MBF  格式:   E(8bit) S(1bit) M(23bit) 过时了
      

  13.   

    哦,这样啊~~~非常感谢,这个问题懂了~~schlafenhamster,你会单片机和上位机通信么?你能不能帮我看看最上面#1的程序,上位机接不了数。我随便在#8中的图发送区中输入数,比如89,但是接受区中接受不了数,是空白,但是程序我基本上都是从书上摘下来的,应该没什么问题才对。我在想是不是下位机程序的问题。但是下位机程序我在串口调试工具中发送,都能接受。我就不知道怎么办了= =|||现在我在想是不是单片机和上位机通信必须要用9针的那种线。但是我用串口调试工具的时候用的却是那种下载线,也能接收,应该没有什么问题吧。但是我用了那种9针的线单片机却没有电,是不是还得要再给它供电才行?
      

  14.   

    “9针的那种”通常 用 3个线, Tx,Rx,和地。用万用表 测量 Tx 脚 应该 是 -5v (到 -12v),倒过来 测量到 电压的 为负5v的 为Tx 发送 脚,不要搞错了。(经常 2,3 脚 搞反了)不要电源的。 
      

  15.   

    是用杜邦线把计算机的那三针和单片机的三针相连么?我在书上找到了这部分的内容了,但让我纠结的是怎么连线?应该不是单纯地把公头和母头插在一起吧,那样就不用分什么Tx,Rx线了。而且还需要MAX232,它已经连上了P3.0(RXD)和P3.1(TXD),是不是这两个IO口不需要接任何东西,线已经在PCB板里了?
      

  16.   

    “MAX232,它已经连上了P3.0(RXD)和P3.1(TXD),是不是这两个IO口不需要接任何东西,线已经在PCB板里了”
    应该是,MAX232 输出接 9芯 插头。PC 和 下位机的 2,3 一定要 交叉 连接, 即 PC Rx 接 下位机 TX,PC TX 接 下位机 RX。 地线 接一起。
    (这种接法叫 0 调制解调器)
      

  17.   

    不对,我估计是程序问题。原来以为是下位机的程序或者是接线的原因,但今天试了下好像不对。今天我用杜邦线把9针中Rx和Tx的两个针连在一起了,没有接下位机。用串口调试助手发送数字,能正常接受。但是利用我做出来的界面发送数字却接受不了,puzzled = =|||关键是我VC的程序都是书上的,应该不会错的。