📄 chongdianqi.lst
字号:
159 3 SCL=0;
160 3 Battery_On_Socket = 0; // 关闭AD转换, skip <115, <162, <176, until <38
161 3 RTC_Counter = 5000; //延时15's, 启动 RTC_Interrupt()
162 3 LED_Flash_Speed = LED_FLASH_FAST; // 显示错误状态
163 3 }
164 2 else if( AD1_1 <= 38 ) // If Vout <= 1V, <=(1/3.31*2)*256 = 256/6.66
165 2 {
166 3 SCL=0; // p1.2 = 0, 关闭PWM
167 3 LED_Flash_Speed = LED_FLASH_FAST; // indicate error status
168 3 AD1_1 = 0; // LED关闭
169 3 } // 电池损坏或插头没接
170 2 else if( AD1_1 <= 115) // 如果电压<=115
171 2 {
172 3 SCL=1; // 启动 P1.2 PWN
173 3 TH0 = 250; //预设充电电流为50V输入,约2A。
174 3 LED_Flash_Speed = LED_FLASH_SLOW; // 显示充电状态
175 3 if( Constant_Current_Charge == 0 ) Pre_Charge_Status = 1; // Set Precharge status
176 3 }
177 2 else if( AD1_1 < 162) // 输出电压 = 电池电压 + 0.35*0.75
178 2 // for fullly charged bat,bat vol=4.24,I limit 20mA, 4.24+0.02*0.75=4.26v
179 2 // 为保护电池, 设置输出电压 = 4.26v (162)
C51 COMPILER V7.50 CHONGDIANQI 03/12/2009 16:20:17 PAGE 4
180 2 { // if bat vol=4.2, 仅仅输出 1.5A, 4.2+0.08*0.75=4.26v
181 3 // if bat vol=4.15, 我仅仅是2A, 4.15 + 0.15*0.75 = 4.26v
182 3 // 为保护电池充电电流,4.26-0.35*0.75=4.00v, so Vbat>4.00v,enter cons-vol
183 3 // 第一波充电, charge I= min 20mA,Vbat= 4.26-0.02*0.75=4.24v
184 3 // ( 161-4.252, 162-4.267, 160-4.234 )
185 3 SCL=1;
186 3 LED_Flash_Speed = LED_FLASH_SLOW; // 显示充电状态
187 3 if( Constant_Voltage_Charge == 0)
188 3 {
189 4 Constant_Current_Charge = 1; // 设置为恒流充电
190 4 Pre_Charge_Status = 0; // 禁止预充电状态
191 4 }
192 3 }
193 2 else // If 4.26V < Vout <4.6V
194 2 {
195 3 SCL=1;
196 3 LED_Flash_Speed = LED_FLASH_SLOW; // 显示充电状态
197 3 Constant_Voltage_Charge = 1; // 为恒压充电状态
198 3 Constant_Current_Charge = 0; // 禁止恒流充电
199 3 Pre_Charge_Status = 0; // 禁止预充电
200 3 }
201 2 temp = AD1_1;
202 2 AD1_1 = 0; // 重启 AD1_1
203 2 //-----------------------------------------------
204 2 //AD12 检测温度
205 2 //-----------------------------------------------
206 2 // AD1_2 = AD1_2*83/64; // input x 3.31 x 100 / 256
207 2 // First_Bit = AD1_2/100;
208 2 // AD1_2 = AD1_2%100;
209 2 // Second_Bit = AD1_2/10;
210 2 // Third_Bit = AD1_2%10;
211 2 // DP_Enable = 0;
212 2 AD1_2 = 0; // reset AD1_2
213 2 //-----------------------------------------------
214 2 //AD13 检测电流
215 2 //-----------------------------------------------
216 2 if( Pre_Charge_Status == 1 )
217 2 {
218 3 if( ( AD1_3 > 1 ) && ( TH0 < 250 ) ) // 确保预充电电流 < 65mA
219 3 { TH0++;}
220 3 }
221 2 else if( Constant_Current_Charge == 1 )
222 2 {
223 3 if( AD1_3 < 17 ) // 260mv,(充电电流 = 350mA)
224 3 { // 如果充电电流 < 350mA, pwm++
225 4 if( TH0 < 2 )
226 4 {
227 5 TH0 = 1;
228 5 if( RTC_Counter == 0 ) //延时20min结束充电
229 5 { RTC_Counter = 1; } //电池在这种情况下,if Vout < 2.6v
230 5 //无法实现电流 350mA, PWM开最大
231 5 }
232 4 else
233 4 { TH0 = TH0 - 1; }
234 4 }
235 3 else if( AD1_3 > 17)
236 3 { //如果充电电流 > 350mA, pwm--
237 4 if( TH0 > 253 )
238 4 { TH0 = 254; }
239 4 else
240 4 {
241 5 TH0 = TH0 + 1;
C51 COMPILER V7.50 CHONGDIANQI 03/12/2009 16:20:17 PAGE 5
242 5 }
243 4 }
244 3 }
245 2 else if( Constant_Voltage_Charge == 1 )
246 2 {
247 3 if( AD1_3 <= 1 ) // 充电电流 < 60mA
248 3 {
249 4 if( RTC_Counter == 0 ) { RTC_Counter = 1; } //开始延时50分钟结束充电
250 4 }
251 3 if( temp > 160 ) //temp=AD1_1, if Vout is > 4.23v(达到 4.23v), -- PWM
252 3 {
253 4 if( TH0 < 255)
254 4 {
255 5 TH0++;
256 5 }
257 4 }
258 3 else if( temp < 160 ) // if Vout is < 4.21v (达到 4.21v), ++PWM
259 3 {
260 4 if( TH0 > 1 )
261 4 {
262 5 TH0--;
263 5 }
264 4 }
265 3 }
266 2 AD1_3 = 0; // 重启 AD1_3
267 2 }
268 1 else
269 1 {
270 2 AD1_1 += AD1DAT1;
271 2 AD1_2 += AD1DAT2;
272 2 AD1_3 += AD1DAT3;
273 2 }
274 1 }
275 //***************************************************************************
276 //* RTC_Interrupt
277 //* Description : RTC 中断
278 //***************************************************************************
279 void RTC_Interrupt (void) interrupt 10 using 1
280 {
281 1 if( RTC_Counter != 0 ) { RTC_Counter++; }
282 1 {
283 2 RTC_Counter_LED++;
284 2 RTC_Counter_AD++;
285 2 }
286 1 if ( RTC_Counter_LED == LED_Flash_Speed)
287 1 {
288 2 LED_Flag = ~LED_Flag;
289 2 RTC_Counter_LED = 0;
290 2 }
291 1 if ( RTC_Counter_AD == AD_Convert_Speed )
292 1 {
293 2 AD_Flag = 1;
294 2 RTC_Counter_AD = 0;
295 2 }
296 1 if ( RTC_Counter == 6750) // 延时1分钟
297 1 {
298 2 RTC_Counter_Minute++;
299 2 RTC_Counter = 1;
300 2 if( Battery_On_Socket == 0) // 拔掉插座延时15S
301 2 {
302 3 Battery_On_Socket = 1;
303 3 RTC_Counter = 0;
C51 COMPILER V7.50 CHONGDIANQI 03/12/2009 16:20:17 PAGE 6
304 3 }
305 2 }
306 1 RTCCON = 0x63; //Clear RTCCON.7-RTCF
307 1 }
308 /*********************************************END***************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 656 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 16 ----
IDATA SIZE = ---- ----
BIT SIZE = 7 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -