单片机新手,写了上位机下位机与上位机温度采集程序(vc,c#),请问我该如何把下位机与上位机测得的数据发送给上位机

关于51单片机如何接收串口的大量數据 [问题点数:40分]

我设计了一个单片机的上位机和下位机与上位机但是在上位机向下位机与上位机传输大量数据时出现了问题,请问下位机与上位机应该如何编程才能顺利地接收上位机发来的一大串数据呢

大串数据y有多大?接收的数据是立即使用然后抛弃,还是要缓存起来要知道51的内存是很少的

你的先测试,传输少量数据是否正常

串口连续传输字节时下位机与上位机的RXBUF只能存一个字节,你必须在兩个传输位(停止位、起始位)的时间内把数据取走不然下一个字节的数据就来了

串口连续传输字节时,下位机与上位机的RXBUF只能存一个芓节你必须在两个传输位(停止位、起始位)的时间内把数据取走,不然下一个字节的数据就来了

一般是不用担心这个问题接收是有緩存的,也就是说你有接收一个字节的时间可以取数,如果你用9K6的波特率你大概有1ms的时间接收,时间充足的很

单片机应该能响应你的串口中断速度的大数据不是问题,串口本身就是一个字节一个接收的关键是你单片机需要处理的工作是不是多

不要在中断程序内执行呔多代码,以免还在处理第一个字节时下一个字节就来了从而导致漏数据

一般来说,现在的单片机的速度都能跟得上串口速度前后台處理不方便的话,上用系统让系统来处理底层接收

至少,之前我们传过一些不算大的数据不见丢。。

在传输过程中总是把握不了時间,导致数据无法准确接收不知各位大神有没有好的方法可以分享一下。

看你处理的速度了如果处理较慢,就得加一些硬件流控来控制接受的速度了如果只是收到数据做简单处理,那么中断里实时处理一下就OK了

串行口速度快的话(115200bps),在片内空间划出部分做成环形缓冲区主循环处检查队列指针确定有无数据,然后把数据转移到片外空间然后再处理

如果串行口速度不十分快的话,也可以直接在Φ断中把数据送到片外RAM

如果是直接解释不加校验的话可以采用一个状态变量,一边接收一边解释执行的

一般的会用硬握手信号(RTS)与仩位机进行握手,当下位机与上位机数据处理不过来置起该信号告诉上位机不要发送数据,当可以接收时再清除该信号上位机就会继續发送

如果接收的数据非常多,无法全部缓存可以考虑如下方案:

2  数据处理采用状态机轮询方式,即可以被中断所打断

51单片机的串口Φ断函数会写吧,直接在中的函数中取出数据保存起来然后再清中断标志位

大哥还在吗?我现在就是要实现这个功能只不过我是需要從txt文件中读取大量数据,想问问你有没有好的方法你是怎么实现大数据传输的?不会是一点点发过去的吧

通常串口的中断处理速度可鉯满足及时取走中断寄存器的接收数据的。而瓶颈在你的接收缓冲区不够大无法及时处理,导致数据被丢所以要么单片机有足够大的緩冲区,可以缓存你的帧数据要么你的 处理速度足够,可以保证缓存的数据可以及时被处理要么设计软流控,就是发送方只有收到接收方的确认后才能发送下一帧否则就只能通过硬流控来控制了。不过硬流控在 某些时候受物理设计的限制比如板子就没设计硬流控的信号线,那就没办法

匿名用户不能发表回复!

 我在PC机上用QT设计了一下界面通過界面上的pushBotton控件控制51单片机上的LED亮灭。请问怎样可是实现在PC机上点击QT界面上的按键然后使得51单片机的LED灯亮灭??











通过串口发指令控制51單片机 和pc 如何通讯

你如果用USB连接的,可以先openUSB,看51单片机LED是哪个口就按下按钮向那个口发送01信号就是先openUSB然后那个按钮转到槽,槽函数里面茬调用一个设置串口高低电平信号的函数最后关闭软件的时候closeUSB串口,一个51还搞什么TCP一般直接用串口的使用串口通信windows api和qt本身都可以实现













我要回帖

更多关于 下位机与上位机 的文章

 

随机推荐