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

📄 i2c.lst

📁 MST720-DEMO程序
💻 LST
字号:
C51 COMPILER V7.50   I2C                                                                   03/18/2008 22:29:06 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN ..\1out\I2C.obj
COMPILER INVOKED BY: D:\设计软件\Keil\C51\BIN\C51.EXE ..\KERNEL\I2C.c BROWSE INCDIR(..\INC\;..\PANEL\;..\UI\;..\OPTION\;
                    -..\SCALER\DSP\) DEFINE(MCU_TYPE_SEL=0) DEBUG OBJECTEXTEND PRINT(..\1out\I2C.lst) OBJECT(..\1out\I2C.obj)

line level    source

   1          /******************************************************************************
   2           Copyright (c) 2005 MStar Semiconductor, Inc.
   3           All rights reserved.
   4          
   5           [Module Name]: I2C.c
   6           [Date]:        04-Jan-2005
   7           [Comment]:
   8             This module Write & Read to IIC devices.
   9           [Reversion History]:
  10          *******************************************************************************/
  11          
  12          #define _I2C_C_
  13          /********************
  14          * INCLUDE FILES     *
  15          *********************/
  16          #include <intrins.h>
  17          #include "Project.h"
  18          #include "Debug.h"
  19          #include "Mcu_reg.h"
  20          #include "I2C.h"
  21          #include "Mcu.h"
  22          
  23          #if I2C_ENABLE
              /**********************
              * FUNCTION PROTOTYPES *
              ***********************/
              //-------------------------------------------------------------------
              //      i2cCI2CStart(void)
              //-------------------------------------------------------------------
              void sysI2CStart(void)
              {
                      I2C_SCL_PIN = 1;
                      I2C_SDA_PIN = 1;
                      MCU_DELAY_1US();
              
                      ((!I2C_SCL_PIN)||(!I2C_SDA_PIN)) ? (g_bI2CError = 1) : (g_bI2CError = 0);
              
                      I2C_SDA_PIN = 0;
                      MCU_DELAY_1US();
                      I2C_SCL_PIN = 0;
              }
              
              
              //-------------------------------------------------------------------
              //      i2cCI2CStop(void)
              //-------------------------------------------------------------------
              void sysI2CStop(void)
              {
                      I2C_SDA_PIN = 0;
                      MCU_DELAY_1US();
                      I2C_SCL_PIN = 1;
                      MCU_DELAY_1US();
                      I2C_SDA_PIN = 1;
              }
