C51 COMPILER V9.01   MAIN                                                                  02/22/2025 15:36:21 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/22/2025 15:36:21 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/E2ui
             -VPackGain);
  89   3      //
  90   3      //                      printf("\r\n");
  91   3      //                      printf("TEMP I0:%.2f C\r\n", AFE.uiICTempe[0]*17.0/100.0-270);
  92   3      //                      printf("TEMP I1:%.2f C\r\n", AFE.uiICTempe[1]*17.0/100.0-270);
  93   3      //                      printf("TEMP E0:%.2f C\r\n", AFE.uiTS[0]*1.0);
  94   3      //                      printf("TEMP E1:%.2f C\r\n", AFE.uiTS[1]*1.0);
  95   3      //
  96   3      //                      printf("\r\n");
  97   3      //                      printf("CURR I1:%.2f mA\r\n", AFE.siCurr*1000.0*1000.0/16384/5);
  98   3      //                      printf("\r\nBSTATUS:%x\r\n", REG.AFEBSTATUS);
  99   3      
 100   3                              bTimer1sFlg = 0;                                                                                                                 
 101   3                              GasGaugeManage();                               //Calculate the battery charge and discharge capacity
 102   3      
 103   3                              AFERamCheck();                                  //检测AFE寄存器是否误写
 104   3                              
 105   3                              AFETwiCheck();                                  //检测AFE有无连续5S通讯错误
 106   3                              E2PRomTwiCheck();                               //检测EEPROM有无连续5S通讯错误
 107   3                              RTCTwiCheck();                                  //检测RTC有无连续5S通讯错误
 108   3                              
 109   3                              if(!RamCheckProcess())                  //检测参数变量区是否误写
 110   3                              {
 111   4                                      SysParaInit();
 112   4                              }
 113   3                              
 114   3                              McuFlashWrWaitCheck();                  //检测是否需要更新参数到MCU Flash
C51 COMPILER V9.01   MAIN                                                                  02/22/2025 15:36:21 PAGE 3   

 115   3                              
 116   3                      E2PRomBKCheck();                                //备份EEPROM
 117   3                              
 118   3                              //LowPowerCheck();                              //低功耗检测
 119   3                              
 120   3      
 121   3                      }
 122   2                      
 123   2                      SystemResetProcess();                           //系统复位
 124   2                      
 125   2                      ISPProcess();                                           //在线升级代码
 126   2                                      
 127   2                      CaliProcess();                                          //校准
 128   2      
 129   2                      McuFlashProcess();                                      //备份参数到MCU Flash区
 130   2      
 131   2                      E2PRomBKProcess();                                      //外挂EEPROM备份
 132   2                      
 133   2                      //LowPowerProcess();                                    //低功耗处理
 134   2                      
 135   2                      Info.uiPackStatus = uiPackStatus;       //更新PACK和Battery的信息，可通过UART反馈给主机
 136   2                      Info.uiBatStatus = uiBatStatus;
 137   2                      
 138   2              }
 139   1      }
 140          
 141          
 142                  


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    124    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)
