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

📄 i2c.lst

📁 本程序是通过软件模拟I2C协议对8563进行读写函数
💻 LST
字号:
C51 COMPILER V7.50   I2C                                                                   04/25/2007 20:35:55 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN .\I2C.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\..\I2C\Src\I2C.C BROWSE DEFINE(DEVICE_TYPE_ICIDSERVER,USE_DEVICE_PCF8563
                    -) DEBUG OBJECTEXTEND PRINT(.\I2C.lst) OBJECT(.\I2C.obj)

line level    source

   1          //############################ I2C 读写程序 #################################//
   2          #include        <reg52.h>
   3          #include        <intrins.h>
   4          #include        "..\Include\I2CDEF.h"
   5          
   6          #ifdef EN_I2C_WRITEWAIT
              void I2C_Delay(unsigned int time)
              {
                      unsigned int idata j;
                      unsigned int idata i;
                      for(j=0;j<15;j++)
                      {
                              for(i=0;i<time;i++)
                              _nop_();
                      }
              }
              #endif
  18          /***************************************************************************/
  19          void I2C_Start() //起始条件子函数
  20          {   
  21   1              I2C_SDA=1;   //启动I2C总线  
  22   1              nop();
  23   1              I2C_SCL=1;
  24   1              nop();
  25   1              I2C_SDA=0;
  26   1              nop();
  27   1              I2C_SCL=0;
  28   1              nop();
  29   1      }
  30          
  31          /***************************************************************************/
  32          void I2C_Stop() //停止条件子函数  
  33          {
  34   1              I2C_SCL=0;
  35   1              nop();
  36   1              I2C_SDA=0;  //停止I2C总线数据传送
  37   1              nop();
  38   1              I2C_SCL=1;
  39   1              nop();   
  40   1              I2C_SDA=1;
  41   1              nop();
  42   1      }
  43          
  44          /***************************************************************************/
  45          void I2C_Ack() //发送应答子函数
  46          {
  47   1              I2C_SDA=0;       //发送应答位
  48   1              nop();
  49   1              I2C_SCL=1;
  50   1              nop();
  51   1              I2C_SCL=0;
  52   1              nop();
  53   1              I2C_SDA=1;
  54   1              nop();         
C51 COMPILER V7.50   I2C                                                                   04/25/2007 20:35:55 PAGE 2   

  55   1      }
  56          
  57          /***************************************************************************/
  58          void I2C_NoAck() //发送非应答子函数
  59          {
  60   1              I2C_SDA=1;   //发送非应答位
  61   1              nop();   
  62   1              I2C_SCL=1;
  63   1              nop();   
  64   1              I2C_SCL=0;
  65   1              nop();
  66   1      }
  67          
  68          /***************************************************************************/
  69          bit I2C_TestAck() //应答位检测子函数
  70          {
  71   1              bit ErrorBit;  
  72   1              I2C_SDA=1;
  73   1              nop();   
  74   1              I2C_SCL=1;
  75   1              nop();   
  76   1              ErrorBit=I2C_SDA;
  77   1              I2C_SCL=0;
  78   1              nop();   
  79   1              return(ErrorBit);   
  80   1      }
  81          
  82          /***************************************************************************/
  83          I2C_Write8Bit(unsigned char input) //发送一个字节子函数   
  84          {
  85   1          unsigned char   temp;
  86   1              for(temp=8;temp!=0;temp--) 
  87   1              {
  88   2                      I2C_SDA=(bit)(input&0x80); //若要发送的数据最高位为1,则发送1
  89   2                      nop();
  90   2                      I2C_SCL=1;
  91   2                      nop();           
  92   2                      I2C_SCL=0;
  93   2                      nop();           
  94   2                      input=input<<1;
  95   2              }
  96   1      }
  97           
  98          /***************************************************************************
  99          描述:
 100          I2C_Write(unsigned char *buffer,unsigned int address,unsigned char len,unsigned char devicNO) 
 101          为I2C连写函数
 102          参数:buffer为写入数据缓冲区指针,address为写入数据地址,
 103          len为写入数据长度,
 104          devicNO为I2C设备的访问地址 
 105          
 106          ***************************************************************************/
 107          void I2C_Write(unsigned char *buffer,unsigned int address,unsigned char len,unsigned char devicNO)
 108          {
 109   1      #ifdef EN_I2C_WRITEDISINTERR
                      bit     Tmp;
                      Tmp = EA;
                      EA=0;
              #endif
 114   1              I2C_Start(); 
 115   1              I2C_Write8Bit(devicNO);
 116   1              I2C_TestAck();
C51 COMPILER V7.50   I2C                                                                   04/25/2007 20:35:55 PAGE 3   

 117   1              if(address >> 8)
 118   1              {
 119   2                      I2C_Write8Bit(address >> 8);
 120   2                      I2C_TestAck();
 121   2              }
 122   1              I2C_Write8Bit((unsigned char)address);
 123   1              I2C_TestAck();
 124   1              while(len--)     
 125   1              {
 126   2                      I2C_Write8Bit(*buffer);
 127   2                      I2C_TestAck();
 128   2                      buffer++;
 129   2              }
 130   1              I2C_Stop();
 131   1      #ifdef EN_I2C_WRITEWAIT
                      #ifdef USE_DEVICE_IIC24CXX
                              I2C_Delay(8);
                      #else
                              I2C_Delay(2);
                      #endif
              #endif
 138   1      #ifdef EN_I2C_WRITEDISINTERR
                      EA=Tmp;
              #endif
 141   1      } 
 142          
 143          /***************************************************************************/
 144          unsigned char I2C_Read8Bit() //接收1个字节子函数
 145          {
 146   1              unsigned char temp,rbyte=0;
 147   1              for(temp=8;temp!=0;temp--) 
 148   1              {
 149   2                      I2C_SCL=1;      
 150   2                      nop();
 151   2                  nop();
 152   2                      rbyte = ( rbyte << 1 );
 153   2                      rbyte = ( rbyte | ((unsigned char)(I2C_SDA)) );
 154   2                      I2C_SCL=0;
 155   2                      nop();
 156   2              }
 157   1              return(rbyte);
 158   1      }
 159          
 160          /***************************************************************************
 161          描述:
 162          I2C_Read(unsigned char *buffer,unsigned int address,unsigned char len,unsigned char devicNO)
 163          为I2C连读函数
 164          参数:buffer为读出数据缓冲区指针,address为读数据起始地址,
 165          len为读出数据长度,
 166          devicNO为I2C设备的访问地址
 167          ****************************************************************************/
 168          void I2C_Read(unsigned char *buffer,unsigned int address,unsigned char len,unsigned char devicNO)
 169          {
 170   1              I2C_Start();
 171   1              I2C_Write8Bit(devicNO);
 172   1              I2C_TestAck();
 173   1          if(address >> 8)
 174   1          {
 175   2                      I2C_Write8Bit(address >> 8);
 176   2                      I2C_TestAck();
 177   2          }
 178   1              I2C_Write8Bit((unsigned char)address);
C51 COMPILER V7.50   I2C                                                                   04/25/2007 20:35:55 PAGE 4   

 179   1              I2C_TestAck();
 180   1              I2C_Start();
 181   1              I2C_Write8Bit(devicNO+1);
 182   1              I2C_TestAck();
 183   1              while(--len)
 184   1              {
 185   2                      *buffer=I2C_Read8Bit(); 
 186   2                      I2C_Ack();
 187   2                      buffer++;
 188   2              }
 189   1              *buffer=I2C_Read8Bit();
 190   1              I2C_NoAck();
 191   1              I2C_Stop();
 192   1      }


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