⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ldfxmain.lst

📁 一个分选系统的软件:用SmallRtos操作系统
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -