📄 sensorservice.lst
字号:
C51 COMPILER V7.20 SENSORSERVICE 11/09/2002 21:11:17 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE SENSORSERVICE
OBJECT MODULE PLACED IN SensorService.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SensorModule\SensorService.c BROWSE DEBUG OBJECTEXTEND PRINT(.\SensorServic
-e.lst) OBJECT(SensorService.obj)
line level source
1 /*#######################################################################################
2 文件名: SensorService.c
3 功能: 传感器服务函数实现
4 单位: 浙江工商大学-信电学院
5 创建日期:2004-09-24
6 创建人: Houseivan
7 修改人: Houseivan
8 修改日期:2005-03-11
9 #######################################################################################*/
10 #include"Includes.h"
11
12 /*检测是否配置了传感器监控功能*/
13 #if _DETECT_TASK>0
14 /*------------------------------------------------*/
15 /*符号位包含在整数部分的最高位1:负数=======0:正数*/
16 extern uchar data TempInteger; //温度值整数和符号字节
17 extern uchar data TempDecimal; //温度值小数位字节
18 extern uchar data HumiInteger; //湿度值整数和符号字节
19 extern uchar data HumiDecimal; //湿度值小数位字节
20 extern uint data HumiCounter; //湿度计数器<65.536KHZ
21 extern uint data TempCounter; //温度计数器<65.536KHZ
22 extern uint code TempFoscGroup[]; //温度数据集合
23 extern uint code HumiFoscGroup[]; //湿度数据集合
24
25 #if _SYS_INTERRUPT>0
26 extern uchar data MeasureTimer; //测量用定时器1s=50x20ms
27 extern uchar data SampleTimer; //系统数据刷新定时器1min=60x1s
28 extern uchar data StoreTimer; //存储采样定时器1Hour=60x1min
29 #endif
30
31 #if _LCM_TASK>0
32 extern uchar code position[];
33
34 extern uchar data UartRecBuf[_MAX_LENG];
35 extern uchar data LcmMode; //显示模式选择
36 #endif
37
38 extern bit WorkMode; //根据登陆成功与否确定站点工作的模式
39 /*------------------------------------------------*/
40 //#######################################################################################//
41 //#Function: MeasureCAE555()
42 //#Description: 系统传感器数据测量任务
43 //#Input: 无
44 //#Output: 无
45 //#Return: 无 测量结果存放在两个16位计数器中 HumiCounter TempCounter
46 //#Others: 文件级公共函数
47 //#######################################################################################//
48
49 void MeasureCAE555(void) //应该认真考虑各指令的先后顺序来降低误差
50 {
51 1 CloseScom(); //关闭通讯口ES=0;降低测量误差
52 1
53 1 CloseHumiCounter(); //关闭湿度计数器 EX0=0
54 1 CloseTempCounter(); //关闭温度计数器 TR0=0
C51 COMPILER V7.20 SENSORSERVICE 11/09/2002 21:11:17 PAGE 2
55 1 CloseTimer1(); //关闭定时器1 TR1=0;
56 1
57 1 HumiCounter=0; //初始化测量容器
58 1 TempCounter=0;
59 1 TH0=TL0=0;
60 1 MeasureTimer=0; //清空测量计数器
61 1
62 1 OpenHumiCounter(); //打开湿度计数器 EX0=1
63 1 OpenTempCounter(); //打开温度计数器 TR0=1
64 1 OpenTimer1(); //启动定时器1 TR1=1;开始测量
65 1
66 1
67 1 while(MeasureTimer<_MEASURE_ALARM); //等待时间到
68 1 CloseHumiCounter(); //关闭湿度计数器 EX0=0
69 1 CloseTempCounter(); //关闭温度计数器 TR0=0
70 1
71 1 TempCounter=TH0; //读取温度传感器数据
72 1 TempCounter<<=8;
73 1 TempCounter|=TL0;
74 1 //HumiCounter=HumiCounter; //读取湿度传感器数据
75 1 /*此处可以添加测试输出代码*/
76 1 #if(_SYS_TEST>0)
#if _LCM_TASK>0
OutputFrequency(TempCounter);
OutputFrequency(HumiCounter);
#endif
#endif
82 1
83 1 OpenScom(); //恢复通讯ES=1;
84 1 }
85
86 //#######################################################################################//
87 //#Function: SensorTaskRun()
88 //#Description: 系统传感器数据计算出真实的参数值Temperatrue:xx.0℃;Humidity:xx.0%RH
89 //#Input: 无
90 //#Output: 无
91 //#Return: 无 计算结果存放在两个8位容器中 xxInteger xxDecimal用作显示上传用;
92 //#Others: 文件级公共函数
93 //#######################################################################################//
94
95 void SensorTaskRun(void)
96 {
97 1 #if (_REAL_TIME_TEST<1)
98 1 if(SampleTimer>=_SAMPLE_ALARM)
99 1 #endif
100 1 {
101 2 MeasureCAE555();
102 2 /*将查表结果暂时存放到计数器中 不带符号位单位:0.1度*/
103 2 TempCounter=LocateRefValue(TempCounter,TempFoscGroup,_BLOCK_LENG);
104 2 //TempCounter=LocateRefValue(0,TempFoscGroup,_BLOCK_LENG);
105 2 HumiCounter=LocateRefValue(HumiCounter,HumiFoscGroup,_BLOCK_LENG);
106 2 /*此处可以添加测试输出代码*/
107 2 /* #if(_SYS_TEST>0) //此时显示的是查表后的结果
108 2 #if _LCM_TASK>0
109 2 OutputFrequency(TempCounter);
110 2 OutputFrequency(HumiCounter);
111 2 #endif
112 2 #endif
113 2 */
114 2 /*处理湿度 因其偏差为0所以直接表示为正数*/
115 2 HumiCounter&=_PLUS_BIT; //确定为正数
116 2 /*将实际测量值转移到温湿度单元+*/
C51 COMPILER V7.20 SENSORSERVICE 11/09/2002 21:11:17 PAGE 3
117 2 //HumiInteger=0x7f&(HumiCounter/_DECIMAL_BIT);
118 2 HumiInteger=HumiCounter/_DECIMAL_BIT;
119 2 HumiDecimal=HumiCounter%_DECIMAL_BIT;
120 2 /*处理温度 因其偏差为200所以根据处理结果确定正负*/
121 2 if(TempCounter>=_FLOOR_LIMIT) //Plus+
122 2 {
123 3 TempCounter=TempCounter-_FLOOR_LIMIT;
124 3 /*将实际测量值转移到温湿度单元*/
125 3 //TempInteger=0x7f&(TempCounter/_DECIMAL_BIT);
126 3 TempInteger=TempCounter/_DECIMAL_BIT;
127 3 TempDecimal=TempCounter%_DECIMAL_BIT; //x/_DECIMAL_BIT为小数
128 3 //TempCounter&=_PLUS_BIT;
129 3 }
130 2 else //Minus-
131 2 {
132 3 TempCounter=_FLOOR_LIMIT-TempCounter;
133 3 /*将实际测量值转移到温湿度单元*/
134 3 TempInteger=(uchar)(TempCounter/_DECIMAL_BIT);
135 3 TempInteger|=0x80;
136 3 TempDecimal=(uchar)(TempCounter%_DECIMAL_BIT); //x/10为小数
137 3 //TempCounter|=_MINUS_BIT;
138 3 }
139 2 /*此处可以添加测试输出代码*/
140 2 #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
151 2 }
152 1 }
153 #endif
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 220 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -