📄 charge.lst
字号:
251 1 enL2 = 0;
252 1 enL3 = 0;
253 1 enPWM = 0;
254 1 enDelay1 = 0;
255 1 enDelay2 = 0;
256 1 }
257 /*********************************************************************/
258 /*函数名:
259 /*功能:
260 /*输入参数:
261 /*返回值:
262 /*调用函数:
263 /*被调用函数:
264 /*编写日期:
265 /*最后修改日期:
266 /********************************************************************/
267 void Init_IO()
268 {
269 1 P0M1 = 0x0c; //B00001100
270 1 P0M2 = 0x33; //B00110011
271 1 ADINS = 0x60; //B01100000
272 1 P1M1 = 0x2F; //B00101111
273 1 P1M2 = 0x04; //B00010000
274 1 PT0AD = 0x0C; //禁止P02、P03的数字输入功能
275 1 }
276 /*********************************************************************/
277 /*函数名:
278 /*功能:
279 /*输入参数:
280 /*返回值:
281 /*调用函数:
282 /*被调用函数:
283 /*编写日期:
284 /*最后修改日期:
285 /********************************************************************/
286 void Init_AD()
287 {
288 1 ADINS = 0x60; //选择CH1、CH2
289 1 ADCON1 = 0x45; //允许中断,使能ADC1,立即启动方式
290 1 ADMODA = 0x20; //双通道连续转换
291 1 ADMODB = 0x80; //分频 = 5
292 1 }
293 /*********************************************************************/
294 /*函数名:
295 /*功能:
296 /*输入参数:
297 /*返回值:
298 /*调用函数:
299 /*被调用函数:
300 /*编写日期:
301 /*最后修改日期:
302 /********************************************************************/
303 void Init_Timer()
C51 COMPILER V7.50 CHARGE 03/09/2009 16:55:11 PAGE 6
304 {
305 1 TRIM |= 0x80; //选择内部RC振荡器的输出作为CPU时钟
306 1 TMOD = 0x11; //定时器0工作在模式1
307 1 TAMOD = 0x00; //定时器0工作在模式1
308 1 TH0 = 0x80; //
309 1 TL0 = 0x00; //
310 1 TH1 = 0x80;
311 1 TL1 = 0x00;
312 1 TR0 = 1; //打开定时器0
313 1 TR1 = 1;
314 1 }
315 /*********************************************************************/
316 /*函数名:
317 /*功能:
318 /*输入参数:
319 /*返回值:
320 /*调用函数:
321 /*被调用函数:
322 /*编写日期:
323 /*最后修改日期:
324 /********************************************************************/
325 void Init_RTC()
326 {
327 1 RTCH = 0xE0;
328 1 RTCL = 0xFF; //一个周期1s
329 1 RTCCON = 0x63; //内部RC振荡器输出时钟,中断使能,RTC启动
330 1 }
331 /*********************************************************************/
332 /*函数名:
333 /*功能:
334 /*输入参数:
335 /*返回值:
336 /*调用函数:
337 /*被调用函数:
338 /*编写日期:
339 /*最后修改日期:
340 /********************************************************************/
341 void Init_WDT()
342 {
343 1 ACC = WDCON; //读取WDT控制寄存器
344 1 ACC = ACC|0x04; //置位ACC.2准备启动WDT
345 1 WDL = 0x80; //设置8位倒计时器初值
346 1 WDCON = ACC; //启动WDT
347 1 WFEED1 = 0xA5; //清零第一部分
348 1 WFEED2 = 0x5A; //清零第二部分
349 1 }
350 /*********************************************************************/
351 /*函数名:
352 /*功能:
353 /*输入参数:
354 /*返回值:
355 /*调用函数:
356 /*被调用函数:
357 /*编写日期:
358 /*最后修改日期:
359 /********************************************************************/
360 void Init_Interrupt()
361 {
362 1 EWDRT = 1; //实时时钟中断使能
363 1 EAD = 1; //AD中断使能
364 1 ET0 = 1; //
365 1 ET1 = 1;
C51 COMPILER V7.50 CHARGE 03/09/2009 16:55:11 PAGE 7
366 1 EA = 1; //总中断使能
367 1 }
368 /*********************************************************************/
369 /*函数名:
370 /*功能:
371 /*输入参数:
372 /*返回值:
373 /*调用函数:
374 /*被调用函数:
375 /*编写日期:
376 /*最后修改日期:
377 /********************************************************************/
378 void Init_All()
379 {
380 1 Clr_Dog();
381 1
382 1 Init_Var();
383 1 Init_IO();
384 1 Init_AD();
385 1 Init_Timer();
386 1 Init_RTC();
387 1 Init_WDT();
388 1 Init_Interrupt();
389 1 Led_Ctrl(1,2); //L3闪烁——正常运行
390 1 Led_Ctrl(0,0); //L2灭——没有过充或过放
391 1 charge_ctrl = 0; //负荷12关
392 1 charge_ctrlB = 0; //负荷11关
393 1 charge_output = 1; //充电
394 1 }
395 /*********************************************************************/
396 /*函数名:
397 /*功能:
398 /*输入参数:
399 /*返回值:
400 /*调用函数:
401 /*被调用函数:
402 /*编写日期:
403 /*最后修改日期:
404 /********************************************************************/
405 uchar Get_Mode()
406 {
407 1 uchar mode;
408 1
409 1 Clr_Dog();
410 1
411 1 mode = 0;
412 1 if(!P11)
413 1 {
414 2 mode += 1;
415 2 }
416 1 if(!P10)
417 1 {
418 2 mode += 2;
419 2 }
420 1 if(!P13)
421 1 {
422 2 mode += 4;
423 2 }
424 1 if(!P12)
425 1 {
426 2 mode += 8;
427 2 }
C51 COMPILER V7.50 CHARGE 03/09/2009 16:55:11 PAGE 8
428 1 return(mode);
429 1 }
430 /*********************************************************************/
431 /*函数名:
432 /*功能:
433 /*输入参数:
434 /*返回值:
435 /*调用函数:
436 /*被调用函数:
437 /*编写日期:
438 /*最后修改日期:
439 /********************************************************************/
440 uchar GetAd()
441 {
442 1 uchar i;
443 1 uint BatTmp,SunTmp;
444 1 EAD = 0;
445 1 BatTmp = 0;
446 1 SunTmp = 0;
447 1 for(i=0;i<8;i++)
448 1 {
449 2 BatTmp += AdValue.BatAd[i];
450 2 SunTmp += AdValue.SunAd[i];
451 2 }
452 1 BatValue = BatTmp/8;
453 1 SunValue = SunTmp/8;
454 1
455 1 return(BatValue);
456 1 EAD = 1;
457 1 }
458 /*********************************************************************/
459 /*函数名:
460 /*功能:
461 /*输入参数:
462 /*返回值:
463 /*调用函数:
464 /*被调用函数:
465 /*编写日期:
466 /*最后修改日期:
467 /********************************************************************/
468 void Main_Logic12(uchar TimeMode)
469 {
470 1 Clr_Dog();
471 1
472 1 if(BatValue>TINGCHONG12)// && charge_output==0)
473 1 {
474 2 enPWM = 0; //禁止PWM
475 2 charge_output = 0; //停止充电
476 2 PowerFlag = 1; //允许放电
477 2 Led_Ctrl(1,2); //运行状态灯L3闪烁
478 2 Led_Ctrl(0,1); //过充过放灯L2亮
479 2 }
480 1 else if(BatValue>GUOCHONG12)
481 1 {
482 2 enPWM = 1; //允许PWM
483 2 PowerFlag = 1; //允许放电
484 2 if(SunValue>BatValue)
485 2 Led_Ctrl(1,1); //运行状态灯L3亮
486 2 else
487 2 Led_Ctrl(1,2);
488 2 Led_Ctrl(0,1); //过充过放灯L2亮
489 2 }
C51 COMPILER V7.50 CHARGE 03/09/2009 16:55:11 PAGE 9
490 1 else if(BatValue>YUNFANG12)
491 1 {
492 2 enPWM = 0; //禁止PWM
493 2 charge_output = 1; //全速充电
494 2 PowerFlag = 1; //允许放电
495 2 if(SunValue>BatValue)
496 2 Led_Ctrl(1,1); //运行状态灯L3亮
497 2 else
498 2 Led_Ctrl(1,2);
499 2 Led_Ctrl(0,0); //过充过放灯L2灭
500 2 }
501 1 else;
502 1
503 1 Clr_Dog();
504 1
505 1 if(BatValue<GUOFANG12)
506 1 {
507 2 charge_ctrlB = 0; //关闭负荷11
508 2 charge_ctrl = 0; //关闭负荷12
509 2 enPWM = 0; //禁止PWM
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -