173 lines
10 KiB
Plaintext
173 lines
10 KiB
Plaintext
C51 COMPILER V9.01 MAIN 02/07/2025 10:36:14 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/07/2025 10:36:14 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/07/2025 10:36:14 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 = 150 ----
|
||
CONSTANT SIZE = 33 ----
|
||
XDATA SIZE = ---- ----
|
||
PDATA SIZE = ---- ----
|
||
DATA SIZE = ---- ----
|
||
IDATA SIZE = ---- ----
|
||
BIT SIZE = ---- ----
|
||
END OF MODULE INFORMATION.
|
||
|
||
|
||
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|