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

📄 leakage.lst

📁 基于 PLC935单片机的三相漏电检测系统
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.05a   LEAKAGE                                                              11/26/2007 12:52:43 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE LEAKAGE
OBJECT MODULE PLACED IN leakage.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE leakage.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //--------------------------------------------------------------
   2          //这是个电力线路电压/电流/漏电检测告警系统
   3          //--------------------------------------------------------------
   4          //系统CPU:   LPC935
   5          //文件名:   leakage.c
   6          //版本:      rev 1.0
   7          //日期:      2007-9-1
   8          //描述:
   9          //-------------------------------------------------------------
  10          //修改人:
  11          //日期:
  12          //描述:                                                                             
  13          //-------------------------------------------------------------
  14          
  15          #include<reg935.h>
  16          #include<absacc.h>
  17          #include<intrins.h>
  18          #include<UserDef.h>
  19          
  20          sbit powerSwitchControl = P0^5;
  21          sbit workIndication     = P2^0;
  22          sbit light              = P1^4 ;
  23          sbit lightControl       = P1^6 ; 
  24          
  25          
  26          uchar bdata flagReg;
  27          sbit initFlag               = flagReg^0;
  28          sbit writeEEPROMBufFullFlag = flagReg^1;        //EEPROM写满标志
  29          sbit leakageCurrentAlarm    = flagReg^2;    //漏电报警标志
  30          sbit sampleTimeFlag         = flagReg^3;        //采样时间
  31          sbit curTransErrFlag        = flagReg^4;        //
  32          sbit batTransErrFlag        = flagReg^5;        //
  33          sbit allDataTransErrFlag    = flagReg^6;        //
  34          sbit recErrorFlag           = flagReg^7;        //
  35          
  36          uchar bdata rdDataFlagReg;
  37          sbit timeVerifyFlag      = rdDataFlagReg^0;     //
  38          sbit rdCurDataFlag       = rdDataFlagReg^1;             //
  39          sbit rdBatDataFlag       = rdDataFlagReg^2;             //
  40          sbit rdAllDataFlag       = rdDataFlagReg^3;             //
  41          
  42          sbit delaySwitchFlag = rdDataFlagReg^4;     //延时关闸刀
  43          
  44          //uchar data recClrCommandData[2];                      //暂存清存储器的起始地址[0]=高位[1]=低位
  45          uchar data recPresetData[4];                            //暂存预置信息, [0]--消控类型,[1]--漏电流阈值,[2]--延时小时数,[3]--延时
             -分钟数
  46          uint data  delayTime;
  47          
  48          extern uint idata delayCount;
  49          
  50          uchar data recRdBatDataSize[2];                     //暂存读的批量数,最大512 批次,[0]--高位;[1]--低位
  51          
  52          uchar data recStatus, recDataSize, recCommandBuf, recChkSum;
  53          uchar data recDataCnt;
  54          
C51 COMPILER V8.05a   LEAKAGE                                                              11/26/2007 12:52:43 PAGE 2   

  55          //发送数据缓冲器, [0]=address [1]=command [2]=size [3..(3+size-1)]=data(0)..data(size-1)
  56          uchar xdata transDataBuf[EEPROM_PAGE_SIZE+3];//EEPROM_PAGE_SIZE = 128
  57          uchar data  transDataSize, transCheckSum;
  58          uchar data  transDataPtr;
  59          
  60          uchar xdata writeEEPROMBuf[EEPROM_PAGE_SIZE];
  61          uchar data  wrEEPROMBufPtr;
  62          
  63          uint data EEPROMWrAddr = EEPROM_ORG_ADDR;    //写EEPROM 地址指针
  64          uint data EEPROMRdAddr = EEPROM_ORG_ADDR;    //读EEPROM 地址指针
  65          
  66          
  67          extern uchar data recCurrentTimeBuf[7];      //暂存当前时间缓冲器[0]=世纪[1]=年[2]=月[3]=日[4]=时[5]=分[6]
             -=秒
  68          
  69          extern uchar data lineVolt[3];                       //[0] 保存A 相电压,[1] 保存B 相电压 ,[2] 保存C 相电压
  70          extern uchar data lineCurrent[3];                        //[0] 保存A 相电流,[1] 保存B 相电流 ,[2] 保存C 相电流
  71          
  72          extern uchar data leakageCurrentMsg[3];          //漏电信息
  73          /*漏电信息
  74          [0]--漏电情况,1: 有漏电;     0: 无漏电
  75          [1]--漏电电流值
  76          [2]--漏电线路,1: 表示A相漏电;2: 表示B相漏电; 3:表示C相漏电
  77          */
  78          
  79          uchar idata delaySwitchOrgCnt[3];
  80          uchar idata delaySwitchEndCnt[3];
  81          
  82          void  Delay(uchar);
  83          void  Lpc935Init(void);
  84          uchar ReadID(void);
  85          void  ByteTransBuf(uchar, uchar);
  86          void  PageTransBuf(uchar);
  87          void  WriteI2CBufData(void);
  88          void  SampleLeakageCurrent(void);
  89          extern void ReadEEPROMByte(uchar, uchar, uchar*);
  90          extern void EEPROMWriteByte(uchar, uchar, uchar*);
  91          extern void ADConvert(void);
  92          
  93          extern void GetBus(void);
  94          extern void SendByte(uchar);
  95          extern bit  ISendStr(uchar, uint , uchar*, uchar);
  96          extern bit  IRcvStr(uchar, uint, uchar *, uchar);
  97          
  98          //---------------------------------------------------------------------------
  99          //函数名称:main(void)
 100          //功能描述:主函数
 101          //输入:无
 102          //输出:无
 103          //---------------------------------------------------------------------------
 104          main(void)
 105          {
 106   1              Lpc935Init();   
 107   1      
 108   1              Delay(200);                                          //延时200ms
 109   1      
 110   1          lightControl = 1;
 111   1      
 112   1              flagReg = 0;
 113   1              rdDataFlagReg = 0;
 114   1      
 115   1              recStatus = INIT_STAT;                          //
C51 COMPILER V8.05a   LEAKAGE                                                              11/26/2007 12:52:43 PAGE 3   

 116   1      
 117   1          //wrEEPROMBufPtr = writeEEPROMBuf;
 118   1      
 119   1              ReadEEPROMByte(EEPROM_ALARM_TYPE_ORG_ADDR, 4, recPresetData);    //读取漏电保护类型
 120   1      
 121   1              ReadEEPROMByte(EEPROM_TIME_ADDR, 7, recCurrentTimeBuf);               //读取已存的时间
 122   1      
 123   1              delayTime = recPresetData[2];           //高位字节传送
 124   1              delayTime = delayTime<<8; 
 125   1              delayTime = recPresetData[3];           //低位字节传送  
 126   1      
 127   1              while(1)
 128   1          {           
 129   2                  recPresetData[1] = 0x9B ;
 130   2                      if(initFlag)
 131   2                      {
 132   3                              EA = 0;
 133   3                              
 134   3                              EEPROMWriteByte(EEPROM_ALARM_TYPE_ORG_ADDR, 4, recPresetData);
 135   3                              
 136   3                              EA = 1;
 137   3                              initFlag = FALSE;
 138   3                      }
 139   2      
 140   2                      else if(timeVerifyFlag)
 141   2                               {
 142   3                                  EA = 0;                         //中断禁止
 143   3                              
 144   3                                  EEPROMWriteByte(EEPROM_CUR_TIME_ORG_ADDR, 7, recCurrentTimeBuf);
 145   3                              
 146   3                                  EA = 1;                         //打开中断
 147   3                                  timeVerifyFlag = FALSE;
 148   3                               }
 149   2      
 150   2                      else if(rdCurDataFlag)
 151   2                               {
 152   3                                  ByteTransBuf(COM_RD_CUR_DATA, 16);
 153   3                                  SBUF =  SYNC;
 154   3                                  transCheckSum = SYNC;
 155   3                                  if(!curTransErrFlag)
 156   3                                        rdCurDataFlag = FALSE;
 157   3                                  else
 158   3                                        rdCurDataFlag = TRUE;
 159   3                               }
 160   2      
 161   2                      else if(rdBatDataFlag)
 162   2                               {
 163   3                                  if(EEPROMRdAddr==EEPROMWrAddr)
 164   3                                      {
 165   4                                         rdBatDataFlag = FALSE;
 166   4                                      }
 167   3                                  else
 168   3                                      {
 169   4                                         if(!batTransErrFlag)
 170   4                                         {
 171   5                                                PageTransBuf(COM_RD_BATCH_DATA);
 172   5                                                SBUF =  SYNC;
 173   5                                        transCheckSum = SYNC;
 174   5                                              }
 175   4                                          else
 176   4                                              {
 177   5                                                 EEPROMRdAddr = EEPROMRdAddr - 128;
C51 COMPILER V8.05a   LEAKAGE                                                              11/26/2007 12:52:43 PAGE 4   

 178   5                                                 PageTransBuf(COM_RD_BATCH_DATA);
 179   5                                                 SBUF =  SYNC;
 180   5                                         transCheckSum = SYNC;
 181   5                                                 batTransErrFlag = FALSE;
 182   5                                              }
 183   4                                      }
 184   3      
 185   3                                }
 186   2      
 187   2                      else if(rdAllDataFlag)
 188   2                              {
 189   3                                 if(EEPROMRdAddr==EEPROMWrAddr)
 190   3                                 {
 191   4                                         rdAllDataFlag = FALSE;
 192   4                                 }
 193   3                                 else
 194   3                                 {
 195   4                                        if(!allDataTransErrFlag)
 196   4                                        {
 197   5                                               PageTransBuf(COM_RD_ALL_DATA);
 198   5                                               SBUF =  SYNC;
 199   5                                       transCheckSum = SYNC;
 200   5                                        }
 201   4                                        else
 202   4                                        {
 203   5                                               EEPROMRdAddr = EEPROMRdAddr - 128;
 204   5                                               PageTransBuf(COM_RD_ALL_DATA);
 205   5                                               SBUF =  SYNC;
 206   5                                       transCheckSum = SYNC;
 207   5                                               allDataTransErrFlag = FALSE;
 208   5                                        }
 209   4                                 }
 210   3                              }
 211   2      
 212   2                      else if(recErrorFlag)
 213   2                               {
 214   3                                  transDataBuf[0] = ReadID();
 215   3                                  transDataBuf[1] = recCommandBuf|0x80;
 216   3                                  transDataBuf[2] = 0;
 217   3      
 218   3                                  SBUF =  SYNC;
 219   3                                  transCheckSum = SYNC;
 220   3      
 221   3                                  recErrorFlag = FALSE;
 222   3                               }
 223   2      
 224   2                      else if(delaySwitchFlag)
 225   2                               {
 226   3                                  if(delayCount==delayTime)
 227   3                                      {
 228   4                                         powerSwitchControl = OPEN_SWITCH;        //断开闸刀
 229   4                                      }
 230   3                                  else if(delayCount>=(delayTime+1))
 231   3                                           {
 232   4                                              powerSwitchControl = CLOSE_SWITCH;  //取消闸刀控制
 233   4                                              delaySwitchFlag = FALSE;
 234   4                                           }
 235   3      
 236   3                                       else
 237   3                                           {
 238   4                                               powerSwitchControl = CLOSE_SWITCH; //不切断闸刀
 239   4                                           }
C51 COMPILER V8.05a   LEAKAGE                                                              11/26/2007 12:52:43 PAGE 5   

 240   3      
 241   3                                }
 242   2      
 243   2                      else if(sampleTimeFlag)
 244   2                               {
 245   3                                  EA = 0;
 246   3                                      
 247   3                                  ADConvert();        
 248   3      
 249   3                                  WriteI2CBufData();
 250   3      
 251   3                                  EA = 1;
 252   3                                                                                                                                                                

⌨️ 快捷键说明

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