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

📄 e2promservice.lst

📁 带时钟功能温度和湿度测量的仪器
💻 LST
字号:
C51 COMPILER V7.20   E2PROMSERVICE                                                         11/09/2002 21:11:15 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE E2PROMSERVICE
OBJECT MODULE PLACED IN E2PROMService.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE StoreModule\E2PROMService.c BROWSE DEBUG OBJECTEXTEND PRINT(.\E2PROMService
                    -.lst) OBJECT(E2PROMService.obj)

line level    source

   1          /*
   2          文件名:  E2PROMService.c
   3          功能:    存储器服务函数实现
   4          单位:    浙江工商大学-信电学院
   5          创建日期:2004-09-24
   6          创建人:  Houseivan
   7          修改人:  Houseivan
   8          修改日期:2005-03-11
   9          */
  10          #include"Includes.h"
  11          #if _E2PROM_TASK>0
  12          
  13          #if _SYS_INTERRUPT>0
  14                  extern  uchar data MeasureTimer;                        //测量用定时器1s=50x20ms
  15                  extern  uchar data SampleTimer;                         //系统数据刷新定时器1min=60x1s
  16                  extern  uchar data StoreTimer;                          //存储采样定时器1Hour=60x1min
  17                  extern  bit                WorkMode;                            //根据登陆成功与否确定站点工作的模式
  18          #endif
  19                  extern uchar data TempInteger;                          //温度值整数和符号字节
  20                  extern uchar data TempDecimal;                          //温度值小数位字节
  21                  extern uchar data HumiInteger;                          //湿度值整数和符号字节
  22                  extern uchar data HumiDecimal;                          //湿度值小数位字节
  23                  extern uchar data UartRecBuf[];                         //串行通讯缓冲
  24                  extern uchar data ClkLcmBuf[];                          //显示时钟存储器操作缓冲
  25                  extern uchar data CurRecNum;                            //记录计数器 循环队列形式
  26                  extern uchar data SlaveAddr;                            //本地主机地址
  27                  extern uchar data MasterAddr;                           //远程主机地址
  28          /*------------------------------------------------*/
  29          /*
  30          名称: Write24C02
  31          功能: 对24C02进行写操作
  32          注意:  
  33          */
  34          void  Write24C02(uchar param)
  35          {
  36   1           uchar len=0;
  37   1           IIC_clk=0;
  38   1           for(len=0;len<8;len++)
  39   1               {  IIC_clk=0;
  40   2                  IIC_dat=((param & 0x80)==0x80);
  41   2                  param<<=1;
  42   2                      IIC_clk=1;
  43   2               }
  44   1               IIC_clk=0;
  45   1               IIC_clk=1;
  46   1               while(IIC_dat);       //wait ACK
  47   1               IIC_clk=0;
  48   1               DelayTime(1,3);       //_nop_;_nop_;
  49   1      }
  50          /*------------------------------------------------*/
  51          /*
  52          名称: Read24C02
  53          功能: 对24C02进行读操作
  54          注意:  
C51 COMPILER V7.20   E2PROMSERVICE                                                         11/09/2002 21:11:15 PAGE 2   

  55          */
  56          uchar Read24C02(void)
  57          {
  58   1           uchar param=0;
  59   1           uchar len=0;
  60   1           bit cbit=0;
  61   1           IIC_clk=0;
  62   1           for(len=0;len<8;len++)
  63   1               {  IIC_clk=0;
  64   2                  DelayTime(1,3);
  65   2              IIC_clk=1;
  66   2                      param<<=1;
  67   2                  cbit=IIC_dat;
  68   2                      if (cbit)
  69   2                  param+=1;
  70   2               }
  71   1               IIC_clk=0;            
  72   1           DelayTime(1,3);//_nop_;_nop_
  73   1           IIC_dat=1;     //释放总线
  74   1               DelayTime(1,3);//_nop_;_nop_
  75   1               IIC_clk=1;
  76   1               DelayTime(1,3);//_nop_;_nop_;
  77   1      return param;
  78   1      }
  79          /*------------------------------------------------*/
  80          /*
  81          名称: StartSign
  82          功能: 操作开始标志
  83          注意:  
  84          */
  85          void StartSign()
  86          {
  87   1           IIC_clk=0;  //dat:1 1 0 1 1 0 ... 0 1 1
  88   1           DelayTime(1,3);
  89   1           IIC_dat=1;  //clk:0 1 1 0 1 0 ... 0 1 0
  90   1           DelayTime(1,3);
  91   1           IIC_clk=1;
  92   1           DelayTime(1,3);
  93   1               IIC_dat=0;
  94   1           DelayTime(1,3);
  95   1           IIC_clk=0;
  96   1      }
  97          /*------------------------------------------------*/
  98          /*
  99          名称: StopSign
 100          功能: 操作终止标志
 101          注意:  
 102          */
 103          void StopSign()
 104          {
 105   1           IIC_clk=0;
 106   1           DelayTime(1,3);//_nop_;_nop_;
 107   1           IIC_dat=0;//generate a stop sign
 108   1           DelayTime(1,3);//_nop_;_nop_;
 109   1           IIC_clk=1;
 110   1           DelayTime(1,3);//_nop_;_nop_;
 111   1               IIC_dat=1;
 112   1           DelayTime(1,3);//_nop_;_nop_;
 113   1           IIC_clk=0;
 114   1      }
 115          /*------------------------------------------------*/
 116          /*
C51 COMPILER V7.20   E2PROMSERVICE                                                         11/09/2002 21:11:15 PAGE 3   

 117          名称: WriteOneChar
 118          功能: 向存储器写入一个字节数据
 119          注意:  
 120          */
 121          void WriteOneChar(uchar addr,uchar sdata)
 122          {
 123   1           StartSign();
 124   1           Write24C02(_WR_CMD);
 125   1               Write24C02(addr);
 126   1               Write24C02(sdata);
 127   1               StopSign();
 128   1           DelayTime(1,50000);
 129   1      }
 130          /*------------------------------------------------*/
 131          /*
 132          名称: ReadOneChar
 133          功能: 从24C02读出一个字节的数据
 134          注意:  
 135          */
 136          uchar ReadOneChar(uchar addr)
 137          {
 138   1           uchar sdata=0;
 139   1           StartSign();
 140   1           Write24C02(_WR_CMD);   //模拟写操作 制造假象
 141   1           Write24C02(addr);
 142   1           StartSign();
 143   1           Write24C02(_RD_CMD);
 144   1           sdata=Read24C02();
 145   1           StopSign();
 146   1           DelayTime(1,50000);
 147   1           return sdata;
 148   1      }
 149          /*------------------------------------------------*/
 150          /*
 151          名称: ReadOneRecord
 152          功能: 从存储器中取出一条记录
 153          注意: 
 154          */
 155          
 156          void ReadOneRecord(uchar *Buf,uchar nNum)
 157          {
 158   1              uchar nCount,nTemp;
 159   1      
 160   1              nTemp= (nNum-1)*_REC_SIZE+16;
 161   1              for(nCount=0;nCount<_REC_SIZE;nCount++)
 162   1                      Buf[nCount]= ReadOneChar(nTemp+nCount);
 163   1      }
 164          /*------------------------------------------------*/
 165          /*
 166          名称: WriteOneRecord
 167          功能: 从存储器中取出一条记录
 168          注意: 
 169          */
 170          void    WriteOneRecord(uchar *Buf,uchar nNum)
 171          {
 172   1              uchar nCount,nTemp;
 173   1      
 174   1              nTemp= (nNum-1)*_REC_SIZE+16;
 175   1              for(nCount=0;nCount<_REC_SIZE;nCount++)
 176   1                      WriteOneChar(nTemp+nCount,Buf[nCount]);
 177   1      }
 178          /*------------------------------------------------*/
