找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3538|回复: 11
打印 上一主题 下一主题
收起左侧

单片机串口通信数据错误的问题!

[复制链接]
跳转到指定楼层
楼主
89c52rc11.05892m 9600bps
直接接在电脑的上,用串口助手发的字符A ,单片机收的情况看一下,
怎么 错这么多呀?????(上次用红外线发的错的更多!!!!!!
何解????!!!!!

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:299872 发表于 2019-4-8 09:35 | 只看该作者
发送间隔是1111MS
回复

使用道具 举报

板凳
ID:434820 发表于 2019-4-8 10:26 | 只看该作者
上传代码帮你看一下
回复

使用道具 举报

地板
ID:158375 发表于 2019-4-8 10:32 | 只看该作者
是不是控制字符没处理好,显示出来了?
回复

使用道具 举报

5#
ID:313341 发表于 2019-4-8 10:59 | 只看该作者
单片机的串口发送比较简单,不可靠,红外线更不可靠
回复

使用道具 举报

6#
ID:426861 发表于 2019-4-8 11:22 | 只看该作者
这个需要分析你的程序
回复

使用道具 举报

7#
ID:507174 发表于 2019-4-8 17:19 | 只看该作者
接收的程序可能有问题
回复

使用道具 举报

8#
ID:299872 发表于 2019-4-9 14:59 | 只看该作者
程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit lcdrs= P1^0;
  5. sbit lcdrw= P1^1;
  6. sbit lcden= P2^5;
  7. uchar i,daa[];

  8. void delay(unsigned int i){while(--i);}

  9. void write(uchar da,bit cr)
  10. {
  11.         lcdrs=cr;
  12.         P0=da;
  13.         delay(5);
  14.         lcden=1;
  15.         delay(15);
  16.         lcden=0;
  17. }

  18. void init()
  19. {
  20.         lcdrw=0;
  21.         lcden=0;
  22.         delay(1);
  23.         write(0x38,0);
  24.         write(0x0c,0);
  25.         write(0x01,0);//??
  26.         delay(155);
  27.         write(0x80,0); //???
  28. }

  29. void  URATinit( )
  30. {
  31. TMOD=0x20;
  32. SCON=0x50;
  33. EA=1;
  34. ES=1;
  35. TH1=0xfd;
  36. TL1=0xfd;
  37. TR1=1;
  38. }

  39. void receive() interrupt 4
  40. {
  41. if(RI)
  42. {
  43. RI=0;
  44. daa[i]=SBUF;
  45. write(daa[i],1);
  46.          }
  47. i++;
  48. if(i>20)i=0;

  49. }

  50. void main()
  51. {
  52.         init();
  53.         URATinit( );
  54.         while(1);
  55. }
复制代码
回复

使用道具 举报

9#
ID:503529 发表于 2019-4-9 17:28 | 只看该作者
这可能是代码进入了死循环不断接收
回复

使用道具 举报

10#
ID:299872 发表于 2019-4-10 01:04 来自手机 | 只看该作者
应该没进死循环,因为我在电脑换个字符,一样可以收到,一样错很多。
回复

使用道具 举报

11#
ID:283954 发表于 2019-4-10 13:14 | 只看该作者
能接收到正确字符表示波特率与接线都很正确,几个字符后错误是因为时序误差超过了极限,过后恢复正常是因为错误时序错多几次后又恢复正常。主要是因为:接收程序里接收到字符后必须先放到记忆缓冲,然后马上离开,不能在里面就写字符(write),因为write的时候有很多delay,等写完再回头已经来不及了。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表