• 朱小妹
    了解作者
  • C/C++
    开发工具
  • 130KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 0
    下载次数
  • 2019-06-28 20:15
    上传日期
通常的微处理器都集成有 1 路或多路硬件 UART 通道,可以非常方便地实现串行通讯。 在工业控制、电力通讯、智能仪表等领域中,也常常使用简便易用的串行通讯方式作为数据 交换的手段。 但是,在工业控制等环境中,常会有电气噪声干扰传输线路,使用 RS-232 通讯时经常 因外界的电气干扰而导致信号传输错误;另外,RS-232 通讯的大传输距离在不增加缓冲 器的情况下只可以达到 15 米。为了解决上述问题,RS-485/422 通讯方式就应运而生了。 本章将详细介绍 RS-485/422 原理与区别、元件选择、参考电路、通讯规约、程序设计 等方面的应用要点,以及在产品实践中总结出的一些经验、窍门。
RS485通信程序.zip
  • RS485通信程序
  • 485.hex
    1.5KB
  • STARTUP.LST
    13.7KB
  • Last Loaded sheji.DBK
    109.8KB
  • RS485.OBJ
    11.5KB
  • 485_Uv2.Bak
    2.1KB
  • 2RS485.PWI
    1.1KB
  • 485_Opt.Bak
    1.7KB
  • RS485.h
    1.1KB
  • RS485.c
    3.5KB
  • RS485.uvproj
    13.7KB
  • 485
    10.9KB
  • RS485.LST
    7.6KB
  • 485.lnp
    41B
  • 2RS485.DSN
    96.3KB
  • STARTUP.A51
    6.2KB
  • 2RS485.pdsprj
    16.6KB
  • RS485.uvgui.Datu
    69.3KB
  • Last Loaded 2RS485.pdsbak
    16.6KB
  • RS485.uvopt
    4.9KB
  • 485.uvopt
    6.2KB
  • STARTUP.OBJ
    749B
  • 485.uvgui.Datu
    69.8KB
  • Last Loaded 2RS485.DBK
    89KB
  • 485.plg
    432B
  • 485.M51
    11.9KB
  • 485.build_log.htm
    1.1KB
  • 2RS485.pdsprj.Datu-PC.Datu.workspace
    3.4KB