C51 COMPILER V7.50   I2C                                                                   03/18/2008 22:29:06 PAGE 2   

              
              //-------------------------------------------------------------------
              //      i2cCI2CSendNonAck(void)
              //-------------------------------------------------------------------
              void sysI2CSendNonAck(void)
              {
                      I2C_SDA_PIN = 1;
                      I2C_SCL_PIN = 1;
                      MCU_DELAY_1US();
                      I2C_SCL_PIN = 0;
                      I2C_SDA_PIN = 1;
                      MCU_DELAY_1US();
              }
              
              //-------------------------------------------------------------------
              //      i2cCI2CGetAck(void)
              //-------------------------------------------------------------------
              bit sysI2CGetAck(void)
              {
                      bit bAckValue;
              
                      I2C_SDA_PIN = 1;    //  Release I2C Bus
                      MCU_DELAY_1US();
                      I2C_SCL_PIN = 1;
                      MCU_DELAY_1US();
                      bAckValue = I2C_SDA_PIN;
                      I2C_SCL_PIN = 0;
                      MCU_DELAY_1US();
                      I2C_SDA_PIN = 1;
              
                  return (bAckValue);
              }
              
              
              //-------------------------------------------------------------------
              //      I2C_SendByte(BYTE val)
              //-------------------------------------------------------------------
              void sysI2CSendByte(BYTE i2c_data)
              {
                      BYTE ucloop;
              
                      for (ucloop=0x80; ucloop>=1; ucloop>>=1)
                      {
                              I2C_SDA_PIN = i2c_data & ucloop;
                              MCU_DELAY_1US();
                              I2C_SCL_PIN = 1;
                              MCU_DELAY_1US();
                              I2C_SCL_PIN = 0;
                              MCU_DELAY_1US();
                      }
              }
              
              
              //-------------------------------------------------------------------
              //      I2C_GetByte(void)
              //-------------------------------------------------------------------
              BYTE sysI2CGetByte(void)
              {
                      BYTE ucloop;
                      BYTE ucI2cData=0;
              
                      I2C_SDA_PIN = 1;
C51 COMPILER V7.50   I2C                                                                   03/18/2008 22:29:06 PAGE 3   

                      
                      for (ucloop=0; ucloop<8; ucloop++)
                      {
                              I2C_SCL_PIN = 1;
                              ucI2cData <<=1;
                              MCU_DELAY_1US();
                              ucI2cData |= I2C_SDA_PIN;
                              I2C_SCL_PIN = 0;
                              MCU_DELAY_1US();
                      }
                      return (ucI2cData);
              }
              
              
              
              //-------------------------------------------------------------------
              //      i2cCI2CWriteByte(BYTE slave_addr, BYTE i2c_addr, BYTE i2c_data)
              //-------------------------------------------------------------------
              #if RS232DBG
              void sysI2CWriteByte(BYTE slave_addr, BYTE i2c_addr, BYTE i2c_data)
              {
                      sysI2CStart();
                      sysI2CSendByte(slave_addr&0xFE);  // Write Function
                      
                      if (sysI2CGetAck())   
                              g_bI2CError = 1;
                      
                      sysI2CSendByte(i2c_addr);
                      
                      if (sysI2CGetAck())   
                              g_bI2CError = 1;
                      
                      sysI2CSendByte(i2c_data);
                      
                      if (sysI2CGetAck())   
                              g_bI2CError = 1;
                      
                      sysI2CStop();
              }
              
              
              //-------------------------------------------------------------------
              //      i2cCI2CReadByte(BYTE slave_addr, BYTE i2c_addr)
              //-------------------------------------------------------------------
              BYTE sysI2CReadByte(BYTE slave_addr, BYTE i2c_addr)
              {
                      BYTE ucI2cData;
              
                      sysI2CStart();
                      sysI2CSendByte(slave_addr&0xFE);  // Write Function
                      
                      if (sysI2CGetAck())   
                              g_bI2CError = 1;
                      
                      sysI2CSendByte(i2c_addr);
                      
                      if (sysI2CGetAck())   
                              g_bI2CError = 1;
                      
                      sysI2CStart();
                      
                      sysI2CSendByte(slave_addr|0x01);  // Read Function
C51 COMPILER V7.50   I2C                                                                   03/18/2008 22:29:06 PAGE 4   

                      
                      if (sysI2CGetAck())  
                              g_bI2CError = 1;
                      
                      ucI2cData = sysI2CGetByte();
                      sysI2CSendNonAck();
                      sysI2CStop();
              
                      return ucI2cData;
              }
              #endif  // RS232DBG
              
              #if (RM_EEPROM_TYPE < RM_TYPE_SST512)
              //-------------------------------------------------------------------
              //      i2cCI2CSendAck(void)
              //-------------------------------------------------------------------
              void sysI2CSendAck(void)
              {
                      I2C_SDA_PIN = 0;
                      I2C_SCL_PIN = 1;
                      MCU_DELAY_1US();
                      I2C_SCL_PIN = 0;
                      I2C_SDA_PIN = 1;
                      MCU_DELAY_1US();
              }
              
              //-------------------------------------------------------------------
              //      sysI2CWriteBytes(BYTE slave_addr, BYTE i2c_addr, BYTE i2c_num, BYTE i2c_data)
              //-------------------------------------------------------------------
              void sysI2CWriteBytes(BYTE slave_addr, BYTE i2c_addr, BYTE i2c_num, BYTE *i2c_data)
              {
                      BYTE ucCnt=0;
              
                      sysI2CStart();
                      sysI2CSendByte(slave_addr&0xFE);  // Write Function
                      
                      if (sysI2CGetAck())   
                              g_bI2CError = 1;
                      
                      sysI2CSendByte(i2c_addr);
                      
                      if (sysI2CGetAck())   
                              g_bI2CError = 1;
              
                      if (i2c_num)
                      {
                              while((i2c_num--)&&(!g_bI2CError))
                              {
                                      sysI2CSendByte(i2c_data[ucCnt++]);
                                      
                                      if (sysI2CGetAck())  
                                              g_bI2CError = 1;
                              }
                              
                              sysI2CStop();
                      }
              }
              
              
              //-------------------------------------------------------------------
              //      sysI2CReadByte(BYTE slave_addr, BYTE i2c_addr)
              //-------------------------------------------------------------------
C51 COMPILER V7.50   I2C                                                                   03/18/2008 22:29:06 PAGE 5   

              void sysI2CReadBytes(BYTE slave_addr, BYTE i2c_addr, BYTE i2c_num, BYTE *i2c_data)
              {
                      BYTE ucCnt=0;
              
                      sysI2CStart();
                      sysI2CSendByte(slave_addr&0xFE);  // Write Function
                      
                      if (sysI2CGetAck())   
                              g_bI2CError = 1;
                      
                      sysI2CSendByte(i2c_addr);
                      
                      if (sysI2CGetAck())  
                              g_bI2CError = 1;
                      
                      sysI2CStart();
                      
                      sysI2CSendByte(slave_addr|0x01);  // Read Function
                      
                      if (sysI2CGetAck())  
                              g_bI2CError = 1;
              
                      if (i2c_num)
                      {
                              while((i2c_num--)&&(!g_bI2CError))
                              {
                                      i2c_data[ucCnt++] = sysI2CGetByte();
                                      i2c_num ? (sysI2CSendAck()) : (sysI2CSendNonAck());
                              }
                      }
                      
                      sysI2CStop();
              }
              #endif  // (RM_EEPROM_TYPE < RM_TYPE_SST512)
              #endif  // I2C_ENABLE


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   ----    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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