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

📄 i2c.lst

📁 171544C8051F020应用程序包.rar
💻 LST
📖 第 1 页 / 共 3 页
字号:
 320   2                      break;
 321   2                              // 主发送器数据字节已发送收到NACK
 322   2                              // 从器件不应答发送STOP + START 重试
 323   2                      case SMB_MTDBNACK:
 324   2                              STO = 1;                        STA = 1;
 325   2                      break;
 326   2                              // 主发送器竞争失败
 327   2                              // 不应出现如果出现重新开始传输过程
 328   2                      case SMB_MTARBLOST:
 329   2                              STO = 1;                        STA = 1;
 330   2                      break;
 331   2      
 332   2                              // 主接收器从地址 + READ 已发送,收到ACK
 333   2                      case SMB_MRADDACK:
 334   2                              AA = 1; // 在应答周期ACK
 335   2                              if (!BYTE_NUMBER)
 336   2                              {       
 337   3                                      STO = 1;        SM_BUSY = 0; // 释放SMBus
 338   3                              }
 339   2                      break;
 340   2                              // 主接收器从地址 + READ 已发送收到NACK
 341   2                              // 从器件不应答发送重复起始条件重试
 342   2                      case SMB_MRADDNACK:
 343   2                              STA = 1;
 344   2                      break;
 345   2                              // 收到数据字节ACK 已发送
 346   2                              // 该状态不应出现因为AA 已在前一状态被清0 如果出现发送停止条件
 347   2                      case SMB_MRDBACK:
 348   2                              if (BYTE_NUMBER)
 349   2                              {
 350   3                                      *I2CDataBuff=revolve(SMB0DAT);          
 351   3                                      I2CDataBuff++;
 352   3                                      BYTE_NUMBER--;                  
 353   3                              }
 354   2                              if (!BYTE_NUMBER)       AA= 0;
 355   2                      break;
 356   2                              // 收到数据字节NACK 已发送
 357   2                              // 读操作已完成读数据寄存器后发送停止条件
 358   2                      case SMB_MRDBNACK:
 359   2                              STO = 1;
 360   2                              SM_BUSY = 0; // 释放SMBus
 361   2                      break;
 362   2                              // 在本应用中所有其它状态码没有意义通信复位
 363   2                      default:
 364   2                              STO = 1; // 通信复位
 365   2                              SM_BUSY = 0; 
C51 COMPILER V6.23a  I2C                                                                   12/20/2002 12:46:27 PAGE 7   

 366   2                      break;
 367   2                      }
 368   1              SI=0; // 清除中断标志
 369   1      }
 370          /*
 371          {
 372                  switch (SMB0STA){                       // Status code for the SMBus (SMB0STA register)
 373                          case SMB_START:                                 
 374                                  SMB0DAT = COMMAND;                                      // COMMAND should hold slave address + R.
 375                                  break;
 376                          case SMB_MTADDNACK:
 377                                  STO = 1;
 378                                  STA = 1;
 379                                  break;
 380                          case SMB_RP_START:
 381          //                      SMB0DAT = COMMAND;                                      // COMMAND should hold slave address + R.
 382          //                      STA = 0;                                                                                        
 383          //                      break;
 384                          case SMB_MTADDACK:
 385                          case SMB_MTDBACK:
 386                                  if (BYTE_NUMBER)
 387                                  {
 388                                                  if (COMMAND & 0x01)                                     // If R/W=READ, 
 389                                                  {
 390                                                          STA = 1;
 391                                                  }
 392                                                  else
 393                                                  {
 394                                                          SMB0DAT = *I2CDataBuff;                                 // If R/W=WRITE, load byte to write.
 395                                                          I2CDataBuff++;
 396                                                          BYTE_NUMBER--;                  
 397                                                  }
 398                                  }
 399                                  else
 400                                  {
 401                                          STO = 1;
 402                                          SM_BUSY = 0;                                            // Free SMBus
 403                                  }
 404                                  break;
 405                          
 406                          // Master Transmitter: Data byte transmitted.  NACK received.
 407                          // Slave not responding.  Send STOP followed by START to try again.
 408                          case SMB_MTDBNACK:
 409                                  STO = 1;
 410                                  STA = 1;
 411                                  break;
 412                          
 413                          // Master Transmitter: Arbitration lost.
 414                          // Should not occur.  If so, restart transfer.
 415                          case SMB_MTARBLOST:
 416                                  STO = 1;
 417                                  STA = 1;
 418                                  break;
 419          
 420                          // Master Receiver: Slave address + READ transmitted.  NACK received.
 421                          // Slave not responding.  Send repeated start to try again.
 422                          case SMB_MRADDNACK:
 423                                  STA = 1;
 424                                  break;
 425          
 426                          // Data byte received.  ACK transmitted.
 427                          // State should not occur because AA is set to zero in previous state.
C51 COMPILER V6.23a  I2C                                                                   12/20/2002 12:46:27 PAGE 8   

 428                          // Send STOP if state does occur.
 429                          case SMB_MRDBACK:
 430                                  STO = 1;
 431                                  SM_BUSY = 0;
 432                                  break;
 433          
 434                          // Master Receiver: Slave address + READ transmitted.  ACK received.
 435                          // Set to transmit NACK after next transfer since it will be the last (only) byte.
 436                          case SMB_MRADDACK:
 437          //                      AA = 0;                                                                         // NACK sent on acknowledge cycle.
 438          //                      break;
 439          
 440                          // Data byte received.  NACK transmitted.
 441                          // Read operation has completed.  Read data register and send STOP.
 442                          case SMB_MRDBNACK:
 443                                  if (BYTE_NUMBER)
 444                                  {
 445                                                  if (COMMAND & 0x01)                                     // If R/W=READ, 
 446                                                  {
 447                                                          *I2CDataBuff=SMB0DAT;           
 448                                                          I2CDataBuff++;
 449                                                  }
 450                                                  BYTE_NUMBER--;                  
 451                                  }
 452                                  else
 453                                  {
 454                                          STO = 1;
 455                                          SM_BUSY = 0;                                            // Free SMBus
 456                                  }
 457                                  break;
 458                          // All other status codes meaningless in this application. Reset communication.
 459                          default:
 460                                  STO = 1;                                                                                // Reset communication.
 461                                  SM_BUSY = 0;
 462                                  break;
 463                          }
 464                  
 465                  SI=0;                                                                                                   // clear interrupt flag
 466          }
 467          */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    807    ----
   CONSTANT SIZE    =     64    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     14       2
   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 + -