内容介绍
/****************************************/ /* Copyright (c) 2017, 通信工程学院 */ /* All rights reserved. */ /****************************************/ #include "RS485.h" //主函数 void main(void) { uchar type; Init();//初始化 while (1) { if (RecvData(&type)==0) // 接收帧错误或者地址不符合,丢弃 continue; switch (type) { case ACTIVE: // 主机询问从机是否在位 SendData(READY,0,StatusBuf); // 发送READY指令 break; case GETDATA: // 主机读设备请求 ClrStatusBuf(); GetStat(); // 数据采集函数 SendData(SENDDATA,strlen(StatusBuf),StatusBuf); break; default: break; // 指令类型错误,丢弃当前帧 } } } //初始化 void Init(void) { P1 = 0xFF; DevNo = (P1&0x00111111); // 读取本机设备号 TMOD = 0x20;//定时器T1,工作方式2,自动重装 SCON = 0x50;//串口通信工作方式1,允许接收 TH1 = 0xFD;//波特率9600 TL1 = 0xFD; TR1 = 1; PCON = 0x00;// SMOD=0,波特率不加倍 EA = 0; } //接收数据帧函数,实际上接收的是主机的指令 //*type指令类型 bit RecvData(uchar *type) { uchar tmp,rCount,i; uchar r_buf[RECFRMMAXLEN]; // 保存接收到的帧 uchar FlagRecvOver; // 一帧接收结束标志 uchar FlagStartRec; // 一帧开始接收标志 uchar CheckSum; // 校验和 uchar DataLen; // 数据字节长度变量 //禁止发送,允许接收 DE = 0; RE = 0; //接收一帧数据 rCount = 0; FlagStartRec = 0; FlagRecvOver = 0; while (!FlagRecvOver) { RI = 0; while (!RI); tmp = SBUF; RI=0; //判断是否收到字符'$',其数值为0x24 if ((!FlagStartRec) && (tmp == 0x24)) { FlagStartRec = 1; } if (FlagStartRec) { r_buf[rCount] = tmp; rCount ++; //判断是否收到字符'*',其数值为0x2A,根据接收的指令设置相应标志位 if (tmp == 0x2A) FlagRecvOver = 1; } if (rCount == RECFRMMAXLEN) // 帧超长错误,返回0 return 0; } //计算校验和字节 CheckSum = 0; DataLen = r_buf[3]; for (i=0;i<3+DataLen;i++) { CheckSum = CheckSum + r_buf[i+1]; } //判断帧是否错误 if (rCount<6) // 帧过短错误,返回0,最短的指令帧为6个字节 return 0; if (r_buf[1]!=DevNo) // 地址不符合,错误,返回0 return 0; if (r_buf[rCount-2]!=CheckSum) // 校验错误,返回0 return 0; *type = r_buf[2]; // 获取指令类型 return 1; // 成功,返回1 } //发送数据帧函数 //type数据类型,len数据长度,*buf数据 void SendData(uchar type,uchar len,uchar *buf) { uchar i,tmp; uchar CheckSum = 0; //允许发送,禁止接收 DE = 1; RE = 1; //发送帧起始字节 tmp = 0x24; Send(tmp); Send(DevNo);// 发送地址字节,也即设备号 CheckSum = CheckSum + DevNo; Send(type); // 发送类型字节 CheckSum = CheckSum + type; Send(len); // 发送数据长度字节 CheckSum = CheckSum + len; //发送数据 for (i=0;i<len;i++) { Send(*buf); CheckSum = CheckSum + *buf; buf++; } Send(CheckSum);// 发送校验和字节 //发送帧结束字节 tmp = 0x2A; Send(tmp); } //采集数据函数经过简化处理,取固定的10个字节数据 void GetStat(void) { StatusBuf[0]=DATA0; StatusBuf[1]=DATA1; StatusBuf[2]=DATA2; StatusBuf[3]=DATA3; StatusBuf[4]=DATA4; StatusBuf[5]=DATA5; StatusBuf[6]=DATA6; StatusBuf[7]=DATA7; StatusBuf[8]=DATA8; StatusBuf[9]=DATA9; } //发送单字节数据 void Send(uchar m) { TI = 0; SBUF = m; while(!TI); TI = 0; } //清除设备状态信息缓冲区函数 void ClrStatusBuf(void) { uchar i; for (i=0;i<STATUSMAXLEN;i++) StatusBuf[i] = 0; }
评论
    相关推荐
    • C51-RS485.zip
      此程序是一份单片机与PC的485通讯程序,通过此程序,可检测单片机485铜须是否正常,在PC端发送数据通过单片机返回相同数据,即为正常.
    • AD9_C51_RS485.zip
      Altium Designer设计的基于51的最小系统,主要包括RS485控制器,温度传感器,51单片机,晶振,复位等功能模块
    • AT898252_RS485_C51.rar
      Example code for RS485 network sensor ( MCU AT898252, Keil C51)
    • RS485.zip
      RS485经典源程序代码,基于C51语言写法
    • 232.rar
      单片机控制RS485发送接收的C51程序,硬件电路和外面设计基本一致,注意修改IO口就好了
    • 基于C51RS485通信.zip
      基于C51RS485通信,具有数据CRC校验功能。
    • 22-RS485.rar
      RS485 通信 在c51中实现以RS485口语外界的通信功能
    • RS485.rar
      51单片机RS485通信,包含所有的工程文件
    • RS485多机通信,带C51源程序,带仿真!
      RS485多机通信,Keil C51源程序,Proteus仿真!适合初学者与项目参考!
    • Proteus7.12.rar
      Proteus7.12完美破解版.rar电路仿真软件很好用可以仿真单片数字模拟电路