多个单片机数据传送实验采集的数据通过485传给上位机该怎样弄

基于RS485的多路数据采集系统
我的图书馆
基于RS485的多路数据采集系统
基于RS485的多路数据采集系统
基于RS485的多路数据采集系统
?&&& 摘& 要:介绍了一种用RS485构成的总线型的数据采集系统,包括上位机PC一台和下位机AT89C52单片机若干,下位机可以进行单独测量,也可以与上位机组成网络进行远程测量,整个系统使用灵活方便,具有很大的实用性。&&& 关键词:RS485;单片机;远程测量;异步通讯
&&& RS485串行总线接口采用平衡发送和差分接收的方式进行数据通讯,较RS232提高了抗共模干扰能力和传输距离,其在适当的波特率下通讯距离可以达到1000 m以上。RS485总线可用于多个带有RS485接口设备的互连,以实现数据高速远距离传送,其连线十分方便,鉴于以上优点,RS485总线在工业控制现场得到了广泛的应用。
1系统设计& ?本系统采用一台PC作为上位机,下位机由若干台AT89C52单片机担任,系统原理图如图1所示。
&&& 上位机的RS232串行口通过RS232/RS485转换器转换为RS485总线,各下位机通过MAX485芯片连接到总线上。各个下位机设有自己惟一的地址,且下位机之间不能通讯,一切通讯受上位机控制。开始时,所有下位机都处于监听状态,等待上位机发出指令。当上位机发出指令时,所有下位机都接收并且将其中的地址帧与自己的地址比较,如果相同则继续接收后面的指令或数据,若不同则不予理睬。& ?单片机的RS485接口电路原理图如图2所示,RS485的A,B为总线接口,DI是发送端,RO是接收端,RE,DE为RS485收发使能端,由单片机的P2?7口控制。
2通讯协议& ?本系统采用半双工异步通讯,下位机以串行中断方式接收。& ?上位机发往下位机的数据分为2类:一类是控制命令帧,另一类为参数帧,即设置下位机的工作参数,其格式如图3所示,CMD和DAT为帧头,地址为下位机的地址。
&&& 下位机发往上位机的数据也分为2类:一类是数据信息帧,另一类为应答帧(GOOD),其格式如图4所示。&&& 下位机在接收到上位机命令或数据发送完毕时均发出应答帧,并且转为接收状态,使总线空出。上位机在发送指令后如接收到下位机的应答则认为指令发送成功,可以发送下一个指令,否则重新发送此指令。
3软件设计& ?采用固定长度的数据帧通讯时,在一般情况下上下位机发送和接收的数据是一样的,但在数据连续发送时,常会发生帧丢失的现象,使发送和接收会不同步。如连续发送几组数据帧“DAT010203”,接收采用9帧为一组的数据的方式,接收方可能会接收到“T010203DA”,“10203DAT0”等数据,从而出现数据和所在组数的不统一,直接影响到数据的准确性。因此在软件设计时每次只取一个数据,逐个进行判断,有效地避免了以上情况的发生,并且使误码率大大降低。下面给出了采用这种算法下位机接收数据的程序流程图,如图5所示,流程图以接收数据帧“DATxxxxxx”为例,其中“DAT”为帧头,“xxxxxx”为实际需要传送的数据,图中Flag为一全局变量,在接收数据子程序中起标志作用。& ?单片机发生程序原代码如下,以发送字符“CMD”为例。void Send()&&&&&&&&&&&&&&&&&&& /*发送程序*/?{ P2^7=1;/*P2^7口接MAX485发送接收使能端*/
&&& 系统的上位机软件采用VB 6.0的MSCOMM控件,利用他可以方便地对串口操作,加快了开发进度,其接收数据的过程和下位机类似,即每次取一个数据帧。在设计上位机软件时需要考虑到PC机速度比单片机速度快的因素,在传送数据时要适当加入延时,以确保系统的正常运行。另外,为保证数据传输的正确性还可以在传输的数据帧中加入校验码。4结语& ?本文阐述的系统结构和通讯方法已在某水利科学研究院流速测量系统中得到实际应用,取得了良好的效果,具有很好的实用性。
馆藏&130605
TA的推荐TA的最新馆藏[转]&[转]&[转]&[转]&
喜欢该文的人也喜欢51单片机学485串口通讯时,有一段代码有注释可是看不懂了,烦请能人把忙解答一下,为什么这么写 - 单片机/MCU论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
51单片机学485串口通讯时,有一段代码有注释可是看不懂了,烦请能人把忙解答一下,为什么这么写
14:46:42  
本帖最后由 进无止境 于
14:51 编辑
void UartRxMonitor(unsigned char ms)
& & static unsigned char cntbkp=0;
& & static unsigned char idletmr=0;
&&if(cntRxd&0) //接收计数器大于零时,监控总线空闲时间
& & if (cntbkp!=cntRxd) //接收计数器改变,即刚接收到数据时,清零空闲计时
& & cntbkp=cntR
& & idletmr=0;
& & if(idletmr&30) //接收计数器未改变,即总线空闲时,累积空闲时间
& & idletmr+=
& && &if(idletmr&=30) //空闲时间超过 30ms 即认为一帧命令接收完毕
& && &cmdarrived=1; //设置命令到达标志
& & cntbkp=0;
void ConfigTimer0(unsigned int ms) //T0 配置函数
&&tmp = ; //定时器计数频率
& &tmp = (tmp*ms)/1000; //计算所需的计数值
& &tmp = 65536- //计算定时器重载值
& &tmp = tmp+34; //修正中断响应延时造成的误差
& &T0RH = (unsigned char)(tmp&&8); //定时器重载值拆分为高低字节
& &T0RL = (unsigned char)
& &TMOD &= 0xF0; //清零 T0 的控制位
& &TMOD |= 0x01; //配置 T0 为模式 1
& &TH0 = T0RH; //加载 T0 重载值
& &TL0 = T0RL;
& &ET0 = 1; //使能 T0 中断
& &TR0 = 1; //启动 T0
void InterruptTimer0() interrupt 1 //T0 中断服务函数
& &TH0 = T0RH; //定时器重新加载重载值
& &TL0 = T0RL;
& &UartRxMonitor(1); //串口接收监控
STC89C52RC 单片机,定时器 1 作为波特率发生器,方式 1 下的波特率发生器必须使用定时器 1 的模
式 2,红色部分到底想干嘛?
本帖最后由 ahliar 于
19:27 编辑
修正误差那34怎么来的?
你可以试试用定时器产生一定频率的波形,用示波器看看,
在定时中断里面处理的东西越多,定时越不精确。
具体为什么是34 我也不清楚,
1、根据实际测量出来的结果进行调整吧。
2、根据代码运行的延时而修正的吧,比如运行一个_nop_()就是1uS之类的。
14:46:43  
本帖最后由 ahliar 于
19:27 编辑
修正误差那34怎么来的?
你可以试试用定时器产生一定频率的波形,用示波器看看,
在定时中断里面处理的东西越多,定时越不精确。
具体为什么是34 我也不清楚,
1、根据实际测量出来的结果进行调整吧。
2、根据代码运行的延时而修正的吧,比如运行一个_nop_()就是1uS之类的。
19:33:09  
红色部分的作用是把你需要的中断触发时间(毫秒)配置到定时器T0。
这里使用定时器最大值从T0R的加载值开始计数一直到65535溢出,所以触发的计数时间是65536-tmp
22:54:58  
你这是定时器0啊,就简单的定时器配置吧,和波特率什么的应该没有关系吧。
tmp = ; //定时器计数频率------跟你的单片机(1T/12T),晶振有关
tmp = (tmp*ms)/1000; //计算所需的计数值-----1s=1000ms
以下就是计算定时的值了=
tmp = 65536- //计算定时器重载值-
& &tmp = tmp+34; //修正中断响应延时造成的误差
[color=Red]& &T0RH = (unsigned char)(tmp&&8); //定时器重载值拆分为高低字节
& &T0RL = (unsigned char)
09:28:52  
你这是定时器0啊,就简单的定时器配置吧,和波特率什么的应该没有关系吧。
tmp = ; //定时器计数频率------跟你的单片机(1T/12T),晶振有关
修正误差那34怎么来的?
11:13:44  
多谢各位帮忙,不胜感激
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司基于单片机的数据采集与处理系统的设计_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于单片机的数据采集与处理系统的设计
&&基于单片机的数据采集与处理系统的设计
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
还剩3页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢多个单片机采集的数据通过485传给上位机该怎样弄? - 单片机/MCU论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
多个单片机采集的数据通过485传给上位机该怎样弄?
17:07:38  
本帖最后由 进无止境 于
17:23 编辑
就类似于多台仪表采集的信号(流量温度之类的),然后把采集结果通过RS—485总线传出......是多机还是单机通讯?该怎么发送呢?
麻烦各位多多指点,哪怕只是个想法也行
已退回5积分
17:47:11  
本帖最后由 joll_lee 于
17:48 编辑
分辨分机标志,通讯,请百度
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司上位机与单片机怎么通信_百度知道
上位机与单片机怎么通信
我以前没写过通信程序,现在手上有个项目,单片机与传感器的下位机通讯调通了,现在要写单片机与上位机的通信代码,完全不知道怎么入手,实现的基本功能是上位机给单片机发指令,单片机把从传感器采集到的数据发送给上位机,上位机与单片机的接口是485接口,我...
我有更好的答案
采集数据,是什么传感器!
1、你的单片机什么型号?
3、485 接口,要接几个单片机?
4、上位机软件,什么语言开发你好
单片机是STM32,传感器是DO,PH等,传感器采集的数据发送给单片机那部分已经解决,现在就是要把数据传给PC机,我看别人给我的一部分协议(那个人辞职了),好复杂啊,什么定义命令字,查询命令,相应命令,什么报警状态,太多了,看不懂,没思路,目前准备接两个单片机,上位机软件还不清楚。你看了这之后可不可给我一个软件流程图,让我大致知道这个流程,
采纳率:62%
为您推荐:
其他类似问题
您可能关注的内容
撤退性出血的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 单片机的数据传输方式 的文章

 

随机推荐