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

📄 m101(2)x_test.lst

📁 kf902 104 IIC- 19200
💻 LST
📖 第 1 页 / 共 2 页
字号:
 276   1              cPa = ComReadPurse6;
 277   1              Send_IIC_Command(cPa);
 278   1              cStatus = Read_Iic_Data(g_cReceBuf);
 279   1              if ((g_cReceBuf[1] != cPa[1]) || cStatus != SUCCESS)
 280   1              {
 281   2                      return 11;
 282   2              }
 283   1              cPa = pursevalue;
 284   1              cPb = &g_cReceBuf[2];
 285   1              if (memcmp(cPa, cPb, 4) != 0)
 286   1              {
 287   2                      return 12;
 288   2              }
 289   1              
 290   1              cPa = ComHaltMCU;
 291   1              Send_IIC_Command(cPa);
 292   1              cStatus = Read_Iic_Data(g_cReceBuf);
 293   1              if ((g_cReceBuf[1] != cPa[1]) || cStatus != SUCCESS)
 294   1              {
 295   2                      return 13;
 296   2              }
 297   1              return SUCCESS;
 298   1      }
 299          
 300          /*****************************************************************************
 301          * 发光管错误指示
 302          *****************************************************************************/
 303          void ShowError(unsigned char cTimes)
