📄 bat_ctrl24_ac.lst
字号:
258 /*编写日期:
259 /*最后修改日期:
260 /********************************************************************/
261 void Init_IO()
262 {
263 1 Clr_Dog();
264 1
265 1 P0M1 = 0x0c; //B00001100
266 1 P0M2 = 0x33; //B00110011
267 1 ADINS = 0x60; //B01100000
268 1 P1M1 = 0x2F; //B00101111
269 1 P1M2 = 0x04; //B00010000
270 1 PT0AD = 0x0C; //禁止P02、P03的数字输入功能
271 1 }
272 /*********************************************************************/
273 /*函数名:
274 /*功能:
275 /*输入参数:
276 /*返回值:
277 /*调用函数:
278 /*被调用函数:
279 /*编写日期:
280 /*最后修改日期:
281 /********************************************************************/
282 void Init_AD()
283 {
284 1 ADINS = 0x60; //选择CH1、CH2
285 1 ADCON1 = 0x45; //允许中断,使能ADC1,立即启动方式
286 1 ADMODA = 0x20; //双通道连续转换
287 1 ADMODB = 0x80; //分频 = 5
288 1 }
289 /*********************************************************************/
290 /*函数名:
291 /*功能:
292 /*输入参数:
293 /*返回值:
294 /*调用函数:
295 /*被调用函数:
296 /*编写日期:
297 /*最后修改日期:
298 /********************************************************************/
299 void Init_Timer()
300 {
301 1 Clr_Dog();
302 1
303 1 TRIM |= 0x80; //选择内部RC振荡器的输出作为CPU时钟
C51 COMPILER V7.50 BAT_CTRL24_AC 08/21/2007 20:04:08 PAGE 6
304 1 TMOD = 0x11; //定时器0工作在模式1
305 1 TAMOD = 0x00; //定时器0工作在模式1
306 1 TH0 = 0x80; //
307 1 TL0 = 0x00; //
308 1 TH1 = 0x80;
309 1 TL1 = 0x00;
310 1 TR0 = 1; //打开定时器0
311 1 TR1 = 1;
312 1 }
313 /*********************************************************************/
314 /*函数名:
315 /*功能:
316 /*输入参数:
317 /*返回值:
318 /*调用函数:
319 /*被调用函数:
320 /*编写日期:
321 /*最后修改日期:
322 /********************************************************************/
323 void Init_RTC()
324 {
325 1 RTCH = 0xE0;
326 1 RTCL = 0xFF; //一个周期1s
327 1 RTCCON = 0x63; //内部RC振荡器输出时钟,中断使能,RTC启动
328 1 }
329 /*********************************************************************/
330 /*函数名:
331 /*功能:
332 /*输入参数:
333 /*返回值:
334 /*调用函数:
335 /*被调用函数:
336 /*编写日期:
337 /*最后修改日期:
338 /********************************************************************/
339 void Init_WDT()
340 {
341 1 Clr_Dog();
342 1
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 BAT_CTRL24_AC 08/21/2007 20:04:08 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 P04 = 0; //负荷12关
392 1 P05 = 0; //关闭交流充电
393 1 P14 = 0; //
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 BAT_CTRL24_AC 08/21/2007 20:04:08 PAGE 8
428 1 return(mode);
429 1 }
430 /*********************************************************************/
431 /*函数名:
432 /*功能:
433 /*输入参数:
434 /*返回值:
435 /*调用函数:
436 /*被调用函数:
437 /*编写日期:
438 /*最后修改日期:
439 /********************************************************************/
440 void GetAd()
441 {
442 1 uchar i;
443 1 uint BatTmp,SunTmp;
444 1 Clr_Dog();
445 1
446 1 EAD = 0;
447 1 BatTmp = 0;
448 1 SunTmp = 0;
449 1 for(i=0;i<8;i++)
450 1 {
451 2 BatTmp += AdValue.BatAd[i];
452 2 SunTmp += AdValue.SunAd[i];
453 2 }
454 1 BatValue = BatTmp/8;
455 1 SunValue = SunTmp/8;
456 1 EAD = 1;
457 1 }
458 /*********************************************************************/
459 /*函数名:
460 /*功能:
461 /*输入参数:
462 /*返回值:
463 /*调用函数:
464 /*被调用函数:
465 /*编写日期:
466 /*最后修改日期:
467 /********************************************************************/
468 void Main_Logic24(uchar TimeMode)
469 {
470 1 Clr_Dog();
471 1
472 1 if(BatValue>TINGAC24)
473 1 {
474 2 P05 = 0; //关闭交流充电
475 2 }
476 1 if(BatValue<OFFAC24)
477 1 {
478 2 P05 = 0; //关闭交流充电
479 2 }
480 1 if(BatValue>OFFAC24+10 && BatValue<YUNAC24)
481 1 {
482 2 P05 = 1; //开启交流充电
483 2 }
484 1
485 1 Clr_Dog();
486 1
487 1 if(BatValue>TINGCHONG24)// && P14==0)
488 1 {
489 2 if(!StopFlag)
C51 COMPILER V7.50 BAT_CTRL24_AC 08/21/2007 20:04:08 PAGE 9
490 2 {
491 3 ET0 = 0;
492 3 enPWM = 0; //禁止PWM
493 3 P14 = 0; //停止充电
494 3 StopFlag = 1; //停止充电
495 3 ET0 = 1;
496 3 }
497 2 PowerFlag = 1; //允许放电
498 2 Led_Ctrl(1,2); //运行状态灯L3闪烁
499 2 Led_Ctrl(0,1); //过充过放灯L2亮
500 2 }
501 1 else if(BatValue>GUOCHONG24)
502 1 {
503 2 if(!StopFlag)
504 2 {
505 3 ET0 = 0;
506 3 enPWM = 1; //允许PWM
507 3 ET0 = 1;
508 3 }
509 2 PowerFlag = 1; //允许放电
510 2 if(SunValue>BatValue)
511 2 Led_Ctrl(1,1); //运行状态灯L3亮
512 2 else
513 2 Led_Ctrl(1,2);
514 2 Led_Ctrl(0,1); //过充过放灯L2亮
515 2 }
516 1 else if(BatValue>YUNFANG24)
517 1 {
518 2 if(!StopFlag)
519 2 {
520 3 ET0 = 0;
521 3 enPWM = 0; //禁止PWM
522 3 P14 = 1; //全速充
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -