⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sensorservice.lst

📁 带时钟功能温度和湿度测量的仪器
💻 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 + -