关于51单片机如何接收串口的大量数据

zhong_SKY 2015-06-26 10:10:16
我设计了一个单片机的上位机和下位机,但是在上位机向下位机传输大量数据时出现了问题,请问下位机应该如何编程才能顺利地接收上位机发来的一大串数据呢?
...全文
7348 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
rushbrush 2016-05-14
  • 打赏
  • 举报
回复
通常串口的中断处理速度可以满足及时取走中断寄存器的接收数据的。而瓶颈在你的接收缓冲区不够大,无法及时处理,导致数据被丢。所以要么单片机有足够大的缓冲区,可以缓存你的帧数据,要么你的 处理速度足够,可以保证缓存的数据可以及时被处理,要么设计软流控,就是发送方只有收到接收方的确认后才能发送下一帧。否则就只能通过硬流控来控制了。不过硬流控在 某些时候受物理设计的限制,比如板子就没设计硬流控的信号线,那就没办法。
qq_31711825 2016-03-01
  • 打赏
  • 举报
回复
大哥还在吗?我现在就是要实现这个功能,只不过我是需要从txt文件中读取大量数据,想问问你有没有好的方法?你是怎么实现大数据传输的?不会是一点点发过去的吧?
cslrd 2015-10-22
  • 打赏
  • 举报
回复
使用队列做缓冲区
  • 打赏
  • 举报
回复
51单片机的串口中断函数会写吧,直接在中的函数中取出数据保存起来,然后再清中断标志位 void srei()interrupt 4 { if(RI==1) { P0=SBUF; RI=0; //P0口接led来检测接收到的数据 a=SBUF; flag=1; } }
qq_29463067 2015-08-10
  • 打赏
  • 举报
回复
哈哈,大神们有没有程序的,直接上咯
彬浦 2015-07-31
  • 打赏
  • 举报
回复
看了上面的回复,好像我又学到了不少东西
daiya81 2015-07-30
  • 打赏
  • 举报
回复
用中断接收,效果好一些
of123 2015-07-22
  • 打赏
  • 举报
回复
如果接收的数据非常多,无法全部缓存,可以考虑如下方案: 1 缓存采用循环结构。 2 UART 接收采用中断处理,将接收到的数据随时写入缓存。 2 数据处理采用状态机轮询方式,即可以被中断所打断。
默寞 2015-07-21
  • 打赏
  • 举报
回复
一般的会用硬握手信号(RTS)与上位机进行握手,当下位机数据处理不过来,置起该信号告诉上位机不要发送数据,当可以接收时再清除该信号,上位机就会继续发送
SupermanTm 2015-07-20
  • 打赏
  • 举报
回复
串行口速度快的话(115200bps),在片内空间划出部分做成环形缓冲区,主循环处检查队列指针确定有无数据,然后把数据转移到片外空间,然后再处理 如果串行口速度不十分快的话,也可以直接在中断中把数据送到片外RAM 如果是直接解释不加校验的话,可以采用一个状态变量,一边接收一边解释执行的。
mangoalx 2015-06-30
  • 打赏
  • 举报
回复
用中断接受,直接放入环形缓冲,中断外处理
rushbrush 2015-06-30
  • 打赏
  • 举报
回复
看你处理的速度了。如果处理较慢,就得加一些硬件流控来控制接受的速度了。如果只是收到数据做简单处理,那么中断里实时处理一下就OK了。
woshi_ziyu 2015-06-30
  • 打赏
  • 举报
回复
只要缓冲区够大就可以。,。。
zhong_SKY 2015-06-29
  • 打赏
  • 举报
回复
在传输过程中总是把握不了时间,导致数据无法准确接收,不知各位大神有没有好的方法可以分享一下。
sd6814466 2015-06-27
  • 打赏
  • 举报
回复
不要在中断程序内执行太多代码,以免还在处理第一个字节时下一个字节就来了,从而导致漏数据
lbing7 2015-06-27
  • 打赏
  • 举报
回复
一般来说,现在的单片机的速度都能跟得上串口速度,前后台处理不方便的话,上用系统,让系统来处理底层接收 至少,之前我们传过一些不算大的数据,不见丢。。。。
schlafenhamster 2015-06-27
  • 打赏
  • 举报
回复
数据流控制 RST,CST
worldy 2015-06-26
  • 打赏
  • 举报
回复
大串数据y有多大?接收的数据是立即使用,然后抛弃,还是要缓存起来?要知道51的内存是很少的 你的先测试,传输少量数据是否正常
wangjc_801114 2015-06-26
  • 打赏
  • 举报
回复
单片机应该能响应你的串口中断速度的,大数据不是问题,串口本身就是一个字节一个接收的,关键是你单片机需要处理的工作是不是多
worldy 2015-06-26
  • 打赏
  • 举报
回复
引用 2 楼 shen_guang_wu 的回复:
串口连续传输字节时,下位机的RXBUF只能存一个字节,你必须在两个传输位(停止位、起始位)的时间内把数据取走,不然下一个字节的数据就来了
一般是不用担心这个问题,接收是有缓存的,也就是说,你有接收一个字节的时间可以取数,如果你用9K6的波特率,你大概有1ms的时间接收,时间充足的很
加载更多回复(1)

27,511

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