资源简介
采用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\ob
文件 17132 2017-07-10 10:40 多合一code\ob
文件 54034 2017-07-10 10:40 多合一code\ob
文件 1215 2017-07-10 10:40 多合一code\ob
文件 12444 2017-07-10 10:40 多合一code\ob
文件 102 2017-07-10 10:40 多合一code\ob
文件 28529 2017-07-10 10:40 多合一code\ob
文件 1068 2017-06-27 11:49 多合一code\ob
....... 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\ob
目录 0 2017-07-10 16:27 多合一code
----------- --------- ---------- ----- ----
549915 26
相关资源
- 基于AT89c51单片机的数字温度测量及显
- 51单片机播放音乐、电子琴、快进
- 51单片机1602+ADIIC+按键
- 基于51单片机和lcd1602的adc0804测电压电
- 如何利用51单片机输出PWM波
- 51单片机数字时钟-proteus仿真文件及
- MCS-51单片机实用子程序库
- 89C51FFT蝶形算法
- 基于51单片机定时器实现的数字时钟
- 51单片机AD0804模数转换检测电压并显示
- Commix(ModBus)
- 51单片机电子闹钟程序及仿真图
- 基于51单片机的温度控制系统PCB板设计
- 51单片机课程设计电子时钟设计
- 基于51单片机的可调直流稳压器
- 51单片机控制双舵机模拟云台
- 单片机万年历制作全套资料
- 51单片机_DAC0832_多波形发生器汇编频率
- stm32 modbus
- 51单片机实现蜂鸣器警车、救护车、消
- 基于51单片机RS485多机通讯
- Modbus 通信协议(中文)
- 基于单片机的智能电能表设计
- 基于51单片机的智能闹钟
- 51单片机音乐闹钟程序秒表定时器整点
- 基于51单片机的RS485的从机系统的设计
- 基于51单片机的RS485从机系统设计
- 51单片机使用tlc2543测电压
- 51单片机 简易电子时钟
- ModBus 流程图.
评论
共有 条评论