📄 ldfxmain.lst
字号:
472 6 DAIBuf[i] = 0;
473 6 Cell[i].s = CELLERROR;
474 6 }
475 5 }
476 4 else
477 4 {
478 5 bhcount[i] = 0;
479 5 }
480 4 }
481 3 }
482 2 //软件电压保护电流保护处理end
483 2 //为工步续接而做的现场信息保存到F24C16 begin
C51 COMPILER V7.06 LDFXMAIN 06/06/2005 16:32:36 PAGE 9
484 2 OSSemPend(IICSem,0);
485 2 EepromWriteWord(SecondIICBase , Second);
486 2 EepromWriteByte(CurrentWorkStepIICBase,CurrentWorkStep);
487 2 EepromWriteByte(CurrentWorkStepMaxIICBase,CurrentWorkStepMax);
488 2 OSSemPost(IICSem);
489 2 for(i=0;i<24;i++)
490 2 {
491 3 OSSemPend(IICSem,0);
492 3
493 3 EepromWriteWord(Cell_CIICBase+i*4+0,(uint16)(Cell[i].c>>16));
494 3 EepromWriteWord(Cell_CIICBase+i*4+2,(uint16)(Cell[i].c));
495 3
496 3 EepromWriteWord(Cell_TIICBase + i*2, Cell[i].t);
497 3
498 3 EepromWriteByte(Cell_SIICBase + i, Cell[i].s);
499 3
500 3 OSSemPost(IICSem);
501 3 }//for(i=0;i<24;i++)
502 2 //为工步续接而做的现场信息保存到F24C16 end
503 2 //在电池放电过程中,电池电压每下降100mV记录一次到达这个电压值的时间 begin
504 2 //最后一次数据的记录由工步处理任务记录
505 2 if(count<255 && WorkStep[CurrentWorkStep].type == DISCHARGE)//如果上电超过5秒且电池状态为放电
506 2 count++;
507 2 if(count > 5 && WorkStep[CurrentWorkStep].type == DISCHARGE)//加上第二个条件可以提高效率
508 2 {
509 3 for(i=0;i<24;i++)
510 3 {
511 4 if(DAIBuf[i]>0 && Cell[i].s == DISCHARGE && ReferenceU[i] >= Cell[i].u && ReferenceU[i] >=
- 26000)
512 4 {//如果电流大于0 且 电池状态为放电 且 电池电压比设定值低 且 设定值大于2.6V
513 5 OSSemPend(IICSem,0);
514 5 EepromWriteWord(ReferenceUTimeIICBase + ((38000 - ReferenceU[i])/1000)*48 + i*2, Cell[
-i].t);
515 5 ReferenceU[i]-=1000;
516 5 EepromWriteWord(ReferenceUIICBase + i*2, ReferenceU[i]);
517 5 OSSemPost(IICSem);
518 5 }//if(Cell[i].s == DISCHARGE && referenceu[i] >= Cell[i].u)
519 4 }//for(i=0;i<24;i++)
520 3 }
521 2 //在电池放电过程中,电池电压每下降100mV记录一次到达这个电压值的时间 end
522 2 }//while (1)
523 1 }
524 /*********************************************************************************************************
525 ** 函数名称: TaskCellCheck
526 ** 功能描述: 电池对点报任务
527 ** 输 入: 无
528 ** 输 出: 无
529 ** 全局变量: Cell[i].u CellCheckUHigh CellCheckULow
530 ** 调用模块: OSWait
531 **
532 ** 作 者: 刘宝贵
533 ** 日 期: 2004年4月29日22:07
534 **-------------------------------------------------------------------------------------------------------
535 ** 修改人:
536 ** 日 期:
537 ** 内 容:
538 **-------------------------------------------------------------------------------------------------------
539 *********************************************************************************************************/
540 void TaskCellCheck(void)
541 {
542 1 uint8 data i;
543 1 uint8 xdata ledimg[24];
C51 COMPILER V7.06 LDFXMAIN 06/06/2005 16:32:36 PAGE 10
544 1 CellCheckFlag = 0;
545 1 while (1)
546 1 {
547 2 OSWait(K_TMO,(50*OS_TICKS_PER_SEC)/1000);
548 2 if(CellCheckFlag)
549 2 {
550 3 for(i=0;i<24;i++)
551 3 {
552 4 if(CellCheckU[i] > CellCheckUHigh || CellCheckU[i] < CellCheckULow)
553 4 ledimg[i] = 0xFF;
554 4 else
555 4 ledimg[i] = 0x00;
556 4 }
557 3 //以下程序用于控制电池电压不在设定范围内的点的指于灯闪烁
558 3 da(0,0);
559 3 da(0,1);
560 3 if(ledimg[0] ==0xFF){i=P4;i&=0x01;if(i == 0x01) P4 &= 0xFE; else P4 |= 0x01;} else P4&=0xFE;
561 3 if(ledimg[1] ==0xFF){i=P4;i&=0x02;if(i == 0x02) P4 &= 0xFD; else P4 |= 0x02;} else P4&=0xFD;
562 3 if(ledimg[2] ==0xFF){i=P4;i&=0x04;if(i == 0x04) P4 &= 0xFB; else P4 |= 0x04;} else P4&=0xFB;
563 3 if(ledimg[3] ==0xFF){i=P4;i&=0x08;if(i == 0x08) P4 &= 0xF7; else P4 |= 0x08;} else P4&=0xF7;
564 3 if(ledimg[4] ==0xFF){i=P4;i&=0x10;if(i == 0x10) P4 &= 0xEF; else P4 |= 0x10;} else P4&=0xEF;
565 3 if(ledimg[5] ==0xFF){i=P4;i&=0x20;if(i == 0x20) P4 &= 0xDF; else P4 |= 0x20;} else P4&=0xDF;
566 3 if(ledimg[6] ==0xFF){i=P4;i&=0x40;if(i == 0x40) P4 &= 0xBF; else P4 |= 0x40;} else P4&=0xBF;
567 3 if(ledimg[7] ==0xFF){i=P4;i&=0x80;if(i == 0x80) P4 &= 0x7F; else P4 |= 0x80;} else P4&=0x7F;
568 3
569 3 if(ledimg[8] ==0xFF){i=P5;i&=0x01;if(i == 0x01) P5 &= 0xFE; else P5 |= 0x01;} else P5&=0xFE;
570 3 if(ledimg[9] ==0xFF){i=P5;i&=0x02;if(i == 0x02) P5 &= 0xFD; else P5 |= 0x02;} else P5&=0xFD;
571 3 if(ledimg[10]==0xFF){i=P5;i&=0x04;if(i == 0x04) P5 &= 0xFB; else P5 |= 0x04;} else P5&=0xFB;
572 3 if(ledimg[11]==0xFF){i=P5;i&=0x08;if(i == 0x08) P5 &= 0xF7; else P5 |= 0x08;} else P5&=0xF7;
573 3
574 3 if(ledimg[12]==0xFF){i=P1;i&=0x80;if(i == 0x80) P1 &= 0x7F; else P1 |= 0x80;} else P1&=0x7F;
575 3 if(ledimg[13]==0xFF){i=P1;i&=0x40;if(i == 0x40) P1 &= 0xBF; else P1 |= 0x40;} else P1&=0xBF;
576 3 if(ledimg[14]==0xFF){i=P1;i&=0x20;if(i == 0x20) P1 &= 0xDF; else P1 |= 0x20;} else P1&=0xDF;
577 3 if(ledimg[15]==0xFF){i=P1;i&=0x10;if(i == 0x10) P1 &= 0xEF; else P1 |= 0x10;} else P1&=0xEF;
578 3 if(ledimg[16]==0xFF){i=P1;i&=0x08;if(i == 0x08) P1 &= 0xF7; else P1 |= 0x08;} else P1&=0xF7;
579 3 if(ledimg[17]==0xFF){i=P1;i&=0x04;if(i == 0x04) P1 &= 0xFB; else P1 |= 0x04;} else P1&=0xFB;
580 3 if(ledimg[18]==0xFF){i=P1;i&=0x02;if(i == 0x02) P1 &= 0xFD; else P1 |= 0x02;} else P1&=0xFD;
581 3 if(ledimg[19]==0xFF){i=P1;i&=0x01;if(i == 0x01) P1 &= 0xFE; else P1 |= 0x01;} else P1&=0xFE;
582 3
583 3 if(ledimg[20]==0xFF){i=P2;i&=0x80;if(i == 0x80) P2 &= 0x7F; else P2 |= 0x80;} else P2&=0x7F;
584 3 if(ledimg[21]==0xFF){i=P2;i&=0x40;if(i == 0x40) P2 &= 0xBF; else P2 |= 0x40;} else P2&=0xBF;
585 3 if(ledimg[22]==0xFF){i=P2;i&=0x20;if(i == 0x20) P2 &= 0xDF; else P2 |= 0x20;} else P2&=0xDF;
586 3 if(ledimg[23]==0xFF){i=P2;i&=0x10;if(i == 0x10) P2 &= 0xEF; else P2 |= 0x10;} else P2&=0xEF;
587 3 }//if(CellCheckFlag)
588 2 }//while (1)
589 1 }
590 /********************************************************************************************************/
591 void TaskF(void)
592 {
593 1 while (1)
594 1 {
595 2 OSWait(K_TMO,(50*OS_TICKS_PER_SEC)/1000);
596 2 }
597 1 }
598 /********************************************************************************************************/
599 void TaskG(void)
600 {
601 1 while (1)
602 1 {
603 2 OSWait(K_TMO,(200*OS_TICKS_PER_SEC)/1000);
604 2 }
605 1 }
C51 COMPILER V7.06 LDFXMAIN 06/06/2005 16:32:36 PAGE 11
606 /********************************************************************************************************/
607 void TaskH(void)
608 {
609 1 while (1)
610 1 {
611 2 OSWait(K_TMO,(100*OS_TICKS_PER_SEC)/1000);
612 2 RUNLED =!RUNLED;
613 2 }
614 1 }
615 /********************************************************************************************************/
616 void t2int(void) interrupt 5
617 {
618 1 TF2=0;
619 1 }
620 /*********************************************************************************************************
621 ** 函数名称: UserTickTimer
622 ** 功能描述: 本函数每个节拍在中断中执行一次,用于处理周期性的工作
623 ** 输 入: 无
624 ** 输 出: 无
625 ** 全局变量: AdBuf Cell
626 ** 调用模块: midst OSWait da
627 **
628 ** 作 者: 刘宝贵
629 ** 日 期: 2004年4月28日
630 **-------------------------------------------------------------------------------------------------------
631 ** 修改人:
632 ** 日 期:
633 **-------------------------------------------------------------------------------------------------------
634 *********************************************************************************************************/
635 void UserTickTimer(void) /* 系统定时中断中调用的用户函数 */
636 {
637 1 static uint8 data timer=0;
638 1 static uint8 data da_channel=0;
639 1 timer++;
640 1 if(timer==200)//每秒钟所做处理。
641 1 {
642 2 timer=0;
643 2 Second++;
644 2 OSIntSendSignal(TaskCalcCapa_ID);
645 2 }
646 1 //以下是对DA通道的处理
647 1 if(CurrentWorkStep!=0 && WorkStep[CurrentWorkStep].type > 1)//如果系统不处于停止或静止状态 0:停止 1:
-静止
648 1 {
649 2 da_channel++;
650 2 if(da_channel==24)
651 2 da_channel=0;
652 2 P4 &=0x00;
653 2 P5 &=0xF0;
654 2 P2 &=0x0F;
655 2 P1 &=0x00;//所有DA_EN脚均为0,使所有398处于保持状态
656 2 if(P7 < 0x80)//拔码开关最高位拔为1时用于测试过压保护是否有效
657 2 da(DAUBuf[da_channel],0);
658 2 else
659 2 da(4095,0);
660 2 da(DAIBuf[da_channel],1);
661 2 switch(da_channel)
662 2 {
663 3 case 0: P4|= 0x01; break;
664 3 case 1: P4|= 0x02; break;
665 3 case 2: P4|= 0x04; break;
666 3 case 3: P4|= 0x08; break;
C51 COMPILER V7.06 LDFXMAIN 06/06/2005 16:32:36 PAGE 12
667 3 case 4: P4|= 0x10; break;
668 3 case 5: P4|= 0x20; break;
669 3 case 6: P4|= 0x40; break;
670 3 case 7: P4|= 0x80; break;
671 3
672 3 case 8: P5|= 0x01; break;
673 3 case 9: P5|= 0x02; break;
674 3 case 10: P5|= 0x04; break;
675 3 case 11: P5|= 0x08; break;
676 3
677 3 case 12: P1|= 0x80; break;
678 3 case 13: P1|= 0x40; break;
679 3 case 14: P1|= 0x20; break;
680 3 case 15: P1|= 0x10; break;
681 3 case 16: P1|= 0x08; break;
682 3 case 17: P1|= 0x04; break;
683 3 case 18: P1|= 0x02; break;
684 3 case 19: P1|= 0x01; break;
685 3
686 3 case 20: P2|= 0x80; break;
687 3 case 21: P2|= 0x40; break;
688 3 case 22: P2|= 0x20; break;
689 3 case 23: P2|= 0x10; break;
690 3 }//switch(da_channel)
691 2 }//if(WorkStep[CurrentWorkStep].type > 1)//如果系统不处于停止或静止状态 0:停止 1:静止
692 1 }
693
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 4897 ----
CONSTANT SIZE = 72 ----
XDATA SIZE = ---- 1117
PDATA SIZE = ---- ----
DATA SIZE = 2 5
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -