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

📄 main.lst

📁 电能表源码
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.06   MAIN                                                                  11/24/2008 09:37:01 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c LARGE OPTIMIZE(9,SIZE) BROWSE NOAREGS MODDP2 INCDIR(C:\DOCUMENTS AND
                    - SETTINGS\ADMINISTRATOR.LENOVO-80B42371\桌面\VANGO\程序\var\) DEBUG OBJECTEXTEND

stmt level    source

   1          /*************************************************************************************
   2          
   3                  文件类型:
   4                  文件作用:
   5                  修改权限:
   6                  文件相关:
   7                  
   8                  创 建 人:GeminiKQ
   9                  创建日期:2006.12.20
  10                  当前版本:Ver0.1
  11                  
  12                  版本信息:Ver0.1                                        GeminiKQ
  13          
  14          **************************************************************************************/
  15          #define MAIN
  16          
  17          #include "Tiger.h"
*** WARNING C318 IN LINE 17 OF main.c: can't open file 'Tiger.h'
  18          #include "typemeter.h"
*** WARNING C318 IN LINE 18 OF main.c: can't open file 'typemeter.h'
  19          
  20          
  21          //==================================================================
  22          //系统默认较表参数
  23          //==================================================================
  24          unsigned long code meterprm_table[]=
  25           { 0x00000000,                                // 有功门限高
  26             0xF2ED9618,                                // 有功门限低
  27             0x00000000,                                // 有效值门限高
  28             0x00654FD6,                                // 有效值门限低
  29             0xffffffff,                                // 启动门限值高
  30             0xffffffff,                                // 启动门限值低
  31             0x010CA23A,                                // IA有效值比差
  32             0x01609618,                                // IB有效值比差
  33             0x00000000,                                // LA有效值比差
  34             0x00000000,                                // LB有效值比差
  35             0x00000000,                                // M有效值比差
  36             0x00000000,                                // M有效值比差
  37             0x00000000,                                // M有效值比差
  38             0xFCCD0213,                                // PA比差
  39             0xF37D0381,                                // PB比差
  40             0xF4DB1D71                                 // 电压比差
  41           };
  42          
  43          //=========================================================================
  44          //函数功能:通过入口ID号恢复各参数项  (数据存放在EEPROM中)
  45          //入口参数:ID号
  46          //返回参数:1:成功,0:失败    数据放在wr_buff中
  47          //=========================================================================
  48          unsigned char recover_item(unsigned int chk_id)
  49          { unsigned char i,j,num,value,datanum;
  50   1        value=0;
  51   1        num=addr_from_coreID(1,chk_id);                                       // 数据个数
*** WARNING C206 IN LINE 51 OF MAIN.C: 'addr_from_coreID': missing function-prototype
C51 COMPILER V7.06   MAIN                                                                  11/24/2008 09:37:01 PAGE 2   

*** ERROR C267 IN LINE 51 OF MAIN.C: 'addr_from_coreID': requires ANSI-style prototype
  52   1        for(i=0;i<num;i++)
  53   1           { if((*ID_coretalbpoint[i]).stortype==EEPROM) // EEP中
*** ERROR C202 IN LINE 53 OF MAIN.C: 'ID_coretalbpoint': undefined identifier
  54   2                    {  data_addr.word[1]=(*ID_coretalbpoint[i]).dataaddr;  // 取地址
*** ERROR C202 IN LINE 54 OF MAIN.C: 'data_addr': undefined identifier
  55   3                           datanum=(*ID_coretalbpoint[i]).datalong;                   // 要读的数据个数
*** ERROR C202 IN LINE 55 OF MAIN.C: 'ID_coretalbpoint': undefined identifier
  56   3                           Read_data(EEPROM,datanum);                                                 // 读函数
*** ERROR C202 IN LINE 56 OF MAIN.C: 'EEPROM': undefined identifier
  57   3                               wr_buff[datanum]=0;                                                    // 读出的数据放在wr_buff[0]--wr_buff[datanum-1]中       
*** ERROR C202 IN LINE 57 OF MAIN.C: 'wr_buff': undefined identifier
  58   3                               for(j=0;j<datanum-1;j++)                            //校验和判断
  59   3                                   { wr_buff[datanum]+=wr_buff[j];
*** ERROR C202 IN LINE 59 OF MAIN.C: 'wr_buff': undefined identifier
  60   4                                       }
  61   3                   if(wr_buff[datanum]==(wr_buff[datanum-1]-0x33))      //  如果校验和正确
*** ERROR C202 IN LINE 61 OF MAIN.C: 'wr_buff': undefined identifier
  62   3                                   {  if((*ID_coretalbpoint[i]).datatype==BCD)
*** ERROR C202 IN LINE 62 OF MAIN.C: 'ID_coretalbpoint': undefined identifier
  63   4                                              { if(check_X_bcd((datanum-1),wr_buff)==1)     //BCD嘛校验
  64   5                                                   { value=1;                               //检测到合法数据,放在wr_buff中
  65   6                                                     break;
  66   6                                                   }
  67   5                                                  }
  68   4                           else
  69   4                              { value=1;                                  //检测到合法数据,放在wr_buff中
  70   5                                                break;
  71   5                              }
  72   4                                       }
  73   3                    } 
  74   2               }
  75   1      
  76   1       return value;
  77   1      }
  78          
  79          //================================================================
  80          // 函数功能:从EEPROM中恢复meterprm_table[]表参数
  81          //      如果恢复成功则返回,不成功,则加载meterprm_table[]表
  82          //================================================================
  83          void Recover_meter(void)
  84          { uint8 i;
  85   1        Word32 read_buff;
  86   1        for(i=0;i<16;i++)
  87   1           { if(recover_item(0x8500+i)==1)                      // 恢复系统参数正确(见meterprm_table[]表)
  88   2                    { read_buff.lword=ReadMeterPara(i+18);
  89   3                  if(compare_x_byte(&read_buff.byte[0],wr_buff,4)==1)      //与寄存器中参数比较,不同则写参数
  90   3                      {  read_buff.lword=Longdate_from_xbcd(wr_buff,4);
  91   4                                     SetMeterCfg(read_buff.lword,(18+i));
  92   4                              }
  93   3                        }
  94   2                 else                                                          //恢复参数失败
  95   2                 { read_buff.lword=ReadMeterPara(i+18);
  96   3                           if(read_buff.lword!=meterprm_table[i])                  //与寄存器中参数比较,不同则写参数
  97   3                          { read_buff.lword=meterprm_table[i];
  98   4                                    SetMeterCfg(read_buff.lword,(18+i));
  99   4                                  }
 100   3                         }
 101   2               }
 102   1      }
 103          
 104          
C51 COMPILER V7.06   MAIN                                                                  11/24/2008 09:37:01 PAGE 3   

 105          
 106          //==========================================
 107          // 函数功能:禁止所有IO口的输入输出
 108          //==========================================
 109          void port_init(void)
 110          {
 111   1      //   P1OE &= ~BIT0;
 112   1      //   P10FS = 0x01;   //select second pluss output
 113   1      
 114   1           P0OE = 0;
 115   1           P1OE = 0;
 116   1               P2OE = 0;
 117   1               P3OE = 0xff;
 118   1               P4OE = 0xff;
 119   1               P5OE = 0xff;
 120   1               P6OE = 0xff;
 121   1      
 122   1               P0IE = 0;
 123   1               P1IE = 0;
 124   1               P2IE = 0;
 125   1               P3IE = 0;
 126   1               P4IE = 0;
 127   1               P5IE = 0;
 128   1               P6IE = 0;
 129   1      }
 130          
 131          
 132          
 133          //=================================================
 134          // 函数功能: 初始化Timer0
 135          //
 136          //=================================================
 137          void Init_Timer0(void)
 138          {       
 139   1              TMOD = 0x01;         // 工作在模式1
 140   1              CKCON|=0x08;         // clk/4 
 141   1          TL0  = 0xff;         // 10ms
 142   1          TH0  = 0xdf;
 143   1          TR0 = 1;                 // 开定时器0
 144   1              SetInterrupt(1);     // 打开中断
 145   1          
 146   1      }
 147          
 148          
 149          //===========================================================
 150          // 函数功能:初始化模拟部分
 151          //
 152          //===========================================================
 153          void Inti_anlmode(void)
 154          {  SetADC(1,8);                 //A通道电流,采用8倍增益
 155   1         SetADC(2,8);                 //B通道电流,采用8倍增益
 156   1         SetADC(3,8);                 //电压通道,采用8倍增益
 157   1         SetMChannel(0,0);            //关m通道
 158   1         SetFrq(1);                   //60hz
 159   1      }
 160          
 161          //===============================================
 162          // 函数功能:初始化计量系统
 163          //
 164          //===============================================
 165          void Inti_metermode(void)
 166          { 
C51 COMPILER V7.06   MAIN                                                                  11/24/2008 09:37:01 PAGE 4   

 167   1         Inti_anlmode();                // AD增益
 168   1         SetMeterFunc(0x80);            // 关闭所有计量通道,关CF输出,开启启动潜动功能
 169   1         SetMeterCfg(0xffffffff,22);    //潜动门限高位
 170   1         SetMeterCfg(0xffffffff,23);    //潜动门限低位
 171   1         InitMeter();                   //初始化计量电路
 172   1         Recover_meter();               //恢复校表参数
 173   1         SetMeterFunc(0x8f);             //开启电压和A通道计量,A通道输出,能量输出模式
 174   1         count_opencftime=3;            //CF延时3妙打开 
 175   1      }
 176          
 177          //==========================================
 178          // 函数功能:系统初始化,
 179          // 备注:初始化模拟部分和数字部分寄存器
 180          //===========================================
 181          void Init_System(void)
 182          {  battest=0;                                   // 清电池欠压标志
 183   1      //    SetPLL(1);        
 184   1         port_init();                 // 初始化io口
 185   1         SetXRam(0);                  // 开启对XRAM的写保护
 186   1      //   Init_eeprom();             // 初始化EEPROM      上电误操作
 187   1         Init_Timer0();
 188   1         Inti_metermode();
 189   1         OpenPDT();                   // 打开调电检测功能
 190   1      }
 191          
 192          
 193          //======================================================
 194          // 函数功能:复位计量模块
 195          //
 196          //======================================================

⌨️ 快捷键说明

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