• 大小: 94KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: 其他
  • 标签: modbus  51单片机  

资源简介

采用51单片机作为主控制器,通讯方式为485总线,通讯协议为Modbus,波特率为9600,8位数据,1个停止位,无校验位; 本程序作为从机部分编写的;

资源截图

代码片段和文件信息

#include

#include
#include
#include
#define u8 unsigned char
#define u16 unsigned int 
#define u32 unsigned long
#include “modbus.h“
#include
#include“eeprom.h“
//串口2添加控制
#define S2RI  0x01              //S2CON.0
#define S2TI  0x02              //S2CON.1
#define S2RB8 0x04              //S2CON.2
#define S2TB8 0x08              //S2CON.3
//串口2切换io控制 
#define S2_S0 0x01              //P_SW2.0
//串口1切换io控制
#define S1_S0 0x40              //P_SW1.6
#define S1_S1 0x80              //P_SW1.7
bit busy; //串口2用忙标识
//#define _debug 0
/*串口2**传感器*/
/*串口2接受数据长度*/
u8 Rec2_len=0; 
u8 Uart2_Rec[9]={0};
/*串口1**max485*/
u8 Rec1_len=0;
u8 Rec_485buf[6];
u8 Send_485buf[11];
/****pm数据****/
u16 PM25_DATA=0;
u16 PM10_DATA=0;
u16 PM100_DATA=0;
/**485*********/ 
sbit b485Send =  P2^0; //max485 发送接收控制 0接收 1发送
bit flag=0;
/*AD采集电压值===>换算为噪声分贝值*/
u16 noise=0;
/******空气质量传感器检测******/
sbit pin_a=P1^6;
sbit pin_b=P1^7;
u8 AQI=0; //空气质量等级:0-3 0最优
/*******本从机地址********/
extern u8 localAddr;
/*******定时*******/
u8 Caiji_Time=0;
/********传感器型号-程序版本信息*******/
u8 PRODUT_VER=255;
u8 CODE_VER=254;
/*
* 先进先出滤波算法
*/
#define FILTER_N 12
int filter_buf[FILTER_N + 1];
int Filter() {
  int i;
  int filter_sum = 0;
  filter_buf[FILTER_N] = GetADCResult(2); //p12AD
  for(i = 0; i < FILTER_N; i++) {
    filter_buf[i] = filter_buf[i + 1]; // 所有数据左移,低位仍掉
    filter_sum += filter_buf[i];
  }
  return (int)(filter_sum / FILTER_N);
}
/**********************************************************************
* 函数名: unsigned char FucCheckSum(unsigned char *i unsigned char ln)
* 功能描述:求和校验(取发送、接收协议的1\2\3\4\5\6\7的和取反+1)
* 函数说明:将数组的元素1-倒数第二个元素相加后取反+1(元素个数必须大于2)
********************************************************************/
unsigned char FucCheckSum(unsigned char *i unsigned char ln)
{
unsigned char jtempq=0;
i+=1;
for(j=0;j<(ln-2);j++)
{
tempq+= *i; 
i++;
}
tempq=(u8)((~tempq)+1);
return(tempq);


/************************************
    延时子程序
延时时间(xms*1)ms
*************************************/
void delayms(u16 xms)
{
u16 xy;
for(x=xms;x>0;x--)
for(y=550;y>0;y--);
}
//定时器0初始化
void Timer0Init(void) //1毫秒@11.0592MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xCD; //设置定时初值
TH0 = 0xD4; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1;

}

//串口1初始化 下载口 机复用到 p36、p37 485输出用
void Uart1Init(void) //9600bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xDC; //设定定时初值
TH1 = 0xDC; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
P_SW1 &= ~(S1_S0 | S1_S1);    //S1_S0=1 S1_S1=0 
P_SW1|=S1_S0;  //设置串口1 在p36 p37
ES = 1;  //使能串口中断
  REN=1;//允许接收
}
//---串口1发送字节---//
void Uart1_SendData(u8 dat)
{
    SBUF = dat;             /

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2794  2017-06-29 18:36  多合一code\AD.h

     文件       5620  2017-07-01 11:11  多合一code\eeprom.h

     文件      14967  2017-07-10 10:40  多合一code\Listings\main.lst

     文件      13205  2017-07-10 10:40  多合一code\Listings\modbus.lst

     文件      29789  2017-06-27 18:09  多合一code\Listings\senor.m51

     文件      88869  2017-07-10 10:40  多合一code\Listings\senor.map

     文件      15134  2017-06-27 11:49  多合一code\Listings\STARTUP.lst

     文件       7956  2017-07-10 16:27  多合一code\main.c

     文件       7870  2017-07-10 13:33  多合一code\modbus.c

     文件        403  2017-06-27 18:09  多合一code\modbus.h

     文件      39290  2017-07-10 10:40  多合一code\objects\main.obj

     文件      17132  2017-07-10 10:40  多合一code\objects\modbus.obj

     文件      54034  2017-07-10 10:40  多合一code\objects\senor

     文件       1215  2017-07-10 10:40  多合一code\objects\senor.build_log.htm

     文件      12444  2017-07-10 10:40  多合一code\objects\senor.hex

     文件        102  2017-07-10 10:40  多合一code\objects\senor.lnp

     文件      28529  2017-07-10 10:40  多合一code\objects\senor.SBR

     文件       1068  2017-06-27 11:49  多合一code\objects\STARTUP.obj

    .......    170614  2017-07-10 16:27  多合一code\senor.uvgui.Administrator

    .......      5477  2017-07-01 13:18  多合一code\senor.uvopt

    .......     14222  2017-07-01 13:18  多合一code\senor.uvproj

     文件       6376  2016-03-14 08:58  多合一code\STARTUP.A51

     文件      12805  2017-06-26 09:57  多合一code\stc15f2k60s2.h

     目录          0  2017-07-10 10:40  多合一code\Listings

     目录          0  2017-07-10 10:40  多合一code\objects

     目录          0  2017-07-10 16:27  多合一code

----------- ---------  ---------- -----  ----

               549915                    26


评论

共有 条评论