ZDBMS/output/Protect.lst

508 lines
23 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

C51 COMPILER V9.01 PROTECT 02/19/2025 10:42:28 PAGE 1
C51 COMPILER V9.01, COMPILATION OF MODULE PROTECT
OBJECT MODULE PLACED IN .\output\Protect.obj
COMPILER INVOKED BY: D:\Tool\Keil\C51\BIN\C51.EXE code_drv\Protect.c LARGE OPTIMIZE(7,SIZE) REGFILE(.\output\MCUCore_Loa
-d.ORC) BROWSE INTVECTOR(0X1000) INCDIR(.\header_app;.\header_drv;.\code_gasguage;.\code_classb\iec60730_lib\include;.\co
-de_classb\iec60730_proc\Include;.\code_classb\config) DEBUG OBJECTEXTEND PRINT(.\output\Protect.lst) OBJECT(.\output\Pro
-tect.obj)
line level source
1 /********************************************************************************
2 Copyright (C), Sinowealth Electronic. Ltd.
3 Author: Sino
4 Version: V0.0
5 Date: 2020/04/26
6 History:
7 V2.0 2020/04/26 Preliminary
8 ********************************************************************************/
9 #include "Main.h"
10
11
12 //保护相关的参数
13 BOOL bUVLock; //负载锁定当欠压恢复后置位该标志而不是直接清零bUV当负载释放后<E694BE>
-<2D>偾辶鉨UV
14 BOOL bOVLock; //充电器锁定当过压恢复后置位该标志而不是直接清零bOV当充电器释<E599A8>
-藕螅<E89795>偾辶鉨OV
15 U16 xdata uiOVDelayCnt;
16 U16 xdata uiOVRDelayCnt;
17 U16 xdata uiUVDelayCnt;
18 U16 xdata uiUVRDelayCnt;
19 U16 xdata uiOTCDelayCnt;
20 U16 xdata uiOTCRDelayCnt;
21 U16 xdata uiUTCDelayCnt;
22 U16 xdata uiUTCRDelayCnt;
23 U16 xdata uiOTDDelayCnt;
24 U16 xdata uiOTDRDelayCnt;
25 U16 xdata uiUTDDelayCnt;
26 U16 xdata uiUTDRDelayCnt;
27 U16 xdata uiOCCDelayCnt;
28 U16 xdata uiOCD1DelayCnt;
29 U16 xdata uiOCD2DelayCnt;
30 U16 xdata uiOCCRcnt;
31 U16 xdata uiOCDRcnt;
32
33 /*************************************************************************************************
34 * 函数名: ProtectOV
35 * 参 数: 无
36 * 返回值: 无
37 * 描 述: 单节电池过压保护检测过压后置位bOV为1
38 *************************************************************************************************/
39 void ProtectOV(void)
40 {
41 1 if(!(bOV||bAFE_OV))
42 1 {
43 2 if(uiCellVmax > E2uiOVvol)
44 2 {
45 3 if(++uiOVDelayCnt >= OV_DELAY_CNT)
46 3 {
47 4 bOV = 1;
48 4 bOVLock = 0;
49 4 uiOVDelayCnt = 0;
50 4 uiOVRDelayCnt = 0;
C51 COMPILER V9.01 PROTECT 02/19/2025 10:42:28 PAGE 2
51 4 }
52 3 }
53 2 else if(uiCellVmax < E2uiOVRvol)
54 2 {
55 3 uiOVDelayCnt = 0;
56 3 }
57 2 }
58 1 else if(!bOVLock)
59 1 {
60 2 if(uiCellVmax < E2uiOVRvol)
61 2 {
62 3 if(++uiOVRDelayCnt >= OVR_DELAY_CNT)
63 3 {
64 4 if(bChgerLock)
65 4 {
66 5 bOVLock = 1; //过压阈值恢复,但是还需检测负载释放释放
67 5 bChgerStartCheckFlg = 1; //开启充电器
68 5 }
69 4 else
70 4 {
71 5 bOV = 0;
72 5 bAFE_OV = 0;
73 5 AFEClrFlg();
74 5 }
75 4 uiOVDelayCnt = 0;
76 4 uiOVRDelayCnt = 0;
77 4 }
78 3 }
79 2 else if(uiCellVmax > E2uiOVvol)
80 2 {
81 3 uiOVRDelayCnt = 0;
82 3 }
83 2 }
84 1 }
85
86 /*************************************************************************************************
87 * 函数名: ProtectUV
88 * 参 数: 无
89 * 返回值: 无
90 * 描 述: 单节电芯欠压保护检测保护后置位bUV为1
91 *************************************************************************************************/
92 void ProtectUV(void)
93 {
94 1 if(!bUV)
95 1 {
96 2 if(uiCellVmin < E2uiUVvol)
97 2 {
98 3 if(++uiUVDelayCnt >= UV_DELAY_CNT)
99 3 {
100 4 bUV = 1;
101 4 bUVLock = 0;
102 4 uiUVDelayCnt = 0;
103 4 uiUVRDelayCnt = 0;
104 4 }
105 3 }
106 2 else if(uiCellVmin > E2uiUVRvol)
107 2 {
108 3 uiUVDelayCnt = 0;
109 3 }
110 2 }
111 1 else if(!bUVLock)
112 1 {
C51 COMPILER V9.01 PROTECT 02/19/2025 10:42:28 PAGE 3
113 2 if(uiCellVmin > E2uiUVRvol)
114 2 {
115 3 if(++uiUVRDelayCnt >= UVR_DELAY_CNT)
116 3 {
117 4 if(bLoadLock) //如果支持负载锁定则不立刻清UV标志需要负载释放后再清零
118 4 {
119 5 bUVLock = 1; //欠压阈值恢复,但是还需检测负载释放释放
120 5 bLoadStartCheckFlg = 1; //开启负载检测
121 5 }
122 4 else
123 4 {
124 5 bUV = 0;
125 5 }
126 4 uiUVDelayCnt = 0;
127 4 uiUVRDelayCnt = 0;
128 4 }
129 3 }
130 2 else if(uiCellVmin < E2uiUVvol)
131 2 {
132 3 uiUVRDelayCnt = 0;
133 3 }
134 2 }
135 1 }
136
137 /*************************************************************************************************
138 * 函数名: ProtectOTC
139 * 参 数: 无
140 * 返回值: 无
141 * 描 述: 充电高温保护检测保护后置位bOTC为1
142 *************************************************************************************************/
143 void ProtectOTC(void)
144 {
145 1 if(!bOTC)
146 1 {
147 2 if(uiTempeMax > E2uiTempOTC)
148 2 {
149 3 if(++uiOTCDelayCnt >= TEMPE_DELAY_CNT)
150 3 {
151 4 bOTC = 1;
152 4 uiOTCDelayCnt = 0;
153 4 uiOTCRDelayCnt = 0;
154 4 }
155 3 }
156 2 else if(uiTempeMax < E2uiTempOTCR)
157 2 {
158 3 uiOTCDelayCnt = 0;
159 3 }
160 2 }
161 1 else
162 1 {
163 2 if(uiTempeMax < E2uiTempOTCR)
164 2 {
165 3 if(++uiOTCRDelayCnt >= TEMPER_DELAY_CNT)
166 3 {
167 4 bOTC = 0;
168 4 uiOTCDelayCnt = 0;
169 4 uiOTCRDelayCnt = 0;
170 4 }
171 3 }
172 2 else if(uiTempeMax > E2uiTempOTC)
173 2 {
174 3 uiOTCRDelayCnt = 0;
C51 COMPILER V9.01 PROTECT 02/19/2025 10:42:28 PAGE 4
175 3 }
176 2 }
177 1 }
178
179
180 /*************************************************************************************************
181 * 函数名: ProtectUTC
182 * 参 数: 无
183 * 返回值: 无
184 * 描 述: 充电低温保护检测保护后置位bUTC为1
185 *************************************************************************************************/
186 void ProtectUTC(void)
187 {
188 1 if(!bUTC)
189 1 {
190 2 if(uiTempeMin < E2uiTempUTC)
191 2 {
192 3 if(++uiUTCDelayCnt >= TEMPE_DELAY_CNT)
193 3 {
194 4 bUTC = 1;
195 4 uiUTCDelayCnt = 0;
196 4 uiUTCRDelayCnt = 0;
197 4 }
198 3 }
199 2 else if(uiTempeMin > E2uiTempUTCR)
200 2 {
201 3 uiUTCDelayCnt = 0;
202 3 }
203 2 }
204 1 else
205 1 {
206 2 if(uiTempeMin > E2uiTempUTCR)
207 2 {
208 3 if(++uiUTCRDelayCnt >= TEMPER_DELAY_CNT)
209 3 {
210 4 bUTC = 0;
211 4 uiUTCDelayCnt = 0;
212 4 uiUTCRDelayCnt = 0;
213 4 }
214 3 }
215 2 else if(uiTempeMin < E2uiTempUTC)
216 2 {
217 3 uiUTCRDelayCnt = 0;
218 3 }
219 2 }
220 1 }
221
222
223 /*************************************************************************************************
224 * 函数名: ProtectOTD
225 * 参 数: 无
226 * 返回值: 无
227 * 描 述: 放电高温保护检测保护后置位bOTD为1
228 *************************************************************************************************/
229 void ProtectOTD(void)
230 {
231 1 if(!bOTD)
232 1 {
233 2 if(uiTempeMax > E2uiTempOTD)
234 2 {
235 3 if(++uiOTDDelayCnt >= TEMPE_DELAY_CNT)
236 3 {
C51 COMPILER V9.01 PROTECT 02/19/2025 10:42:28 PAGE 5
237 4 bOTD = 1;
238 4 uiOTDDelayCnt = 0;
239 4 uiOTDRDelayCnt = 0;
240 4 }
241 3 }
242 2 else if(uiTempeMax < E2uiTempOTDR)
243 2 {
244 3 uiOTDDelayCnt = 0;
245 3 }
246 2 }
247 1 else
248 1 {
249 2 if(uiTempeMax < E2uiTempOTDR)
250 2 {
251 3 if(++uiOTDRDelayCnt >= TEMPER_DELAY_CNT)
252 3 {
253 4 bOTD = 0;
254 4 uiOTDDelayCnt = 0;
255 4 uiOTDRDelayCnt = 0;
256 4 }
257 3 }
258 2 else if(uiTempeMax > E2uiTempOTD)
259 2 {
260 3 uiOTDRDelayCnt = 0;
261 3 }
262 2 }
263 1 }
264
265
266 /*************************************************************************************************
267 * 函数名: ProtectUTD
268 * 参 数: 无
269 * 返回值: 无
270 * 描 述: 放电低温保护检测保护后置位bUTD为1
271 *************************************************************************************************/
272 void ProtectUTD(void)
273 {
274 1 if(!bUTD)
275 1 {
276 2 if(uiTempeMin < E2uiTempUTD)
277 2 {
278 3 if(++uiUTDDelayCnt >= TEMPE_DELAY_CNT)
279 3 {
280 4 bUTD = 1;
281 4 uiUTDDelayCnt = 0;
282 4 uiUTDRDelayCnt = 0;
283 4 }
284 3 }
285 2 else if(uiTempeMin > E2uiTempUTDR)
286 2 {
287 3 uiUTDDelayCnt = 0;
288 3 }
289 2 }
290 1 else
291 1 {
292 2 if(uiTempeMin > E2uiTempUTDR)
293 2 {
294 3 if(++uiUTDRDelayCnt >= TEMPER_DELAY_CNT)
295 3 {
296 4 bUTD = 0;
297 4 uiUTDDelayCnt = 0;
298 4 uiUTDRDelayCnt = 0;
C51 COMPILER V9.01 PROTECT 02/19/2025 10:42:28 PAGE 6
299 4 }
300 3 }
301 2 else if(uiTempeMin < E2uiTempUTD)
302 2 {
303 3 uiUTDRDelayCnt = 0;
304 3 }
305 2 }
306 1 }
307
308
309
310 /*************************************************************************************************
311 * 函数名: ProtectOCC
312 * 参 数: 无
313 * 返回值: 无
314 * 描 述: 充电过流保护检测保护后置位bOCC为1
315 *************************************************************************************************/
316 void ProtectOCC(void)
317 {
318 1 if(!bOCC)
319 1 {
320 2 if(slCadcCurrent > E2slOCCCurrent)
321 2 {
322 3 if(++uiOCCDelayCnt >= OCC_DELAY_CNT)
323 3 {
324 4 bOCC = 1;
325 4 bChgerStartCheckFlg = 1; //设置充电器开始检测标志
326 4 uiOCCDelayCnt = 0;
327 4 }
328 3 }
329 2 else if(!bChgerChkingFlg)
330 2 {
331 3 if(uiOCCDelayCnt > 0)
332 3 {
333 4 uiOCCDelayCnt--;
334 4 }
335 3 }
336 2 }
337 1 }
338
339
340 /*************************************************************************************************
341 * 函数名: ProtectOCD1
342 * 参 数: 无
343 * 返回值: 无
344 * 描 述: 放电过流1保护检测保护后置位bOCD1为1
345 *************************************************************************************************/
346 void ProtectOCD1(void)
347 {
348 1 if(!bOCD1)
349 1 {
350 2 if(slCadcCurrent < E2slOCD1Current)
351 2 {
352 3 if(++uiOCD1DelayCnt >= OCD1_DELAY_CNT)
353 3 {
354 4 uiOCD1DelayCnt = 0;
355 4 bOCD1 = 1;
356 4 bLoadStartCheckFlg = 1; //开启负载检测
357 4 }
358 3 }
359 2 else if(!bLoadChkingFlg)
360 2 {
C51 COMPILER V9.01 PROTECT 02/19/2025 10:42:28 PAGE 7
361 3 if(uiOCD1DelayCnt > 0)
362 3 {
363 4 uiOCD1DelayCnt--;
364 4 }
365 3 }
366 2 }
367 1 }
368
369
370 /*************************************************************************************************
371 * 函数名: ProtectOCD2
372 * 参 数: 无
373 * 返回值: 无
374 * 描 述: 放电过流2保护检测保护后置位bOCD2为1
375 *************************************************************************************************/
376 void ProtectOCD2(void)
377 {
378 1 if(!bOCD2)
379 1 {
380 2 if(slCadcCurrent < E2slOCD2Current)
381 2 {
382 3 if(++uiOCD2DelayCnt > OCD2_DELAY_CNT)
383 3 {
384 4 uiOCD2DelayCnt = 0;
385 4 bOCD2 = 1;
386 4 bLoadStartCheckFlg = 1; //开启负载检测
387 4 }
388 3 }
389 2 else if(!bLoadChkingFlg)
390 2 {
391 3 if(uiOCD2DelayCnt > 0)
392 3 {
393 4 uiOCD2DelayCnt--;
394 4 }
395 3 }
396 2 }
397 1 }
398
399
400 /*************************************************************************************************
401 * 函数名: ProtectProcess
402 * 参 数: 无
403 * 返回值: 无
404 * 描 述: 各种保护检测
405 *************************************************************************************************/
406 void ProtectProcess(void)
407 {
408 1 if(!bPorSelfTestFlg) //如果是上电1s自检过程中则不检测正常保护
409 1 {
410 2 ProtectOV(); //检测过压保护及其释放
411 2 ProtectUV(); //检测欠压保护及其释放
412 2
413 2 ProtectOTC(); //检测充电高温保护及其释放
414 2 ProtectUTC(); //检测充电低温保护及其释放
415 2 ProtectOTD(); //检测放电高温保护及其释放
416 2 ProtectUTD(); //检测放电低温保护及其释放
417 2
418 2 ProtectOCC(); //充电过流保护
419 2 ProtectOCD1(); //放电过流1保护
420 2 ProtectOCD2(); //放电过流2保护
421 2 }
422 1 }
C51 COMPILER V9.01 PROTECT 02/19/2025 10:42:28 PAGE 8
423
424
425 /*************************************************************************************************
426 * 函数名: ProtectOCRecover
427 * 参 数: 无
428 * 返回值: 无
429 * 描 述: 电流保护自恢复
430 *************************************************************************************************/
431 void ProtectOCRecover(void)
432 {
433 1 if(bOCRC_EN)
434 1 {
435 2 if(bOCD1 || bOCD2 || bAFE_SC)
436 2 {
437 3 if(++uiOCDRcnt >= OCDR_DELAY_CNT)
438 3 {
439 4 ucLoadRCnt = 0;
440 4 uiOCDRcnt = 0;
441 4 bOCD1 = 0;
442 4 bOCD2 = 0;
443 4 bLoadStartCheckFlg = 0;
444 4 bLoadChkingFlg = 0;
445 4 if(bAFE_SC)
446 4 {
447 5 bAFE_SC = 0;
448 5 AFEClrFlg();
449 5 }
450 4 }
451 3 }
452 2
453 2 if(bOCC)
454 2 {
455 3 if(++uiOCCRcnt > OCCR_DELAY_CNT)
456 3 {
457 4 uiOCCRcnt = 0;
458 4 bOCC = 0;
459 4 ucChgerRCnt = 0;
460 4 bChgerChkingFlg = 0;
461 4 }
462 3 }
463 2 }
464 1 }
465
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1552 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 34 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)