usb转串口问题,只能接收数据,不能发送数据

用usb转换后的串口,,只能接收数据,不能发送数据
09-03-08  匿名提问 发布
1个回答
时间
投票
  • 0

    fxx13583

    我向串口发送数据时 本来是一桢数据,但在串口收到的却是两桢.虚心请教傲博网友这是怎么回事.
    例如我向串口发送:
    AA BB 00 CC 99
    但我用串口Debug精灵收到的却是:
    AA BB
    00 CC 99

    我是这么发送的,当满足发送条件时调用下面的函数:
    void send_info()
    {
    send_char_com(0x00);
    send_char_com(0x01);
    send_char_com(0x22);
    send_char_com(0xff);
    send_char_com(0xdd);
    send_char_com(0xee);
    send_char_com(0xcc);
    send_char_com(0xbb);
    send_char_com(0xaa);
    send_char_com(0xa1);
    send_char_com(0x11);
    }
    void send_char_com(unsigned char ch)  
    {
      SBUF=ch;
      while(TI==0);
      TI=0;
    }

    在你的串口Debug精灵里面设置成

    按16进制Display..就可以看到了^_^
    上次不是说可以了吗?
    你是怎么搞的啊,把全部program发出来,这样看不出来的,
    估计又是你的安排不合理.
    void send_info()
    {
      send_char_com(0x00);
      send_char_com(0x01);
      send_char_com(0x22);
      send_char_com(0xff);
      send_char_com(0xdd);
      send_char_com(0xee);
      send_char_com(0xcc);
      send_char_com(0xbb);
      send_char_com(0xaa);
      send_char_com(0xa1);
      send_char_com(0x11);
    }
    我这个函数里既没有帧开始标志,也没有帧结束标志.计算机怎么会懂得它是一帧呢? 也就是说计算机怎么懂得该不该换行呢
    个人觉得可能是串口助手不适合你的应用, 因为读到的数据是正确的. 串口助手内部怎么实现也不是很清楚, 估计读请求在一定时间内就返回了, 这时缓冲区数据还没有全部准备好.

    如果有条件自己用串口 Control 写一个主机program.

    我把发送放到主函数的循环里面还是不行
    1.如果你接收使用16进制Display,那么假如你单片机发了换行符那就应该Display为0D(H).
    2.最直接办法用示波器看下TX脚发送的数据的每位电平是否和你的program一致.
    3.你贴的program也不完整,Delay()没有,中断里有个m0也不清楚在啥地方用的.
    to gooogleman
    "结束起始标志等.都不设定”  怎么样设定结束起始标记?
    to gooogleman
    是设置一个标志,让接收端懂得开始接收了,然后设置一个结束标志,让接收端懂得接收结束了.是这个意思吧? 谢谢

    09-03-08 | 添加评论 | 打赏

    评论读取中....

精华知识
更多  
意见反馈 帮助