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