5333|28

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

串口啊串口 [复制链接]

我向串口发送数据时 本来是一桢数据,但在串口收到的却是两桢。请问这是怎么回事。
比如我向串口发送:
AA BB 00 CC 99
但我用串口调试精灵收到的却是:
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;
}

最新回复

不懂,帮顶  详情 回复 发表于 2008-12-1 20:17
点赞 关注

回复
举报

89

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
在你的串口调试精灵里面设置成

按16进制显示..就可以看到了^_^
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
不好意思我看错了...换一个串口调试精灵试试吧..我试了一下你的程序没有问题啊~
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
上次不是说可以了吗?
你是怎么搞的啊,把全部程序发出来,这样看不出来的,
估计又是你的安排不合理。
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

5
 

  1. void send_char_com(unsigned char ch)  
  2. {
  3.     SBUF=ch;
  4.     while(TI==0);
  5.     TI=0;
  6. }
  7. void send_info()
  8. {
  9.     send_char_com(0x00);
  10.     send_char_com(0x01);
  11.     send_char_com(0x22);
  12.     send_char_com(0xff);
  13.     send_char_com(0xdd);
  14.     send_char_com(0xee);
  15.     send_char_com(0xcc);
  16.     send_char_com(0xbb);
  17.     send_char_com(0xaa);
  18.     send_char_com(0xa1);
  19.     send_char_com(0x11);
  20. }

  21. main()
  22. {
  23.         EA=1;

  24.         PS=1;//串行中断为高优先级
  25.         PT0=0;// 串行中断为低优先级

  26.         TMOD=0x21;       
  27.         //定时时间50ms
  28.         TH0= -46080/256;
  29.         TL0= -46080%256;
  30.         //定时器1,产生9600波特率
  31.         TH1=0xFD;
  32.         TL1=0xFD;
  33.         PCON=0;

  34.         SCON=0x50;//串行通信工作于方式1
  35.         TR1=1;

  36.         ET0=1;
  37.         TR0=1;


  38.         while(1)
  39.         {
  40.                 send_info();                    
  41.                 //延时
  42.                 Delay();
  43.                 Delay();
  44.                 Delay();

  45.         }
  46. }


  47. //产生1秒的时间
  48. void  tim_0(void) interrupt 1 using 2
  49. {
  50.         static count=0;
  51.         if(count==20)
  52.         {
  53.                 m0++;
  54.                 count=0;
  55.                 //send_info();
  56.         }
  57.         count++;


  58.         TH0= -46080/256;
  59.         TL0= -46080%256;
  60. }



复制代码
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

6
 
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);
}
我这个函数里既没有帧开始标志,也没有帧结束标志。计算机怎么会知道它是一帧呢? 也就是说计算机怎么知道该不该换行呢
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

7
 
我把send_info()放到 tim_0(void) 里面也不行

我用的是大傻串口调试软件
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

8
 
个人觉得可能是串口助手不适合你的应用, 因为读到的数据是正确的. 串口助手内部怎么实现也不是很清楚, 估计读请求在一定时间内就返回了, 这时缓冲区数据还没有全部准备好.

如果有条件自己用串口控件写一个主机程序.
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

9
 
我自己写了一个接收串口的主机程序, 还是不能正确接收我单片机发的信息,但是能正确接收大傻串口调试软件发送的信息。

哎,明天用c51写个只有串口发送的精简的程序,看能不能正确的收发。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

10
 
这个是正常的
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

11
 
LZ哈

不知道是不是在中断里做这种事的问题

像这么那么累的活,别让中断来干了

 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

12
 
我把发送放到主函数的循环里面还是不行
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

13
 
关注。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

14
 
楼主逻辑明显有问题,定时器,又延时,结束起始标志等。都不设定,对定时器安排不合理,作用等。
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

15
 
1.如果你接收使用16进制显示,那么假如你单片机发了换行符那就应该显示为0D(H).
2.最直接办法用示波器看下TX脚发送的数据的每位电平是否和你的程序一致.
3.你贴的程序也不完整,Delay()没有,中断里有个m0也不知道在啥地方用的。
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

16
 
to gooogleman
“结束起始标志等。都不设定”   怎么样设定结束起始标记?
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

17
 
to xybai:
贴全太长了,大家看起来很累。


  1. unsigned char m0=0;         //秒
  2. void Delay()
  3. {
  4.         int i;
  5.         for(i=0;i<0xff;i++)  
  6.         {
  7.         }
  8. }

复制代码
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

18
 
to gooogleman
是设置一个标志,让接收端知道开始接收了,然后设置一个结束标志,让接收端知道接收结束了。是这个意思吧? 谢谢
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

19
 
test_000_001 给我滚
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

20
 
[抗议]对硬件/嵌入开发的某些版主武断,简单,粗暴的执法方式表示严重的抗议!  
http://topic.eeworld.net/u/20081119/11/bda8bc5d-98d0-45ee-a1c1-86209d7f121d.html

各位再看看我刚才那个在硬件/嵌入开发版贴子已经被版主删除了,他是担心什么,还没有一会就直接删除,而且也没个通知说明一下,各位兄弟这里的版主是正直,但是做事的方式有欠妥,直得商榷,我不是说打广告对,我是说他直接封我ID,之前不说一下,之后不通知,感觉很郁闷!如果他提醒一下我一定停止发,他不说我以为这个可以发了,因为之前我是有准备哪个版主提醒一下我很快就不发,所以我才对他不提醒很气愤!


对版主处理问题武断,简单,粗暴的方式表示严重的抗议! 你看你只有也只能删除一下留言,封封几个不听话的ID,还能做点别的不?

此版主跟城管有得一比!

另外各位看看下面这两个帖子!

http://topic.eeworld.net/u/20081118/15/5ade4cdf-3a30-4481-be9d-1b97b88cde48.html

http://topic.eeworld.net/u/20081118/08/cf7d0af3-35cc-4fb7-9dc2-4567041b89e5.html?seed=1367941736


我开一贴他就删除一贴,他们怕什么,我只有以下两个要求:
第一,你把我的那个ID,解封了,
第二,我可以开贴道歉,以后不发广告贴,但是是哪位版主删除的,站出来说一下,然后就此武断,简单,粗暴的方式执法的行为进行道歉!

另外我那个ID在此已经四年了,从来没有任何不良记录,这次直接封,我表示严重的抗议,希望大版版主能就此事作个说明!

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表