📄 sensorservice.c
字号:
/*#######################################################################################
文件名: SensorService.c
功能: 传感器服务函数实现
单位: 浙江工商大学-信电学院
创建日期:2004-09-24
创建人: Houseivan
修改人: Houseivan
修改日期:2005-03-11
#######################################################################################*/
#include"Includes.h"
/*检测是否配置了传感器监控功能*/
#if _DETECT_TASK>0
/*------------------------------------------------*/
/*符号位包含在整数部分的最高位1:负数=======0:正数*/
extern uchar data TempInteger; //温度值整数和符号字节
extern uchar data TempDecimal; //温度值小数位字节
extern uchar data HumiInteger; //湿度值整数和符号字节
extern uchar data HumiDecimal; //湿度值小数位字节
extern uint data HumiCounter; //湿度计数器<65.536KHZ
extern uint data TempCounter; //温度计数器<65.536KHZ
extern uint code TempFoscGroup[]; //温度数据集合
extern uint code HumiFoscGroup[]; //湿度数据集合
#if _SYS_INTERRUPT>0
extern uchar data MeasureTimer; //测量用定时器1s=50x20ms
extern uchar data SampleTimer; //系统数据刷新定时器1min=60x1s
extern uchar data StoreTimer; //存储采样定时器1Hour=60x1min
#endif
#if _LCM_TASK>0
extern uchar code position[];
extern uchar data UartRecBuf[_MAX_LENG];
extern uchar data LcmMode; //显示模式选择
#endif
extern bit WorkMode; //根据登陆成功与否确定站点工作的模式
/*------------------------------------------------*/
//#######################################################################################//
//#Function: MeasureCAE555()
//#Description: 系统传感器数据测量任务
//#Input: 无
//#Output: 无
//#Return: 无 测量结果存放在两个16位计数器中 HumiCounter TempCounter
//#Others: 文件级公共函数
//#######################################################################################//
void MeasureCAE555(void) //应该认真考虑各指令的先后顺序来降低误差
{
CloseScom(); //关闭通讯口ES=0;降低测量误差
CloseHumiCounter(); //关闭湿度计数器 EX0=0
CloseTempCounter(); //关闭温度计数器 TR0=0
CloseTimer1(); //关闭定时器1 TR1=0;
HumiCounter=0; //初始化测量容器
TempCounter=0;
TH0=TL0=0;
MeasureTimer=0; //清空测量计数器
OpenHumiCounter(); //打开湿度计数器 EX0=1
OpenTempCounter(); //打开温度计数器 TR0=1
OpenTimer1(); //启动定时器1 TR1=1;开始测量
while(MeasureTimer<_MEASURE_ALARM); //等待时间到
CloseHumiCounter(); //关闭湿度计数器 EX0=0
CloseTempCounter(); //关闭温度计数器 TR0=0
TempCounter=TH0; //读取温度传感器数据
TempCounter<<=8;
TempCounter|=TL0;
//HumiCounter=HumiCounter; //读取湿度传感器数据
/*此处可以添加测试输出代码*/
#if(_SYS_TEST>0)
#if _LCM_TASK>0
OutputFrequency(TempCounter);
OutputFrequency(HumiCounter);
#endif
#endif
OpenScom(); //恢复通讯ES=1;
}
//#######################################################################################//
//#Function: SensorTaskRun()
//#Description: 系统传感器数据计算出真实的参数值Temperatrue:xx.0℃;Humidity:xx.0%RH
//#Input: 无
//#Output: 无
//#Return: 无 计算结果存放在两个8位容器中 xxInteger xxDecimal用作显示上传用;
//#Others: 文件级公共函数
//#######################################################################################//
void SensorTaskRun(void)
{
#if (_REAL_TIME_TEST<1)
if(SampleTimer>=_SAMPLE_ALARM)
#endif
{
MeasureCAE555();
/*将查表结果暂时存放到计数器中 不带符号位单位:0.1度*/
TempCounter=LocateRefValue(TempCounter,TempFoscGroup,_BLOCK_LENG);
//TempCounter=LocateRefValue(0,TempFoscGroup,_BLOCK_LENG);
HumiCounter=LocateRefValue(HumiCounter,HumiFoscGroup,_BLOCK_LENG);
/*此处可以添加测试输出代码*/
/* #if(_SYS_TEST>0) //此时显示的是查表后的结果
#if _LCM_TASK>0
OutputFrequency(TempCounter);
OutputFrequency(HumiCounter);
#endif
#endif
*/
/*处理湿度 因其偏差为0所以直接表示为正数*/
HumiCounter&=_PLUS_BIT; //确定为正数
/*将实际测量值转移到温湿度单元+*/
//HumiInteger=0x7f&(HumiCounter/_DECIMAL_BIT);
HumiInteger=HumiCounter/_DECIMAL_BIT;
HumiDecimal=HumiCounter%_DECIMAL_BIT;
/*处理温度 因其偏差为200所以根据处理结果确定正负*/
if(TempCounter>=_FLOOR_LIMIT) //Plus+
{
TempCounter=TempCounter-_FLOOR_LIMIT;
/*将实际测量值转移到温湿度单元*/
//TempInteger=0x7f&(TempCounter/_DECIMAL_BIT);
TempInteger=TempCounter/_DECIMAL_BIT;
TempDecimal=TempCounter%_DECIMAL_BIT; //x/_DECIMAL_BIT为小数
//TempCounter&=_PLUS_BIT;
}
else //Minus-
{
TempCounter=_FLOOR_LIMIT-TempCounter;
/*将实际测量值转移到温湿度单元*/
TempInteger=(uchar)(TempCounter/_DECIMAL_BIT);
TempInteger|=0x80;
TempDecimal=(uchar)(TempCounter%_DECIMAL_BIT); //x/10为小数
//TempCounter|=_MINUS_BIT;
}
/*此处可以添加测试输出代码*/
#if(_SYS_TEST>0)
#if _LCM_TASK>0
LCM_Clear();
OutputTHValue(TempInteger,TempDecimal,6);
OutputTHValue(HumiInteger,HumiDecimal,0);
OutputChar(position[4],22,0); //off
OutputChar(position[5],22,0); //[ 16:字型编号
DelayTime(2,_LCM_KEEP_T);
LCM_Clear();
#endif
#endif
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -