RS485现场通信监测系统_第1页
RS485现场通信监测系统_第2页
RS485现场通信监测系统_第3页
RS485现场通信监测系统_第4页
RS485现场通信监测系统_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、在一些要求响应速度快、实时性强、控制量多的应用场合,往往理由多个单片机结合PC机组成 分布系统,在这样的系统中可以使用RS-485接口连接单片机和PC机。RS-485是RS-232的改 良标准,在通信速率、传输距离、多机连接等方面较RS-232有了很大的提高,在软件设计上和 RS-232基本一致。在结合RS-485及有关资料基础上学习了用单片机实现485总线现场监测系统。 这个系统以PC机为主机,多个单片机为从机的现场监测系统,单片机组组成的各个节点负责采 集终端设备的状态信息,主机以轮询的方式向各个节点获取这些设备信息,并根据信息内容进行 相关的操作。主要器件:1、PC机端的232/485转

2、换接口 : MC1488和MC1489实现TTL电平和RS-232通信电平的转化; PC147光电隔离器件;MAX481485驱动收发芯片。2、 单片机端:AT89C52单片机芯片,用于数据采集和与485总线接口; MAX481485驱动收发 芯片;DIP-6开关用于确定本机的设备号。试验流程图:主机端流程:开始单片机端流程图:试验电路图:主机端iciJ. A虻苛ECAIf Daiip-j.!IKE*:r: cfrHI-折 jdpx- 2单片机端:试验程序代码:/ 485Mon.h 程序/防止485Mon.h被重复引用#ifndef _485MON_H#define _485MON_H#inc

3、lude /引用标准库的头文件#include #include #define uchar unsigned char#define uint unsigned int#define ACTIVE 0 x11#define GETDATA0 x22#define READY 0 x33#define SENDDATA0 x44#define RECFRMMAXLEN 16/接收帧的最大长度,超过此值认为帧超长错误#define STATUSMAXLEN 10/设备状态信息最大长度/设备号uchar DevNo;xdata uchar StatusBufSTATUSMAXLEN;/为简化起见,

4、假设了 10位固定的采集数据#define DATA00 x10#define DATA10 x20#define DATA20 x30#define DATA30 x40#define DATA40 x50#define DATA50 x60#define DATA60 x70#define DATA70 x80#define DATA80 x90#define DATA90 xA0sbit DE = P1A6;/驱动器使能,1有效sbit RE = P1A7;/接收器使能,0有效void init();/系统初始化void Get_Stat();/ 简化的数据采集函数bit Recv_Da

5、ta(uchar *type);/ 接收数据帧函数void Send(uchar m);/发送单字节数据void Send_Data(uchar type,uchar ien,uchar *buf);/ 发达数据帧函数void Clr_StatusBuf();/清除设备状态信息缓冲区函数#endif/ 485Mon.c 程序#include 485Mon.huchar type;/*初始化*/init();while (1)if (Recv_Data(&type)=0)/接收帧错误或者地址不符合,丢弃continue;switch (type)case ACTIVE:/主机询问从机是否在位Se

6、nd_Data(READY,0,StatusBuf); / 发送 READY 指令 break;case GETDATA:/主机读设备请求Clr_StatusBuf();Get_Stat();/数据采集函数Send_Data(SENDDATA,strlen(StatusBuf),StatusBuf);break;default:break;/指令类型错误,丢弃当前帧/* 初始化 */void init(void)P1 = 0 xff;/读取本机设备号TMOD = 0 x20;SCON = 0 x50;TH1 = 0 xfd;TL1 = 0 xfd;TR1 = 1;PCON = 0 x00;/

7、SMOD=0EA = 0;/*接收数据帧函数,实际上接收的是主机的指令*/ bit Recv_Data(uchar *type)uchar tmp,rCount,i;/保存接收到的帧/ 一帧接收结束标志/ 一帧开始接收标志/校验和/数据字节长度变量uchar r_bufRECFRMMAXLEN;uchar Flag_RecvOver;uchar Flag_StartRec;uchar CheckSum;uchar DataLen;/*禁止发送,允许接收*/DE = 0;RE = 0;/*接收一帧数据*/rCount = 0;Flag_StartRec = 0;Flag_RecvOver = 0

8、;while (!Flag_RecvOver)RI = 0;while (!RI);tmp = SBUF;RI=0;/*判断是否收到字符$,其数值为0 x24 */if (!Flag_StartRec) & (tmp = 0 x24)Flag_StartRec = 1;if (Flag_StartRec)r_bufrCount = tmp;rCount +;/*判断是否收到字符*,其数值为0 x2A,根据接收的指令设置相应标志位*/if (tmp = 0 x2A)Flag_RecvOver = 1;if (rCount = RECFRMMAXLEN)/ 帧超长错误,返回 0return 0;接

9、上篇程序:/*计算校验和字节*/CheckSum = 0;DataLen = r_buf3;for (i=0;i+;i3+DataLen)CheckSum = CheckSum + r_bufi+1;/*判断帧是否错误*/if (rCount6)/帧过短错误,返回0,最短的指令帧为6个字节return 0;if (r_buf1!=DevNo)/地址不符合,错误,返回0return 0;if (r_bufrCount-2!=CheckSum) / 校验错误,返回 0return 0;*type = r_buf2;/获取指令类型return 1;/成功,返回1/*发送数据帧函数*/void Sen

10、d_Data(uchar type,uchar len,uchar *buf)uchar i,tmp;uchar CheckSum = 0;/*允许发送,禁止接收*/DE = 1;RE = 1;/*发送帧起始字节*/tmp = 0 x24;Send(tmp);Send(DevNo);/发送地址字节,也即设备号CheckSum = CheckSum + DevNo;Send(type);/发送类型字节CheckSum = CheckSum + type;Send(len);/发送数据长度字节CheckSum = CheckSum + len;/*发送数据*/for (i=0;ilen;i+)Send(*buf);CheckSum = CheckSum + *buf;buf+;Send(CheckSum);/发送校验和字节/*发送帧结束字节*/tmp = 0 x2A;Send(tmp);/*采集数据函数经过简化处理,取固定的10个字节数据*/void Get_Stat(void)StatusBuf0=DATA0;StatusBuf1=DATA1;StatusBuf2=DATA2;StatusBuf3=DATA3;StatusBuf4=DATA4;StatusBuf5=DATA5;StatusBuf6=DATA6;StatusBuf7=DATA7;StatusBuf8=DAT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论