C51 COMPILER V9.01 MAIN 02/06/2025 15:28:44 PAGE 1 C51 COMPILER V9.01, COMPILATION OF MODULE MAIN OBJECT MODULE PLACED IN .\output\Main.obj COMPILER INVOKED BY: D:\Tool\Keil\C51\BIN\C51.EXE code_app\Main.c LARGE OPTIMIZE(7,SIZE) REGFILE(.\output\MCUCore_Load.O -RC) BROWSE INTVECTOR(0X1000) INCDIR(.\header_app;.\header_drv;.\code_gasguage;.\code_classb\iec60730_lib\include;.\code_ -classb\iec60730_proc\Include;.\code_classb\config) DEBUG OBJECTEXTEND PRINT(.\output\Main.lst) OBJECT(.\output\Main.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 #include "stdio.h" 11 12 // 发送字符串 13 char putchar(char c) 14 { 15 1 REN = 0; // 开启发送 16 1 IO_485_DE = 1; // 开启485发送 17 1 SBUF = c; // 发 18 1 while(!TI); 19 1 IO_485_DE = 0; // 关闭485发送 20 1 TI = 0; 21 1 return c; 22 1 } 23 24 /************************************************************************************************* 25 * 函数名: main 26 * 参 数: 无 27 * 返回值: 无 28 * 描 述: 主函数,当初始化结束后,程序会在While(1)中死循环 29 1.可通过定时器来触发各个功能模块的执行 30 2.可通过其他中断源来触发对应模块的执行 31 *************************************************************************************************/ 32 void main(void) 33 { 34 1 Initial(); //初始化系统 35 1 36 1 printf("SystemClock: 8MHz"); 37 1 38 1 while(1) 39 1 { 40 2 //KeyProcess(); //按键处理 41 2 42 2 if(bTimer50msFlg) //50mS处理和AFE相关的数据采集、计算、保护等 43 2 { 44 3 McuWDTClear(); //定时清狗 45 3 46 3 bTimer50msFlg = 0; 47 3 AFEInfoProcess(); //获取AFE信息,计算电压、温度、电流 48 3 49 3 BalanceProcess(); //平衡及断线处理 50 3 51 3 ProtectProcess(); //电压、电流、温度保护 52 3 53 3 PorSelfTest(); //第一次上电保护检测(延时较短,暂定50mS一次检测) C51 COMPILER V9.01 MAIN 02/06/2025 15:28:44 PAGE 2 54 3 55 3 LoadCheck(); //检测负载是否释放 56 3 57 3 ChgerCheck(); //检测充电器是否释放 58 3 59 3 MosCtrl(); //MOS状态检测及控制 60 3 61 3 ProtectOCRecover(); //过流保护自恢复 62 3 63 3 //LedDisplay(); //LED显示 64 3 65 3 #if (UART0_DEFINE != 0) 66 3 Uart0Check(); //检查UART0是否正常,如果不正常,则复位指针向量 67 3 #endif 68 3 69 3 #if (UART1_DEFINE != 0) Uart1Check(); //检查UART1是否正常,如果不正常,则复位指针向量 #endif 72 3 73 3 #if (UART2_DEFINE != 0) Uart2Check(); //检查UART2是否正常,如果不正常,则复位指针向量 #endif 76 3 } 77 2 78 2 if(bTimer1sFlg) //1s定时周期 79 2 { 80 3 IO_LED = ~IO_LED; //LED 81 3 82 3 printf("\r\n"); 83 3 printf("BAT0:%.2f mV\r\n", AFE.uiCell[0]*1.0*CALIVOL/E2uiVPackGain); 84 3 printf("BAT1:%.2f mV\r\n", AFE.uiCell[1]*1.0*CALIVOL/E2uiVPackGain); 85 3 printf("BAT2:%.2f mV\r\n", AFE.uiCell[2]*1.0*CALIVOL/E2uiVPackGain); 86 3 printf("BAT3:%.2f mV\r\n", AFE.uiCell[3]*1.0*CALIVOL/E2uiVPackGain); 87 3 printf("BAT4:%.2f mV\r\n", AFE.uiCell[4]*1.0*CALIVOL/E2uiVPackGain); 88 3 printf("TOTAL:%.2f mV\r\n",(AFE.uiCell[1]+AFE.uiCell[2]+AFE.uiCell[3]+AFE.uiCell[4])*1.0*CALIVOL/E2uiVP -ackGain); 89 3 printf("\r\n"); 90 3 printf("TEMP0:%.2f C\r\n", AFE.uiICTempe[0]*17.0/100.0-270); 91 3 // printf("TEMP1:%.2f C\r\n", (CalcuTemp(AFE.uiTS[0]) + E2siTS0Offset)*1.0); 92 3 printf("TEMP1.0:%.2f C\r\n", AFE.uiTS[0]*1.0); 93 3 printf("TEMP1.1:%.2f C\r\n", AFE.uiTS[1]*1.0); 94 3 95 3 bTimer1sFlg = 0; 96 3 GasGaugeManage(); //Calculate the battery charge and discharge capacity 97 3 98 3 AFERamCheck(); //检测AFE寄存器是否误写 99 3 100 3 AFETwiCheck(); //检测AFE有无连续5S通讯错误 101 3 E2PRomTwiCheck(); //检测EEPROM有无连续5S通讯错误 102 3 RTCTwiCheck(); //检测RTC有无连续5S通讯错误 103 3 104 3 if(!RamCheckProcess()) //检测参数变量区是否误写 105 3 { 106 4 SysParaInit(); 107 4 } 108 3 109 3 McuFlashWrWaitCheck(); //检测是否需要更新参数到MCU Flash 110 3 111 3 E2PRomBKCheck(); //备份EEPROM 112 3 113 3 //LowPowerCheck(); //低功耗检测 114 3 C51 COMPILER V9.01 MAIN 02/06/2025 15:28:44 PAGE 3 115 3 116 3 } 117 2 118 2 SystemResetProcess(); //系统复位 119 2 120 2 ISPProcess(); //在线升级代码 121 2 122 2 CaliProcess(); //校准 123 2 124 2 McuFlashProcess(); //备份参数到MCU Flash区 125 2 126 2 E2PRomBKProcess(); //外挂EEPROM备份 127 2 128 2 //LowPowerProcess(); //低功耗处理 129 2 130 2 Info.uiPackStatus = uiPackStatus; //更新PACK和Battery的信息,可通过UART反馈给主机 131 2 Info.uiBatStatus = uiBatStatus; 132 2 133 2 } 134 1 } 135 136 137 MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 764 ---- CONSTANT SIZE = 161 ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = ---- ---- IDATA SIZE = ---- ---- BIT SIZE = ---- ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)