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

📄 host.lst

📁 智能数字电流表。双CPU工作
💻 LST
📖 第 1 页 / 共 5 页
字号:
 268   1      }
 269          
 270          /*;*******************************************************************************************
 271          *
 272          ;* Name: WIP_POLL
 273          ;* Description: Write-In-Progress Polling
 274          ;* Function: This routine polls for completion of a nonvolatile write cycle by examining the
 275          ;* WIP bit of the status register
 276          ;* Calls: rdsr_cmdXicor Application Note AN21
 277          ;* Input: None
 278          ;* Outputs: None
 279          ;* Register Usage: R1, A
 280          ;*******************************************************************************************
 281          */
 282          /*检测写入的过程是否结束*/
 283          void wip_poll(void)
 284          {
 285   1       uchar aa;
 286   1       uchar idata my_flag;
 287   1       for (aa=1;aa<MAX_POLL;aa++)
 288   1       {
 289   2        my_flag=rdsr_cmd();
 290   2        if ((my_flag&&0x01)==0) {aa=MAX_POLL;}/*判断是否WIP=0,即判断是否写入过程已经结束,若结束就跳出,否则继续等
             -待直到达到最大记数值*/
 291   2       }
 292   1      }
 293          
 294          /*;*******************************************************************************************
 295          *
 296          ;* Name: OUTBYT
 297          ;* Description: Sends byte to EEPROM
 298          ;* Function: This routine shifts out a byte, starting with the MSB, to the EEPROM
 299          ;* Calls: None
 300          ;* Input: A = byte to be sent
 301          ;* Outputs: None
 302          ;* Register Usage: R0, A
C51 COMPILER V7.01  HOST                                                                   03/24/2005 22:10:08 PAGE 6   

 303          ;*******************************************************************************************
 304          */
 305          /*输出一个数据到25045,此数据可能为地址,先导字,写入的数据等*/
 306          void outbyt(aa)
 307          uchar aa;
 308          {
 309   1              uchar Data, i;
 310   1              Data = aa;
 311   1              for (i=0; i<8; i++)
 312   1              {
 313   2                      SCK=0;
 314   2              SI = (bit)(Data & 0x80);
 315   2                      Data = Data << 1;
 316   2                      SCK=1;
 317   2              }
 318   1          SI=0;/*使SI处于确定的状态*/ 
 319   1      }
 320          
 321          /*;*******************************************************************************************
 322          *
 323          ;* Name: INPUTBYT
 324          ;* Description: Recieves byte from EEPROM
 325          ;* Function: This routine recieves a byte, MSB first, from the EEPROM
 326          ;* Calls: None
 327          ;* Input: None
 328          ;* Outputs: A = recieved byte
 329          ;* Register Usage: R0, A
 330          ;*******************************************************************************************
 331          */
 332          /*得到一个数据,此数据可能为状态寄存器数据,读出的单元数据等*/
 333          uchar inputbyt(void)
 334          {
 335   1              uchar uData;
 336   1          char i;
 337   1          for (i=0; i<8; i++)
 338   1          {
 339   2               SCK=1;
 340   2               SCK=0; 
 341   2               uData *= 2;
 342   2                       if (SO)  
 343   2                           uData ++;
 344   2          }
 345   1          return uData;       
 346   1      }
 347          
 348          void WriteParams()    //保存参数
 349          {
 350   1              //保存零位到地址0;
 351   1              wren_cmd();
 352   1              page_write(Param.wZero.b[0], Param.wZero.b[1],
 353   1                      Param.wZero.b[2], Param.wZero.b[3], 0);
 354   1              //保存校准信号到地址4;
 355   1              wren_cmd();
 356   1              page_write(Param.wInCount.b[0], Param.wInCount.b[1],
 357   1                      Param.wInCount.b[2], Param.wInCount.b[3], 4);
 358   1              //保存输入值到地址8, 输出值到10;
 359   1              wren_cmd();
 360   1              page_write(Param.wInput.b[0], Param.wInput.b[1],
 361   1                      Param.wOutput.b[0], Param.wOutput.b[1], 8);
 362   1              //保存报警下限到地址12,报警上限到地址14;
 363   1              wren_cmd();
 364   1              page_write(Param.wALR_L.b[0], Param.wALR_L.b[1],
C51 COMPILER V7.01  HOST                                                                   03/24/2005 22:10:08 PAGE 7   

 365   1                      Param.wALR_H.b[0], Param.wALR_H.b[1], 12);
 366   1              //保存报警标志位,波特率下标,小数点位置,地址到地址16
 367   1              wren_cmd();
 368   1              page_write(Param.bAlert, Param.BaudIndex, 
 369   1                      Param.PointPos, Param.bAddress, 16);
 370   1              //保存密码下标到地址20
 371   1              wren_cmd();
 372   1              byte_write(Param.Password.b[0], 20);
 373   1              wren_cmd();
 374   1              byte_write(Param.Password.b[1], 21);
 375   1      }
 376          
 377          void ReadParams()     //读参数
 378          {
 379   1              uchar i;
 380   1              //读零位
 381   1              for (i=0; i<4; i++)
 382   1                      Param.wZero.b[i] = byte_read(i);
 383   1              //读校准信号
 384   1              for (i=0; i<4; i++)
 385   1                      Param.wInCount.b[i] = byte_read(i+4);
 386   1              //读输入值
 387   1              Param.wInput.b[0] = byte_read(8);
 388   1              Param.wInput.b[1] = byte_read(9);
 389   1              //读输出值
 390   1              Param.wOutput.b[0] = byte_read(10);
 391   1              Param.wOutput.b[1] = byte_read(11);
 392   1              //读报警下限
 393   1              Param.wALR_L.b[0] = byte_read(12);
 394   1              Param.wALR_L.b[1] = byte_read(13);
 395   1              //读报警上限
 396   1              Param.wALR_H.b[0] = byte_read(14);
 397   1              Param.wALR_H.b[1] = byte_read(15);
 398   1              //读报警标志位
 399   1              Param.bAlert = byte_read(16);
 400   1              //读波特率下标
 401   1              Param.BaudIndex = byte_read(17);
 402   1              //读小数点位置
 403   1              Param.PointPos = byte_read(18);
 404   1              //读地址
 405   1              Param.bAddress = byte_read(19);
 406   1              //读密码
 407   1              Param.Password.b[0] = byte_read(20);
 408   1              Param.Password.b[1] = byte_read(21);
 409   1      }
 410          
 411          void Delay(uint utime, uint utime2) reentrant
 412          { 
 413   1              uint utimein;
 414   1              while (utime --)
 415   1              {
 416   2                      rst_wdog();    
 417   2                      utimein = utime2;
 418   2                      while(utimein --)
 419   2                              rst_wdog();
 420   2              }
 421   1              return;
 422   1      }
 423          
 424          void I_Send(byte Data)
 425          {
 426   1           register byte i;
C51 COMPILER V7.01  HOST                                                                   03/24/2005 22:10:08 PAGE 8   

 427   1               //发送8位数据
 428   1               for (i=0; i<8; i++)
 429   1               {
 430   2                       CLK = 0;
 431   2                       _nop_();
 432   2                       _nop_();
 433   2                       _nop_();
 434   2                       _nop_();
 435   2                       _nop_();
 436   2                       DATA = (bit)(Data & 0x80);
 437   2                       Data = Data << 1;
 438   2                       CLK = 1;
 439   2               }
 440   1               CLK = 0;
 441   1               return;
 442   1      }
 443          
 444          //显示数据
 445          void Display(dword Data, uchar PointIndex) reentrant
 446          {
 447   1              byte Value, i;
 448   1              uchar Array[5];
 449   1              //换算段码
 450   1              for (i=0; i<5; i++)
 451   1              {
 452   2                      Value = Data % 10;
 453   2                      Data = Data / 10;
 454   2                      if ((i == 4 - PointIndex) && (PointIndex < 4))
 455   2                          Array[i] = uLEDChar[Value] | 0x40;
 456   2                      else
 457   2                          Array[i] = uLEDChar[Value];
 458   2                      rst_wdog();
 459   2              }
 460   1              //去除开始的0
 461   1              while (i--)
 462   1              {
 463   2                      if ((Array[i] == 0x3f) && (i > 4-PointIndex))
 464   2                      {    
 465   3                              Array[i] = 0x00;
 466   3                              rst_wdog();
 467   3                      }
 468   2                      else
 469   2                      {
 470   3                              rst_wdog();
 471   3                              break;
 472   3                      }
 473   2              }
 474   1              TRG = 1;
 475   1              TRG = 0;
 476   1              I_Send('T');
 477   1              Delay(1, 5);
 478   1          for (i=0; i<5; i++)
 479   1              {
 480   2                       I_Send(Array[i]);
 481   2                       rst_wdog();
 482   2              }
 483   1              return;
 484   1      }
 485          
 486          void GetKeyInput()
 487          {
 488   1              uchar KeyValue;
C51 COMPILER V7.01  HOST                                                                   03/24/2005 22:10:08 PAGE 9   

 489   1              KeyValue = P2 & 0xF0;   //去掉低4位
 490   1              if (KeyValue != 0xF0)
 491   1              {
 492   2                      flag = 0;
 493   2                      Delay(15, 500);
 494   2                      KeyValue = P2 & 0xF0;
 495   2              while ((P2 & 0xF0) != 0xF0)
 496   2                           rst_wdog();
 497   2                      switch (KeyValue)
 498   2                      {
 499   3                      case 0xE0:  //左键
 500   3                              KeyFuncIndex = KeyTab[KeyFuncIndex].KeyLeftState;
 501   3                              if (KeyFuncIndex == 0) 
 502   3                                  flag = 1;   
 503   3                              break;
 504   3                      case 0xD0:  //右键
 505   3                              KeyFuncIndex = KeyTab[KeyFuncIndex].KeyRightState;
 506   3                              if (KeyFuncIndex == 0) 
 507   3                                  flag = 1;   
 508   3                              break;
 509   3                      case 0xB0:  //MENU
 510   3                              KeyFuncIndex = KeyTab[KeyFuncIndex].KeyMenuState;       
 511   3                              break;
 512   3                      case 0x70:  //回车
 513   3                              KeyFuncIndex = KeyTab[KeyFuncIndex].KeyEnterState;
 514   3                              break;
 515   3                      default:
 516   3                          //KeyFuncIndex = 30;//默认显示电流
 517   3                          //DisplayCurrent();
 518   3                              return;
 519   3                      }
 520   2                      rst_wdog();
 521   2                      KeyFuncPtr = KeyTab[KeyFuncIndex].CurrentOperate;
 522   2                      (*KeyFuncPtr)();  //执行
 523   2              }       
 524   1              return;
 525   1      }
 526          
 527          void GetParamsCode(uchar *pChar, uchar begin, word wData) reentrant    //段码、显示片选起点、参数
 528          {
 529   1              uchar i;
 530   1              if (wData > 0)
 531   1              {       
 532   2                      for (i=4; i>=begin; i--)
 533   2                      {
 534   3                              pChar[i] = uLEDChar[wData % 10];
 535   3                              wData = wData / 10;
 536   3                              rst_wdog();
 537   3                      }
 538   2                      if (Param.PointPos < 5)
 539   2                          pChar[Param.PointPos] |= 0x40; 
 540   2          }
 541   1      }
 542          

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -