📄 init.c
字号:
#include "sm89516a.h"
#include "time.h"
#include "string.h"
#include "scan.h"
#include "common.h"
#include "process.h"
#include "recframe.h"
#include "i2c.h"
#include "save_rf.h"
#include "cond.h"
/*********************************************************************
* 函 数 名: void mult_rainfall_init(void)
* 功能描述: 雨量倍数初始化
* 函数说明:
* 调用函数: 无
* 全局变量:无
* 输 入: 无
* 返 回: 无
* 设 计 者:
***********************************************************************/
void mult_rainfall_init(void)
{
unsigned char mult_init;
R_block(WPAGE5,RPAGE5,i2c_addr_mult_rainfall,&mult_init,1);
if(mult_init==0xff)
{
mult_init=0x31;
W_block(WPAGE5,i2c_addr_mult_rainfall,&mult_init,1);
}
Mult_Rainfall=CHAR_TO_LONG(&mult_init,1);
}
/*********************************************************************
* 函 数 名: void basiclevel_init(void)
* 功能描述: 基本水位初始化
* 函数说明:
* 调用函数: 无
* 全局变量:无
* 输 入: 无
* 返 回: 无
* 设 计 者:
***********************************************************************/
void basiclevel_init(void)
{
unsigned char basic_init[5];
unsigned char i;
/*-----------配置基本水位---------------*/
R_block(WPAGE5,RPAGE5,i2c_addr_basic_level,basic_init,5);
if(basic_init[0]==0xff)
{
for(i=0;i<5;i++)
basic_init[i]=0;
W_block(WPAGE5,i2c_addr_basic_level,basic_init,5);
}
Basic_WaterLevel=CHAR_TO_LONG(basic_init,5);
}
/*********************************************************************
* 函 数 名: void rainfall_config_init(void)
* 功能描述: 雨量采集时间间隔初始化
* 函数说明:
* 调用函数: 无
* 全局变量:无
* 输 入: 无
* 返 回: 无
* 设 计 者:
***********************************************************************/
void rainfall_config_init(void)
{
unsigned char i;
unsigned char config[3],new_cfg[3]={0x30,0x30,0x35};
/*-----------雨量采集间隔时间---------------*/
R_block(WPAGE0,RPAGE0,i2c_addr_rainconfig,config,3);
if(config[0]==0xff)
{
R_block(WPAGE1,RPAGE1,i2c_addr_rainconfig,config,3);
if(config[0]==0xff)
{
W_block(WPAGE1,i2c_addr_rainconfig,&new_cfg,3);
}
new_cfg[0]|=0x80;
W_block(WPAGE0,i2c_addr_rainconfig,&new_cfg,3);
for(i=0;i<3;i++)
config[i]=new_cfg[i];
}
if((config[0]&0x80)!=0x80)
{
R_block(WPAGE1,RPAGE1,i2c_addr_rainconfig,config,3);
}
config[0]&=0x7f;
rain_cfg=CHAR_TO_INT(config,3);
}
/*********************************************************************
* 函 数 名: void waterlevel_config_init(void)
* 功能描述: 水位采集时间间隔初始化
* 函数说明:
* 调用函数: 无
* 全局变量:无
* 输 入: 无
* 返 回: 无
* 设 计 者:
***********************************************************************/
void waterlevel_config_init(void)
{
unsigned char i;
unsigned char config[3],new_cfg[3]={0x30,0x30,0x35};
/*-----------水位采集间隔时间---------------*/
R_block(WPAGE0,RPAGE0,i2c_addr_levelconfig,config,3);
if(config[0]==0xff)
{
R_block(WPAGE1,RPAGE1,i2c_addr_levelconfig,config,3);
if(config[0]==0xff)
{
W_block(WPAGE1,i2c_addr_levelconfig,&new_cfg,3);
}
new_cfg[0]|=0x80;
W_block(WPAGE0,i2c_addr_levelconfig,&new_cfg,3);
for(i=0;i<3;i++)
config[i]=new_cfg[i];
}
if((config[0]&0x80)!=0x80)
{
R_block(WPAGE1,RPAGE1,i2c_addr_levelconfig,config,3);
}
config[0]&=0x7f;
level_cfg=CHAR_TO_INT(config,3);
}
/*********************************************************************
* 函 数 名: void rain_conditions_init(void)
* 功能描述: 雨量门限初始化
* 函数说明:
* 调用函数: 无
* 全局变量:无
* 输 入: 无
* 返 回: 无
* 设 计 者:
***********************************************************************/
void rain_conditions_init(void)
{
unsigned char i,j;
unsigned char xdata cd_config[11][10],new_cd[11][10];
for(i=0;i<11;i++)
for(j=0;j<10;j++)
{
new_cd[i][j]=0x00;
}
R_block(WPAGE2,RPAGE2,i2c_addr_rnct,&cd_config[0][0],110);
if(cd_config[0][0]==0xff)
{
R_block(WPAGE3,RPAGE3,i2c_addr_rnct,&cd_config[0][0],110);
if(cd_config[0][0]==0xff)
{
W_block(WPAGE3,i2c_addr_rnct,&new_cd[0][0],110);
}
new_cd[0][0]|=0x80;
W_block(WPAGE2,i2c_addr_rnct,&new_cd[0][0],110);
for(i=0;i<11;i++)
for(j=0;j<10;j++)
{
cd_config[i][j]=new_cd[i][j];
}
}
if((cd_config[0][0]&0x80)!=0x80)
{
R_block(WPAGE3,RPAGE3,i2c_addr_rnct,&cd_config[0][0],110);
}
cd_config[0][0]&=0x7f;
for(i=0;i<11;i++)
{
rain_cd[i].cd_time=CHAR_TO_LONG(&cd_config[i][0],4);
rain_cd[i].cd_data=CHAR_TO_LONG(&cd_config[i][4],6);
}
}
/*********************************************************************
* 函 数 名: void level_conditions_init(void)
* 功能描述: 水位门限初始化
* 函数说明:
* 调用函数: 无
* 全局变量:无
* 输 入: 无
* 返 回: 无
* 设 计 者:
***********************************************************************/
void level_conditions_init(void)
{
unsigned char i,j;
unsigned char xdata cd_config[11][10],new_cd[11][10];
for(i=0;i<11;i++)
for(j=0;j<10;j++)
{
new_cd[i][j]=0x00;
}
R_block(WPAGE2,RPAGE3,i2c_addr_lvct,&cd_config[0][0],110);
if(cd_config[0][0]==0xff)
{
R_block(WPAGE3,RPAGE3,i2c_addr_lvct,&cd_config[0][0],110);
if(cd_config[0][0]==0xff)
{
W_block(WPAGE3,i2c_addr_lvct,&new_cd[0][0],110);
}
new_cd[0][0]|=0x80;
W_block(WPAGE2,i2c_addr_lvct,&new_cd[0][0],110);
for(i=0;i<11;i++)
for(j=0;j<10;j++)
{
cd_config[i][j]=new_cd[i][j];
}
}
if((cd_config[0][0]&0x80)!=0x80)
{
R_block(WPAGE3,RPAGE3,i2c_addr_lvct,&cd_config[0][0],110);
}
cd_config[0][0]&=0x7f;
for(i=0;i<11;i++)
{
level_cd[i].cd_time=CHAR_TO_LONG(&cd_config[i][0],4);
level_cd[i].cd_data=CHAR_TO_LONG(&cd_config[i][4],6);
}
}
/*********************************************************************
* 函 数 名: void rainfall_5min_init(void)
* 功能描述: 初始化读取每5分钟的雨量
* 函数说明:
* 调用函数: 无
* 全局变量:无
* 输 入: 无
* 返 回: 无
* 设 计 者:
***********************************************************************/
void rainfall_5min_init(void)
{
unsigned char i,j;
R_block(WPAGE4,RPAGE4,i2c_addr_rainfall,&RainFall_5Min[0][0],rf_dlen*2);
if((RainFall_5Min[0][0]==0xff)||(RainFall_5Min[0][1]==0xff))
{
for(i=0;i<rf_dlen;i++)
for(j=0;j<2;j++)
RainFall_5Min[i][j]=0;
W_block(WPAGE4,i2c_addr_rainfall,&RainFall_5Min[0][0],rf_dlen*2);
}
}
/*********************************************************************
* 函 数 名: void Rd_i2c_init(void)
* 功能描述: 读I2C初始化数据
* 函数说明:
* 调用函数: 无
* 全局变量:无
* 输 入: 无
* 返 回: 无
* 设 计 者:
***********************************************************************/
void Rd_i2c_init(void)
{
mult_rainfall_init();
basiclevel_init();
rainfall_config_init();
waterlevel_config_init();
rain_conditions_init();
level_conditions_init();
rainfall_5min_init();
}
/*********************************************************************
* 函 数 名: init
* 功能描述: 初始化
* 函数说明:
* 调用函数: 无
* 全局变量:无
* 输 入: 无
* 返 回: 无
* 设 计 者:
***********************************************************************/
void init(void)
{
unsigned char i,j;
for(i=0;i<5;i++)
Scan_WaterLevel[i]=0; //水位初始化
rfcd_1min=0;
for(j=0;j<11;j++)
{
rfcd_time[j]=0; //雨量门限定时
}
save_time=0;
new_cfg=0; //新门限配置初始化
// sum_rf=0; //门限雨量和初始化
RainFall=0; //雨量初始化
WaterLevel=0; //平均水位初始化
Scan_RainFall=0; //雨量门限累加初始化
rain_1min=0;
r_time=0; //雨量采集初始化
level_1min=0;
l_time=0; //水位采集初始化
}
/*********************************************************************
* 函 数 名: sys_init
* 功能描述: 系统初始化
* 函数说明: 定时器1产生通信波特率9600
* 调用函数: 无
* 全局变量:无
* 输 入: 无
* 返 回: 无
* 设 计 者:
***********************************************************************/
void sys_init(void)
{
con_485=R_CON;
TMOD=0x21; // 设置定时器1工作方式 2
TH0=0xfc; // 定时1MS
TL0=0x66;
TR0=1;
ET0=1;
TH1=0xfd; // 设置波特率9600bps
TL1=0xfd;
PCON&=0x00; // SMOD=0
TR1=1; // 开启定时器
SCON=0x40; // 设置串行口工作方式 1
REN=1; // 允许接收
EA=1; // 总中断允许
ES=1; // 串行口中断允许
SCONF=0x02; // 片内扩展ram使能
RCAP2H=0xb8; // 重装值
RCAP2L=0x00;
TH2=0xb8; //定时器2定时20ms
TL2=0x00;
ET2= 1; // 允许T2中断
T2CON= 0x00;
TR2= 1;
WDTKEY=0x1E;
WDTKEY=0xE1;
WDTC=0x85; // 看门狗定时器使能,溢出时间为65.536ms
WDTKEY=0xE1;
WDTKEY=0x1E;
EX0=1; // INT0中断开
IT0=0; // INT0低电平触发
P4=0x0f;
init();
Rd_i2c_init();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -