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

📄 24c04.lst

📁 内容摘要: LHD6000主板主芯片程序 ISD1730时序说明: 参考:void Send_1Byte(uchar ucData_s)和uchar Receive_1Byte(void)的说明.
💻 LST
📖 第 1 页 / 共 2 页
字号:
 283   3                  return ERR_ILLEGAL_ADD;
 284   3              }
 285   2              else if (0 != (uiAddRead >> 8))
 286   2              {
 287   3                  Send8Bit(ADD_WRITE_24C04 | 0x02);
 288   3              }
 289   2              else
 290   2              {
 291   3                  Send8Bit(ADD_WRITE_24C04);
 292   3              }
 293   2              g_FlagWaiting24C04Ack = 1;
 294   2          }while (ReadAck());
 295   1      
 296   1          Send8Bit(uiAddRead);
 297   1          ReadAck();
 298   1      
 299   1          g_ucTimer24C04Ack = WAIT_ACK_TIME;
 300   1          g_FlagWaiting24C04Ack = 0;
 301   1          do
 302   1          {
 303   2              I2CStart();
C51 COMPILER V8.02   24C04                                                                 05/18/2008 16:43:11 PAGE 6   

 304   2              if (g_FlagWaiting24C04Ack && (0 == g_ucTimer24C04Ack))
 305   2              {
 306   3                  I2CStop();
 307   3                  return ERR_TIME_OV;
 308   3              }
 309   2      
 310   2              //判断地址范围,不再判断是否超出24C04范围,只判断要选第一页还是第二页
 311   2              if (0 != (uiAddRead >> 8))
 312   2              {
 313   3                  Send8Bit(ADD_READ_24C04 | 0x02);
 314   3              }
 315   2              else
 316   2              {
 317   3                  Send8Bit(ADD_READ_24C04);
 318   3              }
 319   2              g_FlagWaiting24C04Ack = 1;
 320   2          }while (ReadAck());
 321   1      
 322   1          ucDataRead = Recev8Bit();
 323   1          I2CStop();
 324   1          return ucDataRead;
 325   1      }
 326          
 327          /*******************************************************************************
 328          * 函数名称: unsigned char PageWrite(unsigned char const idata *pucDataWrt,
 329          *                                    unsigned int uiAddStart_PgWr,
 330          *                                    unsigned char ucLength_PgWr);
 331          * 功能描述: 将 pucDataWrt 所指数据,写入地址 uiAddStart 到
 332          *             地址uiAddStart + length 之间的区域
 333          * 输入参数: pucDataWrt所指的 length 个字节
 334          * 输出参数: 无
 335          * 返 回 值: 成功写入的字节数。
 336          *******************************************************************************/
 337          unsigned char PageWrite(unsigned char const idata *pucDataWrt, unsigned int uiAddStart_PgWr,
 338                                  unsigned char ucLength_PgWr)
 339          {
 340   1          unsigned char ucWrtCount = 0;
 341   1          
 342   1          while (ucLength_PgWr--)
 343   1          {
 344   2              if ((0 == ucWrtCount) || (0 == uiAddStart_PgWr%16))
 345   2              {
 346   3                  g_ucTimer24C04Ack = WAIT_ACK_TIME;
 347   3                  g_FlagWaiting24C04Ack = 0;
 348   3                  I2CStop();
 349   3                  do
 350   3                  {
 351   4                      //等待大于10ms,停止等待,返回成功写入字节数
 352   4                      if (g_FlagWaiting24C04Ack && (0 == g_ucTimer24C04Ack))
 353   4                      {
 354   5                          I2CStop();
 355   5                          return ucWrtCount;
 356   5                      }
 357   4                      I2CStart();
 358   4                      if (0 != (uiAddStart_PgWr >> 9))
 359   4                      {
 360   5                          I2CStop();
 361   5                          return ucWrtCount;
 362   5                      }
 363   4                      else if (0 != (uiAddStart_PgWr >> 8))
 364   4                      {
 365   5                          Send8Bit(ADD_WRITE_24C04 | 0x02);
C51 COMPILER V8.02   24C04                                                                 05/18/2008 16:43:11 PAGE 7   

 366   5                      }
 367   4                      else
 368   4                      {
 369   5                          Send8Bit(ADD_WRITE_24C04);
 370   5                      }
 371   4                      g_FlagWaiting24C04Ack = 1;
 372   4                  }while (ReadAck());
 373   3                  Send8Bit(uiAddStart_PgWr);
 374   3                  ReadAck();
 375   3              }
 376   2              Send8Bit(*pucDataWrt++);
 377   2              ReadAck();
 378   2              ucWrtCount++;   
 379   2              uiAddStart_PgWr++;
 380   2          }
 381   1          I2CStop();
 382   1          return ucWrtCount;
 383   1      }
 384          
 385          /*******************************************************************************
 386          * 函数名称: unsigned char PageFill(unsigned char const idata ucDataPgFill,
 387          *                                   unsigned int uiAddStart_Fill,
 388          *                                   unsigned char ucLengthFill);
 389          * 功能描述: 将数据 ucDataPgFill,写入地址 uiAddStart_Fill 到
 390          *             uiAddStart_Fill + ucLengthFill 之间的区域
 391          * 输入参数: pucDataWrt所指的 length 个字节
 392          * 输出参数: 无
 393          * 返 回 值: 成功写入的字节数。
 394          *******************************************************************************/
 395          unsigned char PageFill(unsigned char const idata ucDataPgFill, unsigned int uiAddStart_Fill,
 396                                 unsigned char ucLengthFill)
 397          {
 398   1          unsigned char ucFillCount = 0;
 399   1          
 400   1          while (ucLengthFill--)
 401   1          {
 402   2              if ((0 == ucFillCount) || (0 == uiAddStart_Fill%16))
 403   2              {
 404   3                  g_ucTimer24C04Ack = WAIT_ACK_TIME;
 405   3                  g_FlagWaiting24C04Ack = 0;
 406   3                  I2CStop();
 407   3                  do
 408   3                  {
 409   4                      //等待大于10ms,停止等待,返回成功写入字节数
 410   4                      if (g_FlagWaiting24C04Ack && (0 == g_ucTimer24C04Ack))
 411   4                      {
 412   5                          I2CStop();
 413   5                          return ucFillCount;
 414   5                      }
 415   4                      I2CStart();
 416   4                      if (0 != (uiAddStart_Fill >> 9))
 417   4                      {
 418   5                          I2CStop();
 419   5                          return ucFillCount;
 420   5                      }
 421   4                      else if (0 != (uiAddStart_Fill >> 8))
 422   4                      {
 423   5                          Send8Bit(ADD_WRITE_24C04 | 0x02);
 424   5                      }
 425   4                      else
 426   4                      {
 427   5                          Send8Bit(ADD_WRITE_24C04);
C51 COMPILER V8.02   24C04                                                                 05/18/2008 16:43:11 PAGE 8   

 428   5                      }
 429   4                      g_FlagWaiting24C04Ack = 1;
 430   4                  }while (ReadAck());
 431   3                  Send8Bit(uiAddStart_Fill);
 432   3                  ReadAck();
 433   3              }
 434   2              Send8Bit(ucDataPgFill);
 435   2              ReadAck();
 436   2              ucFillCount++;
 437   2              uiAddStart_Fill++;
 438   2          }
 439   1          I2CStop();
 440   1          return ucFillCount;
 441   1      }
 442          /*******************************************************************************
 443          * 函数名称: void SendAck(void);
 444          * 功能描述: 发送I2C的应答位
 445          * 输入参数: 无
 446          * 输出参数: 无
 447          * 返 回 值: 无
 448          * 其他说明: 连续读数需要发送应答位
 449          * 修改日期       版 本 号        修 改 人        修改内容
 450          *******************************************************************************/
 451          #ifdef USE_SEQ_RD
              void SendAck(void)
              {
                  //SCL = 0;
                  _nop_();
                  SDA = 0;
                  _nop_();
                  SCL = 1;
                  SCL = 0;
                  SDA = 1;
              }
              
              /*******************************************************************************
              * 函数名称: bit SeqRead(unsigned int uiAddStart_SqRd,
              *                        unsigned char ucLength_SqRd,
              *                        unsigned char *pucDataStr);
              * 功能描述: 从地址 uiAddStart起读出 length 个数据,存入 pucDataStr所指空间
              * 输入参数: uiAddStart, 要读取24C04的起始地址
              * 输出参数: pucDataStr所指空间,为读出数据
              * 返 回 值: 成功读出的字节数。
              *******************************************************************************/
              bit SeqRead(unsigned int uiAddStart_SqRd, unsigned char ucLength_SqRd,
                                    unsigned char *pucDataStr)
              {
                  unsigned char ucRdCount;
                  
                  g_ucTimer24C04Ack = WAIT_ACK_TIME;
                  g_FlagWaiting24C04Ack = 0;
                  do
                  {
                      if (g_FlagWaiting24C04Ack && (0 == g_ucTimer24C04Ack))
                      {
                          I2CStop();
                          return ERR_TIME_OV;
                      }
                      I2CStart();
                      //判断地址范围,是否超出24C04范围,要选第一页还是第二页
                      if (0 != (uiAddStart_SqRd >> 9))
                      {
C51 COMPILER V8.02   24C04                                                                 05/18/2008 16:43:11 PAGE 9   

                          I2CStop();
                          return ERR_ILLEGAL_ADD;
                      }
                      else if (0 != (uiAddStart_SqRd >> 8))
                      {
                          Send8Bit(ADD_WRITE_24C04 | 0x02);
                      }
                      else
                      {
                          Send8Bit(ADD_WRITE_24C04);
                      }
                      g_FlagWaiting24C04Ack = 1;
                  }while (ReadAck());
                  Send8Bit(uiAddStart_SqRd);
                  ReadAck();
              
                  g_ucTimer24C04Ack = WAIT_ACK_TIME;
                  g_FlagWaiting24C04Ack = 0;
                  do
                  {
                      if ((g_FlagWaiting24C04Ack) && (0 == g_ucTimer24C04Ack))
                      {
                          I2CStop();
                          return ERR_TIME_OV;
                      }
                      I2CStart();
                      //判断地址范围,不再判断是否超出24C04范围,只判断要选第一页还是第二页
                      if (0 != (uiAddStart_SqRd >> 8))
                      {
                          Send8Bit(ADD_READ_24C04 | 0x02);
                      }
                      else
                      {
                          Send8Bit(ADD_READ_24C04);
                      }
                      g_FlagWaiting24C04Ack = 1;
                  }while (ReadAck());
              
                  ucRdCount = 0;
                  while (ucLength_SqRd--)
                  {
                      if (512 <= uiAddStart_SqRd)
                      {
                          I2CStop();
                          return ERR_ADD_OV;
                      }
                      else
                      {
                          uiAddStart_SqRd++;
                      }
                      *pucDataStr = Recev8Bit();
                      /*ES = 0;   //
                      TI = 0;
                      SBUF = Recev8Bit();
                      while (!TI);
                      TI = 0;
                      ES = 1;*/
                      pucDataStr++;
                      //ucRdCount++;              //not used
                      SendAck();
                  }
                  I2CStop();
C51 COMPILER V8.02   24C04                                                                 05/18/2008 16:43:11 PAGE 10  

                  return RD_SUCC_RTN;
              }
              #endif  //#ifdef USE_SEQ_RD
 555          
 556          #endif  //#ifndef AT24C04_H


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    488    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----       1
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----       3
   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 + -