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

📄 ldfxmain.lst

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