📄 search.lst
字号:
C51 COMPILER V7.20 SEARCH 11/09/2002 21:11:18 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE SEARCH
OBJECT MODULE PLACED IN Search.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SensorModule\Search.C BROWSE DEBUG OBJECTEXTEND PRINT(.\Search.lst) OBJECT(
-Search.obj)
line level source
1 /*############################################################
2 文件名称: Search.c
3 功能 : 查表确定特定频率代表的温度或者湿度.分别保留一位小数
4 创建人 : Houseivan
5 创建日期: 2005-03-17
6 修改人 : Houseivan
7 修改日期: 2005-03-17
8 ############################################################*/
9
10 #include"Includes.h"
11 #include<stdlib.h>
12
13 /*检测是否配置了传感器监控功能*/
14 #if _DETECT_TASK > 0
15
16 /*------------------------------------------------*/
17 /*Variants define*/
18 /*############################################################
19 VarName:TempFoscGroup[]
20 Popurse:存放温度频率计数据
21 Used By:查找算法函数调用
22 Other :
23 温度频率表:-20.0 ~ 80.0 ℃
24 将震荡频率调节在10KHZ左右
25 增长型 Temperature:2B如:-16。5℃
26 ############################################################*/
27 extern uint code TempFoscGroup[];
28 /*############################################################
29 VarName:HumiFoscGroup
30 Popurse:存放湿度频率计数据
31 Used By:查找算法函数调用
32 Other :
33 湿度频率表:RH:0 ~ 100 %
34 将震荡频率调节在10KHZ左右
35 衰减型 Humidity:2B 如:RH56.9%
36 ############################################################*/
37
38 extern uint code HumiFoscGroup[];
39
40 /*Function define*/
41 /*############################################################
42 FuncName: uint LocateRefValue(uint RefValue,uint Values[],uchar Size);
43 Discription:查找RefValue对应的地址
44 Input: 要查找的数据、目的数组首地址、数组大小
45 Return: 返回相应的地址整数和小数部分
46 Notice: 整数部分和符号位处于uint的高字节
47 小数部分则位于uint的低字节
48 只要定位到一个最小区间即可xi->[x1,x2]
49 ############################################################*/
50 uint LocateRefValue(uint RefValue,uint Values[],uchar Size)
51 {
52 1 uchar Integer,Decimal; //整数部分由整点值确定、小数部分有偏移量确定
53 1 uchar Head,Tail,Mid; //Head(小),Tail(大)作为指针
54 1 uint Temp;
C51 COMPILER V7.20 SEARCH 11/09/2002 21:11:18 PAGE 2
55 1 if(Values[0]<Values[Size-1]) //检测当前数据序列的单调性
56 1 {
57 2 /*表明这个序列是递增的序列:温度*/
58 2 Head=0;
59 2 Tail=Size-1;
60 2 if(RefValue<=Values[Head])
61 2 return _MIN_NUM;
62 2 if(RefValue>=Values[Tail])
63 2 return _MAX_NUM;
64 2 }
65 1 else
66 1 {
67 2 /*表明这是一个递减的数字序列:湿度*/
68 2 Head=Size-1;
69 2 Tail=0;
70 2 if(RefValue<=Values[Head])
71 2 return _MAX_NUM;
72 2 if(RefValue>=Values[Tail])
73 2 return _MIN_NUM;
74 2 }
75 1
76 1 while(1)
77 1 {
78 2 Mid=(Head+Tail)/2; //Mid>=Head
79 2 if(RefValue>=Values[Mid]) //说明落在(Mid,Tail)中
80 2 Head=Mid;
81 2 else //说明落在(Head,Mid)中
82 2 Tail=Mid;
83 2 if(abs(Tail-Head)<=1) //当首尾间隔为1或0时说明已经到了一个最小区间
84 2 break; //结束查找操作
85 2 }
86 1 if(Values[0]<Values[Size-1]) //检测当前数据序列的单调性
87 1 {
88 2 /*表明这个序列是递增的序列:温度*/
89 2 Integer=Head; //取出区间下限作为整数部分
90 2 }
91 1 else
92 1 {
93 2 Integer=Tail; //取出区间下限作为整数部分
94 2 }
95 1 Decimal=Values[Tail]-Values[Head]; //确定区间宽度SpWidth
96 1 Temp=(RefValue-Values[Head])
97 1 *_DECIMAL_BIT; //确定当前值对下限的偏移量Offset,10表示精确到小数点后一位
98 1 Decimal=Temp/Decimal; //确定小数点后第一位
99 1 Temp=Integer*10+Decimal; //将温度湿度全部用0.1的倍数来表示
100 1
101 1 return Temp;
102 1 }
103
104 /*---------------------------------------------------------*/
105 #endif
106
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 401 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 10
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
C51 COMPILER V7.20 SEARCH 11/09/2002 21:11:18 PAGE 3
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -