📄 ldfxmain.lst
字号:
427 2 /*以下程序将实现:在电池放电过程中,电池电压每下降100mV记录一次到达这个电压值的时间*/
428 2 if(count < 255 && WorkStep[CurrentWorkStep].type== DISCHARGE)
429 2 count++;
430 2 if(count > 5)//上电后且放电后延时5秒,为了待电压稳定以便设定平台电压值
431 2 {
432 3 if(count==6)
433 3 {
434 4 for(i=0;i<24;i++)//设置平台电压值
435 4 {
436 5 Referenceu[i] = Cell[i].u / 1000;
437 5 Referenceu[i] *= 1000;
438 5 }
439 4 }
440 3 for(i=0;i<24;i++)
441 3 {
442 4 if(Cell[i].s == DISCHARGE && Referenceu[i] >= Cell[i].u && Referenceu[i] >= 26000)
443 4 {
444 5 OSSemPend(IICSem,0);
445 5 EepromWriteWord(ReferenceUIICBase + ((38000 - Referenceu[i])/1000)*48 + i*2, Cell[i].t
-);
446 5 OSSemPost(IICSem);
447 5 Referenceu[i]-=1000;
448 5 }//if(Cell[i].s == DISCHARGE && referenceu[i] >= Cell[i].u)
449 4 }//for(i=0;i<24;i++)
450 3 }//if(count > 5)//上电后且放电后延时5秒,为了待电压稳定以便设定平台电压值
451 2 }//while (1)
452 1 }
453 /*********************************************************************************************************
454 ** 函数名称: TaskCellCheck
455 ** 功能描述: 电池对点报任务
456 ** 输 入: 无
457 ** 输 出: 无
458 ** 全局变量: Cell[i].u CellCheckUHigh CellCheckULow
459 ** 调用模块: OSWait
460 **
461 ** 作 者: 刘宝贵
462 ** 日 期: 2004年4月29日22:07
463 **-------------------------------------------------------------------------------------------------------
464 ** 修改人:
465 ** 日 期:
466 ** 内 容:
467 **-------------------------------------------------------------------------------------------------------
468 *********************************************************************************************************/
469 void TaskCellCheck(void)
470 {
471 1 uint8 data i;
472 1 uint8 xdata ledimg[24];
473 1 while (1)
474 1 {
475 2 OSSemPend(StartCellCheckSem,0);
476 2 while(OSSemAccept(StopCellCheckSem) == OS_SEM_NOT_OK)
477 2 {
478 3 for(i=0;i<24;i++)
479 3 {
480 4 if(CellCheckU[i] > CellCheckUHigh || CellCheckU[i] < CellCheckULow)
481 4 ledimg[i] = 0xFF;
482 4 else
483 4 ledimg[i] = 0x00;
484 4 }
485 3 //以下程序用于控制电池电压不在设定范围内的点的指于灯闪烁
486 3 da(0,0);
487 3 da(0,1);
C51 COMPILER V7.06 LDFXMAIN 11/19/2004 13:36:18 PAGE 9
488 3 if(ledimg[0] ==0xFF){i=P4;i&=0x01;if(i == 0x01) P4 &= 0xFE; else P4 |= 0x01;} else P4&=0xFE;
489 3 if(ledimg[1] ==0xFF){i=P4;i&=0x02;if(i == 0x02) P4 &= 0xFD; else P4 |= 0x02;} else P4&=0xFD;
490 3 if(ledimg[2] ==0xFF){i=P4;i&=0x04;if(i == 0x04) P4 &= 0xFB; else P4 |= 0x04;} else P4&=0xFB;
491 3 if(ledimg[3] ==0xFF){i=P4;i&=0x08;if(i == 0x08) P4 &= 0xF7; else P4 |= 0x08;} else P4&=0xF7;
492 3 if(ledimg[4] ==0xFF){i=P4;i&=0x10;if(i == 0x10) P4 &= 0xEF; else P4 |= 0x10;} else P4&=0xEF;
493 3 if(ledimg[5] ==0xFF){i=P4;i&=0x20;if(i == 0x20) P4 &= 0xDF; else P4 |= 0x20;} else P4&=0xDF;
494 3 if(ledimg[6] ==0xFF){i=P4;i&=0x40;if(i == 0x40) P4 &= 0xBF; else P4 |= 0x40;} else P4&=0xBF;
495 3 if(ledimg[7] ==0xFF){i=P4;i&=0x80;if(i == 0x80) P4 &= 0x7F; else P4 |= 0x80;} else P4&=0x7F;
496 3
497 3 if(ledimg[8] ==0xFF){i=P5;i&=0x01;if(i == 0x01) P5 &= 0xFE; else P5 |= 0x01;} else P5&=0xFE;
498 3 if(ledimg[9] ==0xFF){i=P5;i&=0x02;if(i == 0x02) P5 &= 0xFD; else P5 |= 0x02;} else P5&=0xFD;
499 3 if(ledimg[10]==0xFF){i=P5;i&=0x04;if(i == 0x04) P5 &= 0xFB; else P5 |= 0x04;} else P5&=0xFB;
500 3 if(ledimg[11]==0xFF){i=P5;i&=0x08;if(i == 0x08) P5 &= 0xF7; else P5 |= 0x08;} else P5&=0xF7;
501 3
502 3 if(ledimg[12]==0xFF){i=P1;i&=0x80;if(i == 0x80) P1 &= 0x7F; else P1 |= 0x80;} else P1&=0x7F;
503 3 if(ledimg[13]==0xFF){i=P1;i&=0x40;if(i == 0x40) P1 &= 0xBF; else P1 |= 0x40;} else P1&=0xBF;
504 3 if(ledimg[14]==0xFF){i=P1;i&=0x20;if(i == 0x20) P1 &= 0xDF; else P1 |= 0x20;} else P1&=0xDF;
505 3 if(ledimg[15]==0xFF){i=P1;i&=0x10;if(i == 0x10) P1 &= 0xEF; else P1 |= 0x10;} else P1&=0xEF;
506 3 if(ledimg[16]==0xFF){i=P1;i&=0x08;if(i == 0x08) P1 &= 0xF7; else P1 |= 0x08;} else P1&=0xF7;
507 3 if(ledimg[17]==0xFF){i=P1;i&=0x04;if(i == 0x04) P1 &= 0xFB; else P1 |= 0x04;} else P1&=0xFB;
508 3 if(ledimg[18]==0xFF){i=P1;i&=0x02;if(i == 0x02) P1 &= 0xFD; else P1 |= 0x02;} else P1&=0xFD;
509 3 if(ledimg[19]==0xFF){i=P1;i&=0x01;if(i == 0x01) P1 &= 0xFE; else P1 |= 0x01;} else P1&=0xFE;
510 3
511 3 if(ledimg[20]==0xFF){i=P2;i&=0x80;if(i == 0x80) P2 &= 0x7F; else P2 |= 0x80;} else P2&=0x7F;
512 3 if(ledimg[21]==0xFF){i=P2;i&=0x40;if(i == 0x40) P2 &= 0xBF; else P2 |= 0x40;} else P2&=0xBF;
513 3 if(ledimg[22]==0xFF){i=P2;i&=0x20;if(i == 0x20) P2 &= 0xDF; else P2 |= 0x20;} else P2&=0xDF;
514 3 if(ledimg[23]==0xFF){i=P2;i&=0x10;if(i == 0x10) P2 &= 0xEF; else P2 |= 0x10;} else P2&=0xEF;
515 3
516 3 OSWait(K_TMO,(50*OS_TICKS_PER_SEC)/1000);
517 3 }//while(OSSemAccept(StopCellCheckSem) == OS_SEM_NOT_OK)
518 2 }//while (1)
519 1 }
520 /********************************************************************************************************/
521 void TaskF(void)
522 {
523 1 while (1)
524 1 {
525 2 OSWait(K_TMO,(50*OS_TICKS_PER_SEC)/1000);
526 2 }
527 1 }
528 /********************************************************************************************************/
529 void TaskG(void)
530 {
531 1 while (1)
532 1 {
533 2 OSWait(K_TMO,(200*OS_TICKS_PER_SEC)/1000);
534 2 }
535 1 }
536 /********************************************************************************************************/
537 void TaskH(void)
538 {
539 1 while (1)
540 1 {
541 2 OSWait(K_TMO,(100*OS_TICKS_PER_SEC)/1000);
542 2 RUNLED =!RUNLED;
543 2 if(P5 & 0x10 == 0x10) //P54 is clear watchdog cpu pin
544 2 P5 &= 0xEF;
545 2 else
546 2 P5 |= 0x10;
547 2 }
548 1 }
549 /********************************************************************************************************/
C51 COMPILER V7.06 LDFXMAIN 11/19/2004 13:36:18 PAGE 10
550 void t2int(void) interrupt 5
551 {
552 1 TF2=0;
553 1 }
554 /*********************************************************************************************************
555 ** 函数名称: UserTickTimer
556 ** 功能描述: 本函数每个节拍在中断中执行一次,用于处理周期性的工作
557 ** 输 入: 无
558 ** 输 出: 无
559 ** 全局变量: AdBuf Cell
560 ** 调用模块: midst OSWait da
561 **
562 ** 作 者: 刘宝贵
563 ** 日 期: 2004年4月28日
564 **-------------------------------------------------------------------------------------------------------
565 ** 修改人:
566 ** 日 期:
567 **-------------------------------------------------------------------------------------------------------
568 *********************************************************************************************************/
569 void UserTickTimer(void) /* 系统定时中断中调用的用户函数 */
570 {
571 1 static uint8 data timer=0;
572 1 static uint8 data da_channel=0;
573 1 timer++;
574 1 if(timer==200)//每秒钟所做处理。
575 1 {
576 2 timer=0;
577 2 Second++;
578 2 OSIntSendSignal(TaskCalcCapa_ID);
579 2 }
580 1 //以下是对DA通道的处理
581 1 if(CurrentWorkStep!=0 && WorkStep[CurrentWorkStep].type > 1)//如果系统不处于停止或静止状态 0:停止 1:
-静止
582 1 {
583 2 da_channel++;
584 2 if(da_channel==24)
585 2 da_channel=0;
586 2 P4 &=0x00;
587 2 P5 &=0xF0;
588 2 P2 &=0x0F;
589 2 P1 &=0x00;//所有DA_EN脚均为0,使所有398处于保持状态
590 2 if(P7 < 0x80)//拔码开关最高位拔为1时用于测试过压保护是否有效
591 2 da(DAUBuf[da_channel],0);
592 2 else
593 2 da(4095,0);
594 2 da(DAIBuf[da_channel],1);
595 2 switch(da_channel)
596 2 {
597 3 case 0: P4|= 0x01; break;
598 3 case 1: P4|= 0x02; break;
599 3 case 2: P4|= 0x04; break;
600 3 case 3: P4|= 0x08; break;
601 3 case 4: P4|= 0x10; break;
602 3 case 5: P4|= 0x20; break;
603 3 case 6: P4|= 0x40; break;
604 3 case 7: P4|= 0x80; break;
605 3
606 3 case 8: P5|= 0x01; break;
607 3 case 9: P5|= 0x02; break;
608 3 case 10: P5|= 0x04; break;
609 3 case 11: P5|= 0x08; break;
610 3
C51 COMPILER V7.06 LDFXMAIN 11/19/2004 13:36:18 PAGE 11
611 3 case 12: P1|= 0x80; break;
612 3 case 13: P1|= 0x40; break;
613 3 case 14: P1|= 0x20; break;
614 3 case 15: P1|= 0x10; break;
615 3 case 16: P1|= 0x08; break;
616 3 case 17: P1|= 0x04; break;
617 3 case 18: P1|= 0x02; break;
618 3 case 19: P1|= 0x01; break;
619 3
620 3 case 20: P2|= 0x80; break;
621 3 case 21: P2|= 0x40; break;
622 3 case 22: P2|= 0x20; break;
623 3 case 23: P2|= 0x10; break;
624 3 }//switch(da_channel)
625 2 }//if(WorkStep[CurrentWorkStep].type > 1)//如果系统不处于停止或静止状态 0:停止 1:静止
626 1 }
627
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 4100 ----
CONSTANT SIZE = 48 ----
XDATA SIZE = ---- 1093
PDATA SIZE = ---- ----
DATA SIZE = 2 5
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -