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

📄 i2c.lst

📁 基于51单片机实现UART通信 SPI通信 和IIC通信
💻 LST
字号:
C51 COMPILER V8.02   I2C                                                                   06/01/2008 12:34:31 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN I2C.obj
COMPILER INVOKED BY: D:\ElectronicTools\KeilC51\C51\BIN\C51.EXE C_H\I2C.c BROWSE DEBUG OBJECTEXTEND PRINT(.\I2C.lst) OBJ
                    -ECT(I2C.obj)

line level    source

   1          #include    "Includes.h"
   2          /*********************************************************************************************************
   3          ** 函数名称: IICRead
   4          ** 功能描述: 从IIC总线读取数据   
   5          ** 输 入: Ret:存储读取的数据   
   6          **         Addr:IIC从器件地址  
   7          **         Nbyte:读取的字节数目   
   8          ** 输 出: TRUE:成功  
   9          **         FALSE:失败  
  10          ** 全局变量: 无   
  11          ** 调用模块: 无  
  12          ********************************************************************************************************/
  13          unsigned char IICRead(unsigned char  *Ret,unsigned char Addr,unsigned char NByte)
  14          {
  15   1          unsigned char i;
  16   1          
  17   1              //Addr = Addr | 0x01;
  18   1              if (IICStart() == FALSE)
  19   1              {
  20   2                  return 0;//FALSE;
  21   2              }
  22   1              if (IICSend(0xa0) == FALSE)
  23   1              {
  24   2                  return 0;//FALSE;
  25   2              }
  26   1              if(IICSend(Addr) == FALSE)
  27   1              {
  28   2                  return 0;//FALSE;
  29   2              }
  30   1              if (IICStart() == FALSE)
  31   1              {
  32   2                  return 0;//FALSE;
  33   2              }
  34   1              if (IICSend(0xa1) == FALSE)
  35   1              {
  36   2                  return 0;
  37   2              }
  38   1              i = NByte - 1;
  39   1              if (i != 0)
  40   1              {
  41   2                  do
  42   2                  {
  43   3                          *Ret++ = IICReceive();
  44   3                          IIC_ACK();
  45   3                  } while (--i != 0);
  46   2              }
  47   1              *Ret = IICReceive();
  48   1              IIC_NO_ACK();
  49   1              IICStop();
  50   1              return 1;    
  51   1      }
  52          
  53          /*********************************************************************************************************
  54          ** 函数名称: IICWrite
C51 COMPILER V8.02   I2C                                                                   06/01/2008 12:34:31 PAGE 2   

  55          ** 功能描述: 往IIC总线写数据 
  56          ** 输 入: Addr:IIC从器件地址 
  57          **         Data:存储将要写的数据   
  58          **         Nbyte:写的字节数目 
  59          ** 输 出: TRUE:成功     
  60          **         FALSE:失败    
  61          ** 全局变量: 无     
  62          ** 调用模块: 无     
  63          ********************************************************************************************************/
  64          unsigned char IICWrite(unsigned char Addr,unsigned char *Data,unsigned char NByte)
  65          {
  66   1              unsigned char i;
  67   1      
  68   1              //Addr = Addr & 0xfe;
  69   1              if (IICStart() == FALSE)
  70   1              {
  71   2                  return 0;//FALSE;
  72   2              }
  73   1              
  74   1              if (IICSend(0xa0) == FALSE)
  75   1              {
  76   2                  return 0;//FALSE;
  77   2              }
  78   1              if (IICSend(Addr) == FALSE)
  79   1              {
  80   2                  return 0;// FALSE;
  81   2              }
  82   1              i = NByte;
  83   1              do
  84   1              {
  85   2                      if (IICSend(*Data++) == FALSE)
  86   2                      {
  87   3                          return 0;//FALSE;
  88   3                      }
  89   2              } while (--i !=0 );
  90   1              IICStop();
  91   1              return 1;
  92   1      }
  93          
  94          /*********************************************************************************************************
  95          ** 函数名称: IICInit
  96          ** 功能描述: IIC总线初始化
  97          ** 输 入: 无 
  98          ** 输 出: 无  
  99          ** 全局变量: 无  
 100          ** 调用模块: 无   
 101          ********************************************************************************************************/
 102          void IICInit(void)
 103          {
 104   1              SCL = 0;
 105   1              IICStop();
 106   1      }
 107           
 108          /*********************************************************************************************************
 109          ** 函数名称: IICStart
 110          ** 功能描述: 发送IIC启动信号  
 111          ** 输 入: 无      
 112          ** 输 出: TRUE:成功   
 113          **         FALSE:失败   
 114          ** 全局变量: 无  
 115          ** 调用模块: 无   
 116          ********************************************************************************************************/
