C51 COMPILER V9.57.0.0 BAT 06/14/2024 11:08:38 PAGE 1 C51 COMPILER V9.57.0.0, COMPILATION OF MODULE BAT OBJECT MODULE PLACED IN .\Objects\bat.obj COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\UsrSrc\bat\bat.c ROM(COMPACT) OPTIMIZE(9,SIZE) BROWSE INCDIR(..\UsrIn -c\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key -;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\v -ox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\bat.lst -) TABS(2) OBJECT(.\Objects\bat.obj) line level source 1 /* 2 ****************************************************************************** 3 * 4 * @file bat.c 5 * @brief Voltage-based RC model gauge algorithm 6 * 7 * 8 * @version 1.0 9 * @date 2023/02/20 17:35:40 10 * @author Alex Xu 11 * 12 * Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd. 13 * All Rights Reserved 14 * 15 * History: 16 * Revision Date Author Desc 17 * 1.0.0 2023/02/20 Alex build this file 18 ****************************************************************************** 19 */ 20 #include "bat.h" 21 #include "adc.h" 22 23 idata uint8_t bat_level = 0; 24 bit F_batlevel_low = 0; //电池低压 25 26 #if BAT_VALUE 27 28 #define C_offset_bat_level_MAX 50 29 #define C_offset_bat_level_MIN 10 30 31 #define C_bat_level_protect 0 32 #define C_bat_level_lowpower 1 33 34 35 //bit F_batlevel_protect = 0; //低电保护 36 idata uint8_t offset_bat_level = ( C_offset_bat_level_MAX + C_offset_bat_level_MIN ) / 2; 37 38 39 #define C_batLevel_SetMax 10 40 41 /*充电电池电压会浮高,具体电压需要测试。*/ 42 const uint16_t Boost_batlevel_Threshold[C_batLevel_SetMax] = 43 { 44 3000, //1 45 3100, //2 46 3300, //3 47 3400, //4 48 3500, //5 49 3650, //6 50 3800, //7 51 3900, //8 C51 COMPILER V9.57.0.0 BAT 06/14/2024 11:08:38 PAGE 2 52 4050, //9 53 4200 //10 54 }; 55 #if 0 const uint16_t Charging_batlevel_Threshold1[C_batLevel_SetMax] = { 3050, //1 3150, //2 3350, //3 3450, //4 3550, //5 3700, //6 3850, //7 3950, //8 4100, //9 4200 //10 }; #endif 70 void check_bat_level(void) 71 { 72 1 uint8_t i = 0; 73 1 //get bat level 74 1 #if ADC_ENABLE 75 1 for(i=0; i < C_batLevel_SetMax; i++) 76 1 { 77 2 #if 0 if( Vbat_Adc < Boost_batlevel_Threshold[i] ) { break; } #else 85 2 if(CHIP_STA4 & 0x80) //充电 86 2 { 87 3 if( Vbat_Adc < Boost_batlevel_Threshold[i] + 50 ) 88 3 break; 89 3 } 90 2 else //放电 91 2 { 92 3 if( Vbat_Adc < Boost_batlevel_Threshold[i] ) 93 3 { 94 4 break; 95 4 } 96 3 } 97 2 #endif 98 2 } 99 1 #endif 100 1 101 1 if( i > bat_level ) 102 1 { 103 2 offset_bat_level++; 104 2 } 105 1 else 106 1 { 107 2 offset_bat_level--; 108 2 } 109 1 110 1 //debounce 111 1 if( (offset_bat_level > C_offset_bat_level_MAX) || (offset_bat_level < C_offset_bat_level_MIN) ) 112 1 { 113 2 //update C51 COMPILER V9.57.0.0 BAT 06/14/2024 11:08:38 PAGE 3 114 2 bat_level = i; 115 2 offset_bat_level = ( C_offset_bat_level_MAX + C_offset_bat_level_MIN ) / 2; 116 2 } 117 1 #if 0 if( bat_level <= C_bat_level_protect ) { F_batlevel_protect = 1; } else if( bat_level > ( C_bat_level_protect + 1 ) ) { F_batlevel_protect = 0; } #endif 127 1 if( bat_level <= C_bat_level_lowpower ) 128 1 { 129 2 F_batlevel_low = 1; 130 2 } 131 1 else if( bat_level > (C_bat_level_lowpower + 1) ) 132 1 { 133 2 F_batlevel_low = 0; 134 2 } 135 1 } 136 137 #endif C51 COMPILER V9.57.0.0 BAT 06/14/2024 11:08:38 PAGE 4 ASSEMBLY LISTING OF GENERATED OBJECT CODE ; FUNCTION Com0010 (BEGIN) 0000 L?0017: 0000 EF MOV A,R7 0001 25E0 ADD A,ACC 0003 2400 R ADD A,#LOW Boost_batlevel_Threshold 0005 F8 MOV R0,A 0006 E6 MOV A,@R0 0007 FC MOV R4,A 0008 08 INC R0 0009 E6 MOV A,@R0 000A 22 RET ; FUNCTION Com0010 (END) ; FUNCTION check_bat_level (BEGIN) ; SOURCE LINE # 70 ; SOURCE LINE # 71 ; SOURCE LINE # 72 ;---- Variable 'i' assigned to Register 'R7' ---- 0000 E4 CLR A 0001 FF MOV R7,A ; SOURCE LINE # 75 0002 ?C0001: ; SOURCE LINE # 76 ; SOURCE LINE # 85 0002 E5E6 MOV A,CHIP_STA4 0004 30E715 JNB ACC.7,?C0004 ; SOURCE LINE # 86 ; SOURCE LINE # 87 0007 120000 R LCALL L?0017 000A 2432 ADD A,#032H 000C FD MOV R5,A 000D E4 CLR A 000E 3C ADDC A,R4 000F FC MOV R4,A 0010 C3 CLR C 0011 7800 E MOV R0,#LOW Vbat_Adc+01H 0013 E6 MOV A,@R0 0014 9D SUBB A,R5 0015 18 DEC R0 0016 E6 MOV A,@R0 0017 9C SUBB A,R4 0018 5010 JNC ?C0003 ; SOURCE LINE # 88 001A 8012 SJMP ?C0002 ; SOURCE LINE # 89 001C ?C0004: ; SOURCE LINE # 91 ; SOURCE LINE # 92 001C 120000 R LCALL L?0017 001F FD MOV R5,A 0020 C3 CLR C 0021 7800 E MOV R0,#LOW Vbat_Adc+01H 0023 E6 MOV A,@R0 0024 9D SUBB A,R5 0025 18 DEC R0 0026 E6 MOV A,@R0 0027 9C SUBB A,R4 0028 4004 JC ?C0002 ; SOURCE LINE # 93 C51 COMPILER V9.57.0.0 BAT 06/14/2024 11:08:38 PAGE 5 ; SOURCE LINE # 94 ; SOURCE LINE # 95 ; SOURCE LINE # 96 ; SOURCE LINE # 98 002A ?C0003: 002A 0F INC R7 002B BF0AD4 CJNE R7,#0AH,?C0001 002E ?C0002: ; SOURCE LINE # 101 002E 7800 R MOV R0,#LOW bat_level 0030 E6 MOV A,@R0 0031 FE MOV R6,A 0032 EF MOV A,R7 0033 D3 SETB C 0034 9E SUBB A,R6 0035 4004 JC ?C0008 ; SOURCE LINE # 102 ; SOURCE LINE # 103 0037 18 DEC R0 0038 06 INC @R0 ; SOURCE LINE # 104 0039 8003 SJMP ?C0009 003B ?C0008: ; SOURCE LINE # 106 ; SOURCE LINE # 107 003B 7800 R MOV R0,#LOW offset_bat_level 003D 16 DEC @R0 ; SOURCE LINE # 108 003E ?C0009: ; SOURCE LINE # 111 003E 7800 R MOV R0,#LOW offset_bat_level 0040 E6 MOV A,@R0 0041 FE MOV R6,A 0042 D3 SETB C 0043 9432 SUBB A,#032H 0045 5006 JNC ?C0011 0047 EE MOV A,R6 0048 C3 CLR C 0049 940A SUBB A,#0AH 004B 5007 JNC ?C0010 004D ?C0011: ; SOURCE LINE # 112 ; SOURCE LINE # 114 004D 7800 R MOV R0,#LOW bat_level 004F A607 MOV @R0,AR7 ; SOURCE LINE # 115 0051 18 DEC R0 0052 761E MOV @R0,#01EH ; SOURCE LINE # 116 0054 ?C0010: ; SOURCE LINE # 127 0054 7800 R MOV R0,#LOW bat_level 0056 E6 MOV A,@R0 0057 FF MOV R7,A 0058 D3 SETB C 0059 9401 SUBB A,#01H 005B 5003 JNC ?C0012 ; SOURCE LINE # 128 ; SOURCE LINE # 129 005D D200 R SETB F_batlevel_low ; SOURCE LINE # 130 005F 22 RET C51 COMPILER V9.57.0.0 BAT 06/14/2024 11:08:38 PAGE 6 0060 ?C0012: ; SOURCE LINE # 131 0060 EF MOV A,R7 0061 D3 SETB C 0062 9402 SUBB A,#02H 0064 4002 JC ?C0015 ; SOURCE LINE # 132 ; SOURCE LINE # 133 0066 C200 R CLR F_batlevel_low ; SOURCE LINE # 134 ; SOURCE LINE # 135 0068 ?C0015: 0068 22 RET ; FUNCTION check_bat_level (END) MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 116 ---- CONSTANT SIZE = ---- ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = 20 ---- IDATA SIZE = 2 ---- BIT SIZE = 1 ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)