MCU-site_monitoring_system.rar

  • zhuoyue0407
    了解作者
  • C/C++
    开发工具
  • 27KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 5
    下载次数
  • 2009-08-20 10:31
    上传日期
单片机实现485总线现场监测系统,绝对值得一看的哦。
MCU-site_monitoring_system.rar
  • 单片机实现485总线现场监测系统
  • PROC
  • 485MONPRO.LNP
    47B
  • 485MON.C
    3.4KB
  • 485MONPRO.M51
    10.6KB
  • 485MONPRO.OPT
    1.3KB
  • 485MONPRO.UV2
    1.8KB
  • 485MON.H
    1.3KB
  • 485MON.LST
    9.2KB
  • STARTUP.A51
    5KB
  • 485MONPRO
    10.2KB
  • 485MON.OBJ
    11.3KB
  • 485MONPRO_UV2.BAK
    1.9KB
  • 485MONPRO.PLG
    530B
  • 485MONPRO_OPT.BAK
    1.5KB
  • 电路原理图
  • RS-485.SCH
    15.3KB
  • 232-485.SCH
    11.7KB
内容介绍
/****************************************/ /* Copyright (c) 2005, 通信工程学院 */ /* All rights reserved. */ /****************************************/ #include "485Mon.h" void main(void) { uchar type; /* 初始化 */ init(); while (1) { if (Recv_Data(&type)==0) // 接收帧错误或者地址不符合,丢弃 continue; switch (type) { case ACTIVE: // 主机询问从机是否在位 Send_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 = 0xff; DevNo = (P1&0x00111111); // 读取本机设备号 TMOD = 0x20; SCON = 0x50; TH1 = 0xfd; TL1 = 0xfd; TR1 = 1; PCON = 0x00; // SMOD=0 EA = 0; } /* 接收数据帧函数,实际上接收的是主机的指令 */ bit Recv_Data(uchar *type) { uchar tmp,rCount,i; uchar r_buf[RECFRMMAXLEN]; // 保存接收到的帧 uchar Flag_RecvOver; // 一帧接收结束标志 uchar Flag_StartRec; // 一帧开始接收标志 uchar CheckSum; // 校验和 uchar DataLen; // 数据字节长度变量 /* 禁止发送,允许接收 */ DE = 0; RE = 0; /* 接收一帧数据 */ rCount = 0; Flag_StartRec = 0; Flag_RecvOver = 0; while (!Flag_RecvOver) { RI = 0; while (!RI); tmp = SBUF; RI=0; /* 判断是否收到字符'$',其数值为0x24 */ if ((!Flag_StartRec) && (tmp == 0x24)) { Flag_StartRec = 1; } if (Flag_StartRec) { r_buf[rCount] = tmp; rCount ++; /* 判断是否收到字符'*',其数值为0x2A,根据接收的指令设置相应标志位 */ if (tmp == 0x2A) Flag_RecvOver = 1; } if (rCount == RECFRMMAXLEN) // 帧超长错误,返回0 return 0; } /* 计算校验和字节 */ CheckSum = 0; DataLen = r_buf[3]; for (i=0;i++;i<3+DataLen) { 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 } /* 发送数据帧函数 */ void Send_Data(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 Get_Stat(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 Clr_StatusBuf(void) { uchar i; for (i=0;i<STATUSMAXLEN;i++) StatusBuf[i] = 0; }
评论
    相关推荐
    • 基于单片机的温度监测仿真
      基于单片机的温度监测仿真#include <reg52.h> /////////////头文件 //////////////////////////////////////////////////////////////////////////// void LcdShowStr(unsigned char x, unsigned char y, unsigned ...
    • 基于单片机的温湿度监测
      适用于单片机初学者,使用51单片机做一个温湿度监测的小系统,使用C语言编程
    • 基于单片机环境监测.zip
      课程设计,也是从网上下载的,分享出来供参考,能检测环境温度、湿度单片机的系统,有源码,用51开发的基于单片机环境监测
    • PIC16F877系列单片机RS485多机通信与协议
      从机的站号用拨号盘输入,要求8个号码不能相同,且只在上电时由单片机PIC16F688一次读入号码,运行后修改无效。每一个从机都用了一个电位器作为输入。当上位机发送命令65时(自定义功能码,功能为监测发送数据),...
    • 环境监测(51单片机应用)
      本资料是基于51单片机的环境监测系统 /*--------------------------------------------------------------------- ds18b20.h文件 ds18b20的函数 作者: 创建日期:2008.05.05 最后修改日期:2008.05.10 版本:2.0...
    • 基于单片机的甲烷监测系统
      基于单片机的甲烷监测系统。这是protues软件仿真资料。
    • 51单片机 心率监测 串口发送 程序
      51单片机 实时监测心率 蓝牙HC-05发送给电脑手机都可以 程序中晶振为12M 发送给手机出错概率高 发给连接电脑的蓝牙配对模块错误率小 使用时避免蓝牙灯光照射光电对管
    • 51单片机 温湿度监测
      protues画图 c语言编写 温湿度监测
    • 胎压监测单片机
      单片机毕业设计 胎压监测 无线 包含原理图pcb 仿真图 软件
    • 51单片机水位监测装置
      期末老师让做的作业,水位监测,利用TLC2543实行AD转换,并且利用1602液晶显示高度,高度超过的时候就报警