C51 COMPILER V8.02   I2C                                                                   06/01/2008 12:34:31 PAGE 3   

 117           unsigned char IICStart(void)
 118          {
 119   1              SDA = 1;
 120   1              SCL = 1;
 121   1              if (SDA == 1)
 122   1              {
 123   2                  SDA = 0;
 124   2                  SCL = 0;
 125   2                  SDA = 1;
 126   2                  return TRUE;
 127   2          }
 128   1          else
 129   1          {
 130   2                  return FALSE;
 131   2          }
 132   1      }
 133          
 134          /*********************************************************************************************************
 135          ** 函数名称: IICStop
 136          ** 功能描述: 发送IIC结束信号 
 137          ** 输 入: 无  
 138          ** 输 出: 无  
 139          ** 全局变量: 无   
 140          ** 调用模块: 无   
 141          ********************************************************************************************************/
 142          void IICStop(void)
 143          {
 144   1              SDA = 0;
 145   1              SCL = 1;
 146   1              SDA = 1;
 147   1              SCL = 0;
 148   1      }
 149          
 150          /*********************************************************************************************************
 151          ** 函数名称: IIC_ACK
 152          ** 功能描述: 发送IIC应答信号   
 153          ** 输 入: 无    
 154          ** 输 出: 无    
 155          ** 全局变量: 无   
 156          ** 调用模块: 无    
 157          ********************************************************************************************************/
 158          void IIC_ACK(void)
 159          {
 160   1              SDA = 0;
 161   1              SCL = 1;
 162   1              _nop_();
 163   1              SCL = 0;
 164   1      }
 165          
 166          /*********************************************************************************************************
 167          ** 函数名称: IIC_NO_ACK
 168          ** 功能描述: 发送IIC无应答信号 
 169          ** 输 入: 无   
 170          ** 输 出: 无   
 171          ** 全局变量: 无  
 172          ** 调用模块: 无  
 173          ********************************************************************************************************/
 174          void IIC_NO_ACK(void)
 175          {
 176   1              SDA = 1;
 177   1              SCL = 1;
 178   1              _nop_();
C51 COMPILER V8.02   I2C                                                                   06/01/2008 12:34:31 PAGE 4   

 179   1              SCL = 0;
 180   1              return;
 181   1      }
 182          
 183          /*********************************************************************************************************
 184          ** 函数名称: IICSend
 185          ** 功能描述: 发送一个字节  
 186          ** 输 入: IIC_data:数据  
 187          ** 输 出: TRUE:成功    
 188          **         FALSE:失败   
 189          ** 全局变量: 无          
 190          ** 调用模块: 无          
 191          ********************************************************************************************************/
 192          unsigned char IICSend(unsigned char IIC_data)
 193          {
 194   1              unsigned char i;
 195   1              CY=0;
 196   1              for (i = 0; i < 8; i++)
 197   1              {
 198   2                      IIC_data=IIC_data<<1;
 199   2                      F0 = SDA = CY;//???
 200   2                      SCL = 1;
 201   2                      if (F0 != SDA)
 202   2                      {
 203   3                              SCL = 0;
 204   3                              return FALSE;
 205   3                      }
 206   2                      SCL = 0;
 207   2              }
 208   1              SDA = 1;
 209   1              SCL = 1;
 210   1              if (SDA == 1)
 211   1              {
 212   2                      SCL = 0;
 213   2                      return FALSE;
 214   2              }
 215   1              else
 216   1              {
 217   2                  SCL = 0;
 218   2                  return TRUE;
 219   2              }
 220   1      }
 221          
 222          /*********************************************************************************************************
 223          ** 函数名称: IICReceive
 224          ** 功能描述: 读取一个字节
 225          ** 输 入: 无    
 226          ** 输 出: 读取的字节   
 227          ** 全局变量: 无           
 228          ** 调用模块: 无           
 229          ********************************************************************************************************/
 230          unsigned char IICReceive(void)
 231          {
 232   1              unsigned char i,r;
 233   1              
 234   1              r = 0;
 235   1              SDA = 1;
 236   1              for (i = 0; i < 8; i++)
 237   1              {
 238   2                      r = r * 2;
 239   2                      SCL = 1;
 240   2                      if (SDA == 1)
C51 COMPILER V8.02   I2C                                                                   06/01/2008 12:34:31 PAGE 5   

 241   2                      {
 242   3                          r++;
 243   3                      }
 244   2                      SCL = 0;
 245   2              }
 246   1              return r;
 247   1      }


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