rs485通信程序_第1页
rs485通信程序_第2页
rs485通信程序_第3页
rs485通信程序_第4页
rs485通信程序_第5页
全文预览已结束

下载本文档

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

文档简介

ifndef _ _ 485 _ c _ 1111100000000000652define _ _ 485 _ c _ 1122222222222652#include#include#defineunsignedchar#define unsigned int uint/*通信指令*/#define _ACTIVE_0x01 /主机查询从属设备是否存在#define _GETDATA_0x02 /主机发送读取设备请求#define _OK_0x03 /从站响应#define _STATUS_0x04 /从站发送设备状态信息#define _MAXSIZE0x08 /缓冲区长度#define _ERRLEN 12 /任意的通信帧长度超过12时,发生错误uchar dbuf_MAXSIZE; /此缓冲区用于存储设备的状态信息uchar dev; /此字节用于存储本机的设备编号sbit M_DE=P10; /驱动程序有效、1有效sbit M_RE=P11; /接收机使能,0有效void get_status (); /调用此函数以获取设备的状态信息。 没有给出函数代码void send _ data (uchar类型,uchar len,uchar *buf) /发送数据帧bit recv_cmd(uchar *type) /接收主机命令,主机请求只包含命令信息void send_byte(uchar da) /此函数发送由send_data ()函数调用的帧数据的字节void main ()装模作样uchar type;uchar len;/*系统初始化*/P1=0xff; /读取本机编号dev=(P12 )TMOD=0x20; /定时器T1使用动作方式2TH1=250; /设定初始值TL1=250;TR1=1; /开始计时PCON=0x80; /SMOD=1SCON=0x50; /动作方式1、波特率9600bps、接收许可ES=0; /关闭串行中断IT0=0; /使用外部中断0电平触发模式EX0=1; /打开外部中断0EA=1; /开放中断/*主流程*/while(1) /主循环装模作样if(recv_cmd(type)=0) /丢弃帧错误或帧地址与本地地址不匹配的当前帧并返回continue;开关(type )装模作样case _ACTIVE_: /主机询问从属设备是否存在send_data(_OK_,0,dbuf) /发送响应消息。 没有使用buf的内容break;case _GETDATA_:len=strlen(dbuf )send_data(_STATUS_、len、dbuf) /发送设备状态信息break;default:break; /命令类型错误,丢弃当前帧并返回以下称为以下称为以下称为发生voidreadstatus () interrupt0using1/外部中断0时,表示设备的状态发生了变化。 此函数使用寄存器组1装模作样get_status (); /获取设备状态信息,将其存储在dbuf指向的存储中,并将数据的最后一个字节设置为0,以指示数据结束以下称为/*此函数接收并检测帧数据,并返回函数,无论帧是否错误*函数参数type存储接收的指令字*如果接收的数据帧不正确或地址位不为0 (非主机发送帧),函数返回0,反之,函数返回1*/bit recv_cmd(uchar *type )装模作样bit db=0; /如果接收的前一字节是0xdb,则为此位置比特bit c0=0; /当接收到的前一字节为0xc0时,该位置比特uchar data_buf_ERRLEN; /保存接收的帧uchar tmp;uchar ecc=0;uchar i;M_DE=0; /发送禁止、接收许可M_RE=0;/*接收帧数据*/i=0;while (! c0) /循环直到帧接收完成装模作样RI=0;while (! RI;tmp=SBUF;RI=0;if(db=1) /收到的最后一个字节是0xdb装模作样交换机(tmp )装模作样case0xdd:data_bufi=0xdb; /0xdbdd代表0xdbecc=ecc0xdb;db=0;break;case0xdc直流data_bufi=0xc0; /0xdbdc表示0xc0ecc=ecc0xc0;db=0;break;defaultreturn 0; /帧错误,返回以下称为I;以下称为switch(tmp) /正常装模作样case0xc0: /帧结束c0=1;break;检测到case0xdb: /转义字符db=1;break;default: /普通数据data_bufi=tmp; /保存数据ecc=ecctmp; /计算验证字节I;以下称为if(i=_ERRLEN) /帧长度、错误、返回return 0;以下称为/*确定帧是否错误*/if(i4) /帧太短,错误,返回return 0;国际货币基金组织=0) /验证错误、返回return 0;if(data_buf0!=dev) /非访问本机命令、错误、返回return 0;*type=data_buf1; /获取命令语return 1; /函数返回成功以下称为/*此函数发送一帧的数据帧,参数type是命令字,len是数据长度,buf是要发送的数据内容*/void send_data(uchar type,uchar len,uchar *buf )装模作样uchar i;uchar ecc=0; /此字节用于存储检查字节M_DE=1; /发

温馨提示

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

评论

0/150

提交评论