biaogai_duanliu.lst
来自「电能表源码」· LST 代码 · 共 268 行
LST
268 行
C51 COMPILER V7.50 BIAOGAI_DUANLIU 05/26/2008 08:17:35 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE BIAOGAI_DUANLIU
OBJECT MODULE PLACED IN biaogai_duanliu.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE bottom\biaogai_duanliu.c LARGE OPTIMIZE(9,SIZE) BROWSE NOAREGS MODDP2 INCDI
-R(E:\work\tiger D test\程序\var\) DEBUG OBJECTEXTEND PRINT(.\biaogai_duanliu.lst) OBJECT(biaogai_duanliu.obj)
line level source
1 /*************************************************************************************
2
3 文件类型:防窃电和启动潜动模块
4 文件作用:
5 修改权限:
6 文件相关:
7
8 创 建 人:chenbo
9 创建日期:2007.11.21
10 当前版本:Ver1.0
11
12 **************************************************************************************/
13 #include "Tiger.h"
14 #include "typemeter.h"
15
16
17 /*
18 //================================================
19 //函数功能:初始化端钮盖、表盖停电期间报警模块
20 //
21 //================================================
22 void ini_tindianBGDN(void)
23 { unsigned char i;
24 flag_BGsta。byte=0;
25 flag_BGsta。byte=0;
26 for(i=0;i<64;i++)
27 {ram_BGDN[i]=IAP_FLASH_ByteRead(FL_lasteng+420+i);
28 }
29 }
30 */
31
32 //==================================================
33 //函数功能:初始化防窃电和潜动模块
34 //==================================================
35 void int_kaiqi(void)
36 { sta_biaogai=0;
37 1 sta_checkbiaogai=0;
38 1 sta_duanliu=0;
39 1 sta_checkduanliu=0;
40 1
41 1 time_biaogai=0;
42 1 time_duanliu=0;
43 1
44 1 type_kaiqi=0xff;
45 1 type_kaiqievent=idle_qiedian;
46 1
47 1 F_askerashistdata=0;
48 1 flag_biaogai_duanliu=0;
49 1
50 1
51 1 time_qiandong=0;
52 1 flag_losetenvt_sec=0;
53 1 flag_type=0;
54 1
C51 COMPILER V7.50 BIAOGAI_DUANLIU 05/26/2008 08:17:35 PAGE 2
55 1 // Disenable_BGkeyout //表盖,端钮盖检测IO口输出禁止
56 1 // Disenable_DNkeyout
57 1
58 1 // Enable_BGkeyin //输入使能
59 1 // Enable_DNkeyin
60 1
61 1 }
62
63
64
65 //=====================================================================
66 //函数功能:恢复数据,并保存事件开始时间及事件总次数
67 //
68 //=====================================================================
69 void recover_biaogaiduanliu_eng(void)
70 {
71 1 unsigned char i;
72 1 //===========================================================================开启事件数据恢复
73 1 if(type_kaiqi==1) //端钮盖开启
74 1 {if(copy_flash(FL_wrbuffer+420,FL_lasteng+420,30)==0) //拷贝出错
75 2 { if(Ferr_histdata==flash_ok) //页没有损坏
76 3 copy_flash(FL_wrbuffer+420,FL_lasteng+420,30); //再存一次
77 3 }
78 2 }
79 1 else //表盖开启
80 1 { if(copy_flash(FL_wrbuffer+450,FL_lasteng+450,30)==0) //拷贝出错
81 2 {if(Ferr_histdata==flash_ok) //页没有损坏
82 3 copy_flash(FL_wrbuffer+450,FL_lasteng+450,30);
83 3 }
84 2 }
85 1 //---------------------------------------------------------------------------结束
86 1
87 1 //========================================================保存窃电事件的开始时间
88 1 wr_buff[0]=RTCTIME.rYear; //窃电开始时间
89 1 wr_buff[1]=RTCTIME.rMonth;
90 1 wr_buff[2]=RTCTIME.rDate;
91 1 wr_buff[3]=RTCTIME.rHour;
92 1 wr_buff[4]=RTCTIME.rMinute;
93 1 data_addr.word[1]=FL_lasteng+420+type_kaiqi*30;
94 1 Write_data(FLASH,5); //保存开始时间
95 1 //--------------------------------------------------------------------结束
96 1
97 1
98 1 //========================================================相应开启次数累加
99 1 data_addr.word[1]=FL_wrbuffer+480;
100 1 Read_data(FLASH,4);
101 1 for(i=0;i<4;i++)
102 1 { if(wr_buff[i]==0xff)
103 2 wr_buff[i]=0;
104 2 }
105 1 byte_x_bcd_addone(&wr_buff[2*type_qiedian],2); //开启次数加1
106 1 data_addr.word[1]=FL_lasteng+480;
107 1 Write_data(FLASH,4);
108 1 //----------------------------------------------------------结束
109 1
110 1 }
111
112 //======================================================================
113 //函数功能:保存结束事件
114 //
115 //======================================================================
116 void deel_endkaiqi(unsigned char type)
C51 COMPILER V7.50 BIAOGAI_DUANLIU 05/26/2008 08:17:35 PAGE 3
117 {
118 1 wr_buff[0]=RTCTIME.rYear; //窃电结束时间
119 1 wr_buff[1]=RTCTIME.rMonth;
120 1 wr_buff[2]=RTCTIME.rDate;
121 1 wr_buff[3]=RTCTIME.rHour;
122 1 wr_buff[4]=RTCTIME.rMinute;
123 1 data_addr.word[1]=FL_lasteng+420+type*30+5;
124 1 Write_data(FLASH,5); //保存结束时间
125 1 }
126
127
128 //==========================================================================
129 //函数功能:判端钮盖状态
130 //
131 //==========================================================================
132 void pan_duanliu(void)
133 { /*
134 1 Enable_DNkeyin
135 1 if(Sta_DNkeyinput==OPEN_DN)
136 1 { sta_checkduanliu=start_qiedian; //端钮盖开启
137 1 }
138 1 else
139 1 { if(sta_duanliu!=idle_qiedian)
140 1 { sta_checkduanliu=end_qiedian;
141 1 }
142 1 else
143 1 { sta_checkduanliu=idle_qiedian;
144 1 }
145 1 }
146 1 */
147 1 }
148
149 //==========================================================================
150 //函数功能:判表盖状态
151 //
152 //==========================================================================
153 void pan_biaogai(void)
154 {/* Enable_BGkeyin
155 1 if(Sta_BGkeyinput==OPEN_BG)
156 1 { sta_checkbiaogai=start_qiedian; //表盖开启
157 1 }
158 1 else
159 1 { if(sta_biaogai!=idle_qiedian)
160 1 { sta_checkbiaogai=end_qiedian;
161 1 }
162 1 else
163 1 { sta_checkbiaogai=idle_qiedian;
164 1 }
165 1 }
166 1 */
167 1 }
168 //==========================================================================
169 //函数功能:表盖、端钮盖防开启模块
170 //备注:两个事件不能同事检测,必须等到一个事件检测完毕,再渐次另外事件
171 //==========================================================================
172 void biaogai_duanliu_mode(void)
173 { //unsigned char tempdata;
174 1 if(flag_biaogai_duanliu==1)
175 1 { if(type_kaiqi==0xff) //如果无窃电事件需要处理
176 2 { if(busy_buffflash==0) //如果缓存flash空闲
177 3 { if(flag_type>2)
178 4 { flag_type=0; //一轮事件判断结束
C51 COMPILER V7.50 BIAOGAI_DUANLIU 05/26/2008 08:17:35 PAGE 4
179 5 flag_losetenvt_sec=0;
180 5 }
181 4 else
182 4 flag_type++;
183 4 switch(flag_type)
184 4 { case 0: //表盖开启
185 5 pan_biaogai();
186 5 type_shijian=pan_lostshijian(&sta_biaogai,&sta_checkbiaogai,&time_biaogai,5);
187 5 break;
188 5 case 1: //端钮盖开启
189 5
190 5 break;
191 5 default:
192 5 flag_type=0;
193 5 break;
194 5 }
195 4
196 4 if(type_shijian!=idle_qiedian) //窃电事件开始
197 4 type_qiedian=flag_type; //表示窃电事件处理开始
198 4 }
199 3
200 3 }
201 2 if(type_qiedian!=0xff) //如果有窃电事件进行处理
202 2 { if(type_shijian==start_qiedian) //如果事件开始状态还没处理
203 3 { busy_buffflash=1; //置位buff忙标志位
204 4 if(copy_flash(FL_lasteng,FL_wrbuffer,512)==1) //如果保存数据到缓存成功
205 4 { F_askerashistdata=1; //事件页擦除
206 5 type_shijian=ok_copybuff; //状态切换到准备保存数据
207 5 }
208 4 else //如果拷贝失败
209 4 { if(Ferr_buff==flash_err) //如果本来该页已经错误
210 5 { F_askerashistdata=1; //事件页擦除
211 6 type_shijian=ok_copybuff; //状态切换到准备保存数据
212 6 }
213 5 else
214 5 F_askerasbuffer=1; //存数据失败,对缓存进行擦除
215 5 }
216 4 }
217 3 else if((type_shijian==ok_copybuff)&&(F_askerashistdata==0)) //如果缓存数据完毕且页擦除完毕
218 3 { recover_biaogaiduanliu_eng(); //恢复数据并保存开始事件
219 4 type_qiedian=0xff; //处理结束,继续处理下一事件
220 4 F_askerasbuffer=1; //擦buffer页
221 4 }
222 3 else if(type_shijian==end_qiedian) //事件结束
223 3 { deel_endkaiqi(type_qiedian); //处理结束事件
224 4 type_qiedian=0xff; //处理结束,继续处理下一事件
225 4 }
226 3 }
227 2
228 2 }
229 1 }
-
-
-
-
-
-
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 562 ----
CONSTANT SIZE = ---- ----
C51 COMPILER V7.50 BIAOGAI_DUANLIU 05/26/2008 08:17:35 PAGE 5
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 + =
减小字号Ctrl + -
显示快捷键?