C51 COMPILER V7.20   E2PROMSERVICE                                                         11/09/2002 21:11:15 PAGE 4   

 179          /*
 180          名称: StoreTaskRun
 181          功能: 执行数据存储任务
 182          注意: 
 183          */
 184          /*
 185          注意:  秒   分   时   周   日    月    年
 186                 0    2    4     6    7     8     9
 187          */
 188          void    StoreTaskRun(void)
 189          {   
 190   1              if(StoreTimer>=_STORE_ALARM)
 191   1              {
 192   2                      #if     _DETECT_TASK>0              
 193   2                              SensorTaskRun();
 194   2                      #endif
 195   2                      #if _CLOCK_TASK >0
 196   2                              ReadClock(ClkLcmBuf);           //获取当前时钟
 197   2                      #endif
 198   2                      CloseScom();
 199   2                      UartRecBuf[0]=TempInteger;
 200   2                      UartRecBuf[1]=TempDecimal;
 201   2                      UartRecBuf[2]=HumiInteger;
 202   2                      UartRecBuf[3]=HumiDecimal;
 203   2                      UartRecBuf[4]=ClkLcmBuf[_ID_YEAR];
 204   2                      UartRecBuf[5]=ClkLcmBuf[_ID_MONTH];
 205   2                      UartRecBuf[6]=ClkLcmBuf[_ID_DAY];
 206   2                      UartRecBuf[7]=ClkLcmBuf[_ID_HOUR];
 207   2                      UartRecBuf[8]=ClkLcmBuf[_ID_MINUTE];
 208   2                      UartRecBuf[9]=ClkLcmBuf[_ID_SECOND];
 209   2                      if(WorkMode==_SITE_MODE)                                        //存储到24C02
 210   2                      {
 211   3                              WriteOneRecord(UartRecBuf,++CurRecNum);
 212   3                              CurRecNum=CurRecNum%(_MAX_REC_NUM+1);
 213   3                              WriteOneChar(_CUR_REC_ADDR,CurRecNum);  //同步更新计数器单元    
 214   3                      }
 215   2                      OpenScom();
 216   2              }       
 217   1      }
 218          /*------------------------------------------------*/
 219          #endif


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    522    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      16
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -