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