C51 COMPILER V7.07   M101_2_X_TEST                                                         06/16/2007 18:14:26 PAGE 6   

 304          {
 305   1              Delay100uS(5000);
 306   1              while (cTimes--)
 307   1              {
 308   2                      LED_error = 0;
 309   2                      Delay100uS(1000);
 310   2                      LED_error = 1;
 311   2                      Delay100uS(1000);
 312   2              }
 313   1      }
 314          /*****************************************************************************
 315          错误,蜂鸣器1s
 316          *****************************************************************************/
 317          void Err()
 318          {
 319   1              BEEP = 1;
 320   1              Delay100uS(1000);
 321   1              BEEP = 0;
 322   1      }                                   
 323                   
 324          /*****************************************************************************
 325          系统初始化
 326          *****************************************************************************/
 327          void InitializeSystem()
 328          {
 329   1              TMOD  = 0x21;
 330   1              PCON |= 0x80;
 331   1              SCON  = 0xD0;
 332   1              TH1   = 0xFD;
 333   1              TL1   = TH1;
 334   1              TR1   = 0;
 335   1              IE   |= 0x00;
 336   1      }/*****************************************************************************
 337          *IIC start condition
 338          *****************************************************************************/
 339          void I2CStart(void)
 340          {
 341   1              SDA = 1;
 342   1              _nop_();
 343   1              SCL = 1;
 344   1              _nop_();
 345   1              SDA = 0;
 346   1              _nop_();
 347   1              _nop_();
 348   1              SCL = 0;
 349   1      }
 350          /*****************************************************************************
 351          *IIC stop condition
 352          *****************************************************************************/
 353          void I2CStop(void)
 354          {
 355   1              SCL = 0;
 356   1              _nop_();
 357   1              SDA = 0;
 358   1              _nop_();
 359   1              _nop_();
 360   1              SCL = 1;
 361   1              _nop_();
 362   1              SDA = 1;
 363   1      }
 364          /*****************************************************************************
 365          *IIC wait ACK
C51 COMPILER V7.07   M101_2_X_TEST                                                         06/16/2007 18:14:26 PAGE 7   

 366          *****************************************************************************/
 367          bit I2CWaitAck(void)
 368          {
 369   1              unsigned char cErrTime = 255;
 370   1              SDA = 1;
 371   1              _nop_();
 372   1              _nop_();
 373   1              SCL = 1;
 374   1              _nop_();
 375   1              while(SDA)
 376   1              {
 377   2                      cErrTime--;
 378   2                      _nop_();
 379   2                      _nop_();
 380   2                      _nop_();
 381   2                      _nop_();
 382   2                      _nop_();
 383   2                      _nop_();
 384   2                      _nop_();
 385   2                      _nop_();
 386   2              
 387   2                      if (0 == cErrTime)
 388   2                      {
 389   3                              I2CStop();
 390   3                              return FAILURE;
 391   3                      }
 392   2              }
 393   1              SCL = 0;
 394   1              return SUCCESS;
 395   1      }
 396          /*****************************************************************************
 397          *IC send ACK
 398          *****************************************************************************/
 399          void I2CSendAck(void)
 400          {
 401   1              _nop_();
 402   1              SDA = 0;
 403   1              _nop_();
 404   1              _nop_();
 405   1              SCL = 1;
 406   1              _nop_();
 407   1              SCL = 0;
 408   1              
 409   1      }
 410          /*****************************************************************************
 411          *IIC send Not ACK
 412          *****************************************************************************/
 413          void I2CSendNotAck(void)
 414          {
 415   1              _nop_();
 416   1              SDA = 1;
 417   1              _nop_();
 418   1              _nop_();
 419   1              SCL = 1;
 420   1              _nop_();
 421   1              SCL = 0;
 422   1      }
 423          /*****************************************************************************
 424          *IIC发送一个字节
 425          *****************************************************************************/
 426          void I2CSendByte(unsigned char cSendByte)
 427          {
C51 COMPILER V7.07   M101_2_X_TEST                                                         06/16/2007 18:14:26 PAGE 8   

 428   1              unsigned char data i = 8;
 429   1              while (i--)
 430   1              {
 431   2                      SCL = 0;
 432   2                      _nop_();
 433   2                      SDA = (bit)(cSendByte & 0x80);
 434   2                      cSendByte += cSendByte;
 435   2                      _nop_();
 436   2                      _nop_();
 437   2                      SCL = 1;
 438   2                      _nop_();
 439   2                      
 440   2              }
 441   1              SCL = 0;
 442   1              _nop_();
 443   1                      
 444   1      }
 445          /*****************************************************************************
 446          接收IIC一个字节
 447          *****************************************************************************/
 448          unsigned char I2CReceiveByte(void)
 449          {
 450   1              unsigned char data i = 8;
 451   1              unsigned char data cR_Byte = 0;
 452   1              SDA = 1;
 453   1              while (i--)
 454   1              {
 455   2                      cR_Byte += cR_Byte;
 456   2                      SCL = 0;
 457   2                      _nop_();
 458   2                      _nop_();
 459   2                      SCL = 1;
 460   2                      _nop_();
 461   2                      cR_Byte |= (unsigned char)SDA;
 462   2                      _nop_();
 463   2                      
 464   2              }
 465   1              SCL = 0;
 466   1              return cR_Byte;
 467   1      }
 468          /*****************************************************************************
 469          读取IIC返回的数据
 470          *****************************************************************************/
 471          unsigned char Read_Iic_Data(unsigned char *cP)
 472          {
 473   1              unsigned char cCnt;
 474   1              unsigned char cCheckSum = 0;
 475   1              for (cCnt=0; cCnt<0xFF; cCnt++) 
 476   1              {
 477   2                      Delay100uS(1);
 478   2                      I2CStart();
 479   2                      I2CSendByte(READ_M101XX);
 480   2                      if (I2CWaitAck() == SUCCESS)
 481   2                      {
 482   3                              LED_UART = ~LED_UART;
 483   3                              break;
 484   3                      }
 485   2              }
 486   1              if (0xFF == cCnt)
 487   1              {
 488   2                      return FAILURE;
 489   2              }
C51 COMPILER V7.07   M101_2_X_TEST                                                         06/16/2007 18:14:26 PAGE 9   

 490   1              cP[0]=2;
 491   1              for (cCnt=0; cCnt<cP[0]; cCnt++)        // in the protocol, cP[0] is the length of this data package
 492   1              {
 493   2                      cP[cCnt] = I2CReceiveByte();
 494   2                      I2CSendAck();
 495   2                      cCheckSum ^= cP[cCnt];
 496   2              }
 497   1              cP[cCnt] = I2CReceiveByte();
 498   1              I2CSendNotAck();
 499   1              I2CStop();
 500   1              if (cCheckSum != cP[cCnt])
 501   1              {
 502   2                      return FAILURE;
 503   2              }
 504   1              else
 505   1              {
 506   2                      return SUCCESS;
 507   2              }
 508   1      }
 509          /*****************************************************************************
 510          发送控制器命令
 511          *****************************************************************************/
 512          unsigned char Send_IIC_Command(unsigned char *cP)
 513          {
 514   1              unsigned char i;
 515   1              unsigned char cCheckSum = 0;
 516   1              I2CStart();
 517   1              I2CSendByte(WRITE_M101XX);
 518   1              if (I2CWaitAck() == SUCCESS)
 519   1              {
 520   2                      for(i=0; i<cP[0]; i++)  
 521   2                      {
 522   3                              cCheckSum ^= cP[i];
 523   3                              I2CSendByte(cP[i]);
 524   3                              if (I2CWaitAck() != SUCCESS)
 525   3                              {
 526   4                                      return FAILURE;
 527   4                              }
 528   3                      }
 529   2                      I2CSendByte(cCheckSum);
 530   2                      if (I2CWaitAck() != SUCCESS)
 531   2                      {
 532   3                              return FAILURE;
 533   3                      }
 534   2                      I2CStop();
 535   2              return SUCCESS;
 536   2              }
 537   1              else
 538   1              {
 539   2                      return FAILURE;
 540   2              }
 541   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1145    ----
   CONSTANT SIZE    =    142    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     60      28
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
C51 COMPILER V7.07   M101_2_X_TEST                                                         06/16/2007 18:14:26 PAGE 10  

END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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