📄 energadd.lst
字号:
C51 COMPILER V7.06 ENERGADD 11/24/2008 09:37:03 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE ENERGADD
OBJECT MODULE PLACED IN energadd.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE bottom\energadd.c LARGE OPTIMIZE(9,SIZE) BROWSE NOAREGS MODDP2 INCDIR(C:\DO
-CUMENTS AND SETTINGS\ADMINISTRATOR.LENOVO-80B42371\桌面\VANGO\程序\var\) DEBUG OBJECTEXTEND PRINT(.\energadd.lst) OBJECT
-(energadd.obj)
stmt level source
1 /*************************************************************************************
2
3 文件类型:
4 文件作用:能量计量
5 修改权限:
6 文件相关:
7
8 创 建 人:chenbo
9 创建日期:2007.06.04
10 当前版本:Ver0.1
11
12 版本信息:Ver0.1
13
14 **************************************************************************************/
15
16 #include "Tiger.h"
*** WARNING C318 IN LINE 16 OF bottom\energadd.c: can't open file 'Tiger.h'
17 #include "typemeter.h"
*** WARNING C318 IN LINE 17 OF bottom\energadd.c: can't open file 'typemeter.h'
18
19 extern void byte_x_bcd_addone(unsigned char *point,unsigned char num);
20
21 //=====================================================
22 //函数功能:初始化能量累加模块
23 //=====================================================
24 void int_energeadd(void)
25 { buffer_energ[0]=0;
*** ERROR C202 IN LINE 25 OF BOTTOM\ENERGADD.C: 'buffer_energ': undefined identifier
26 1 buffer_energ[1]=0;
*** ERROR C202 IN LINE 26 OF BOTTOM\ENERGADD.C: 'buffer_energ': undefined identifier
27 1 F_energeadd=0;
*** ERROR C202 IN LINE 27 OF BOTTOM\ENERGADD.C: 'F_energeadd': undefined identifier
28 1 }
29
30 //===========================================
31 //函数功能:3备份电量整数部分到EEPROM中
32 //
33 //===========================================
34
35 void stor_engthr(unsigned int stor_id)
36 { unsigned char i,num,datanum;
37 1 num=addr_from_coreID(1,stor_id);
38 1 for(i=0;i<num;i++)
39 1 { if((*ID_coretalbpoint[i]).stortype==EEPROM)
40 2 { data_addr.word[1]=(*ID_coretalbpoint[i]).dataaddr;
41 3 datanum=(*ID_coretalbpoint[i]).datalong;
42 3 Write_data(EEPROM,datanum);
43 3 }
44 2 }
45 1 }
46
47 //=================================================
48 //函数功能:在电量累加前对电量整数部分进行检测
C51 COMPILER V7.06 ENERGADD 11/24/2008 09:37:03 PAGE 2
49 //
50 //==================================================
51 void check_engint(unsigned int chk_id)
52 { unsigned char i,j,k,num,value,datanum;
53 1 Word32 recover_buff;
54 1 uint32 recoverdata[3];
55 1 value=0;
56 1 k=0;
57 1 num=addr_from_coreID(1,chk_id);
58 1 for(i=0;i<num;i++)
59 1 { if((*ID_coretalbpoint[i]).stortype==EEPROM)
60 2 { data_addr.word[1]=(*ID_coretalbpoint[i]).dataaddr;
61 3 datanum=(*ID_coretalbpoint[i]).datalong;
62 3 Read_data(EEPROM,datanum);
63 3 wr_buff[datanum]=0;
64 3 recover_buff.lword=0;
65 3 for(j=0;j<datanum-1;j++) //校验和判断
66 3 { wr_buff[datanum]+=wr_buff[j];
67 4 recover_buff.byte[j]=wr_buff[j]; //保存读出来的数据
68 4 }
69 3 recoverdata[k++]=recover_buff.lword;
70 3 if(wr_buff[datanum]==(wr_buff[datanum-1]-0x33)) //如果校验和正确
71 3 { if(check_X_bcd((datanum-1),wr_buff)==1) //BCD嘛校验
72 4 { value=1; //检测到合法数据,放在wr_buff中
73 5 break;
74 5 }
75 4 }
76 3 }
77 2 }
78 1 if(value==0) //EEPROM中恢复数据错误
79 1 { if(one_from_three(recoverdata)==1) //三中取二成功
80 2 { recover_buff.lword=recoverdata[0];
81 3 if(check_X_bcd(4,recover_buff.byte)==1) //BCD码校验正确
82 3 { for(j=0;j<datanum-1;j++)
83 4 { wr_buff[j]=recover_buff.byte[j]; //恢复合法数据
84 5 value=1;
85 5 }
86 4 }
87 3 }
88 2 if(value==0) //如果没有恢复合法数据,从零开始计量
89 2 { for(j=0;j<datanum-1;j++)
90 3 wr_buff[j]=0;
91 3 }
92 2 }
93 1
94 1 for(i=0;i<num;i++)
95 1 { if((*ID_coretalbpoint[i]).stortype==RAM)
96 2 { data_addr.word[1]=(*ID_coretalbpoint[i]).dataaddr;
97 3 datanum=(*ID_coretalbpoint[i]).datalong-1;
98 3 Write_data(RAM,datanum);
99 3 }
100 2 }
101 1 }
102
103 //====================================================
104 //函数功能:电量累加
105 //
106 //====================================================
107 void add_energe(unsigned int ID_code,unsigned char *point_cf,unsigned int chshu)
108 { unsigned char buff_check,i,num;
109 1 unsigned int temp_addr;
110 1 chshu=chshu/100;
C51 COMPILER V7.06 ENERGADD 11/24/2008 09:37:03 PAGE 3
111 1 if(*point_cf>=chshu) //能量累加
112 1 { num=(*point_cf)/chshu;
113 2 *point_cf=(*point_cf)%chshu;
114 2 check_engint(ID_code); //累加前对电量整数部分进行监测
115 2 addr_baseonIDandtype(RAM,ID_code);
116 2 temp_addr=(*ID_coretalbpoint[0]).dataaddr;
117 2 buff_check=ram[temp_addr+2];// +2
118 2 byte_x_bcd_addX(&ram[temp_addr],4,num); // 能量累加
119 2
120 2 // stor_doteng(temp_addr); //保存电量小数部分
121 2 // tt=ram[temp_addr+3];
122 2
123 2 if(ram[temp_addr+2]!=buff_check) //保存整数部分
124 2 { wr_buff[3]=0;
125 3 for(i=0;i<3;i++)
126 3 { wr_buff[i]=ram[temp_addr+i];
127 4 wr_buff[3]+=wr_buff[i];
128 4 }
129 3 stor_engthr(ID_code);
130 3 }
131 2 }
132 1 }
133
134 //======================================================
135 //函数功能:电量累加模块,完成对总电量、费率电量、失压失流电量的累加
136 //
137 //======================================================
138 void energ_addmode(void)
139 { unsigned int temp_int;
140 1 if(F_energeadd==1)
141 1 { F_energeadd=0;
142 2 //--------------------------获取脉冲常数
143 2 addr_baseonIDandtype(RAM,ID_CHANGSHU); //获取脉冲常数指针
144 2 data_addr.word[1]=(*ID_coretalbpoint[0]).dataaddr;
145 2 Read_data((*ID_coretalbpoint[0]).stortype,(*ID_coretalbpoint[0]).datalong);
146 2 temp_int=value_hex_from_2bcd(&wr_buff[1]);
147 2 if((temp_int>12800)||(temp_int<400)) //脉冲常数是否异常
148 2 temp_int=400; //按默认参数计算
149 2 //============================正向有功
150 2 add_energe(ID_POSENGSUM,&sumCF_Z,temp_int); //正向有功总能量累加
151 2 }
152 1 }
C51 COMPILATION COMPLETE. 2 WARNING(S), 3 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -