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

📄 i2c.lst

📁 CH451专用键盘扫描
💻 LST
字号:
C51 COMPILER V7.07   I2C                                                                   03/22/2006 16:36:26 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN i2c.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE i2c.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <absacc.h>
   2          #include <intrins.h>
   3          #include "main.h"
   4          #include "mcs51.h"
   5          #include "i2c.h"
   6          
   7          void i2c_writ2(uchar bat );
   8          uchar i2c_rea2(bit ack) ;
   9          void i2c_start(void);
  10          #define ADDR  0x50
  11           
  12          
  13          void i2c_start()
  14          { 
  15   1              SCL=1;delay_5us();
  16   1              SDA=1;delay_5us();
  17   1              SDA=0;delay_5us();
  18   1              SCL=0;delay_5us();
  19   1      }
  20          void i2c_stop()
  21          {
  22   1              SCL=0;//wu
  23   1              SDA=0;delay_5us();
  24   1              SCL=1;delay_5us();
  25   1              SDA=1;delay_5us();
  26   1      
  27   1        
  28   1      }
  29          /**--------------------------------------------------------------------------------
  30           调用方式:bit I2CAck(void) ﹫200 /07/0 4
  31           函数说明:私有函数,I2C用,等待从器件接收方的应答
  32           ---------------------------------------------------------------------------------*/
  33           
  34           /**--------------------------------------------------------------------------------
  35           调用方式:void SendAck(void) ﹫200 /07/0 4
  36           函数说明:私有函数,I2C用,主器件为接收方,从器件为发送方时,非应答信号。
  37           --------------------------------------------------------------------------------*/
  38            
  39          
  40          //------------------------------------------------
  41           
  42           
  43           
  44          
  45          
  46          void write_24c64(unsigned char adr,uchar dat)
  47          {
  48   1              //unsigned char add1;
  49   1              //if(adr>0x1fff)
  50   1            //        return ;
  51   1              //add1=adr>>8;
  52   1              i2c_start();
  53   1              i2c_writ2(0xa6);//
  54   1              i2c_writ2(adr);
  55   1              //add1=adr&0x00ff;
C51 COMPILER V7.07   I2C                                                                   03/22/2006 16:36:26 PAGE 2   

  56   1              //i2c_writ2(add1);
  57   1              i2c_writ2(dat);
  58   1              i2c_stop();
  59   1              delay(30);//20
  60   1      }
  61          
  62          uchar read_24c64(unsigned char adr)
  63          {
  64   1              uchar i;
  65   1              //if(adr>0x1fff)
  66   1              //return        0x10;
  67   1              //add1=adr>>8;
  68   1              i2c_start();
  69   1              i2c_writ2(0xa6);
  70   1              //i2c_writ2(add1);
  71   1              //add1=adr&0x00ff;
  72   1              i2c_writ2(adr);
  73   1              i2c_start();
  74   1              i2c_writ2(0xa7);
  75   1              i=i2c_rea2(0);
  76   1              i2c_stop();
  77   1              delay(5);
  78   1              return i;
  79   1      }
  80          
  81          void i2c_writ2(uchar dat)
  82          {
  83   1              uchar i;
  84   1              for(i=0;i<8;i++)
  85   1              {
  86   2                      SDA=1;
  87   2                      if((dat&0x80)==0x00) SDA=0;
  88   2                      SCL=1;delay_5us();SCL=0;
  89   2                      dat=dat<<1;
  90   2              }
  91   1              SDA=1;
  92   1              SCL=1;delay_5us();
  93   1              SCL=0;delay_5us();
  94   1      }
  95          
  96          uchar i2c_rea2(bit ack)
  97          {
  98   1              uchar i,j;
  99   1              j=0x00;
 100   1              SDA=1;
 101   1              for(i=0;i<8;i++)
 102   1              {
 103   2                      SCL=1;
 104   2                      j=j<<1;
 105   2                      if(SDA) j|=0x01;
 106   2                      SCL=0;delay_5us();
 107   2              }
 108   1              if(ack) SDA=0;
 109   1              SCL=1;delay_5us();
 110   1              SCL=0;delay_5us();
 111   1              return j;
 112   1      }
 113          
 114           
 115          void delay_5us()
 116          {
 117   1              uchar i;
C51 COMPILER V7.07   I2C                                                                   03/22/2006 16:36:26 PAGE 3   

 118   1              //for(i=0;i<2;i++){}
 119   1              for(i=0;i<3;i++){}
 120   1      }
 121          
 122           
 123           
 124          //#define WCR0  0xa0
 125          //#define WCR1  0xa4
 126          /*      ADDR             EQU    01010000B
 127                 WCR0             EQU    10100000B
 128                 WCR1             EQU    10100100B*/
 129          
 130          
 131          
 132          
 133          /*************************************************************************
 134          *           函数原型:void  START_I2C(void)
 135          *           功    能:启动I2C总线
 136          *           返 回 值:无
 137          *           最后修改日期:2003-11-4
 138          **************************************************************************/
 139          /*
 140          void START_I2C()
 141          {
 142                  //EA=0;
 143                  SDA=1;
 144                 _nop_();
 145                  _nop_();
 146                  _nop_();
 147                  _nop_();
 148                  _nop_();
 149                  SCL=1;
 150                  _nop_();
 151                  _nop_();
 152                  _nop_();
 153                  _nop_();
 154                  _nop_();
 155                  SDA=0;
 156                  _nop_();
 157                  _nop_();
 158                  SCL=0;
 159          }
 160          */
 161          /*************************************************************************
 162          *           函数原型:void  STOP_I2C(void)
 163          *           功    能:停止I2C总线
 164          *           返 回 值:无
 165          *           最后修改日期:2003-11-4
 166          **************************************************************************/
 167          /*
 168          void STOP_I2C()
 169          {
 170                  SDA=0;
 171                  _nop_();
 172                  _nop_();
 173                  _nop_();
 174                  _nop_();
 175                   SCL=1;
 176                  _nop_();
 177                  _nop_();
 178                  _nop_();
 179                  _nop_();
C51 COMPILER V7.07   I2C                                                                   03/22/2006 16:36:26 PAGE 4   

 180                  SDA=1;
 181                  _nop_();
 182                  //EA=1;
 183          }
 184          */
 185          /*************************************************************************
 186          *           函数原型:void  CACK_I2C(void)
 187          *           功    能:I2C总线MCU检查应答
 188          *           返 回 值:1 成功
 189          *           最后修改日期:2003-11-4
 190          **************************************************************************/
 191          /*bit CACK_I2C()
 192          {
 193                  SDA=1;
 194                  _nop_();
 195                  _nop_();
 196                  _nop_();
 197                  SCL=1;
 198                  _nop_();
 199                  _nop_();
 200                  _nop_();
 201                  if(!SDA)/*有应答*/
 202                  /*      {
 203                                  _nop_();
 204                                  _nop_();
 205                                  SCL=0;
 206                                  _nop_();
 207                                  return(1);
 208                          }
 209                  _nop_();
 210                  _nop_();
 211                  SCL=0;
 212                  _nop_();
 213                  return(0);
 214          }*/
 215          /*************************************************************************
 216          *           函数原型:void  MACK_I2C(void)
 217          *           功    能:I2C总线MCU作出应答
 218          *           返 回 值:无
 219          *           最后修改日期:2003-11-4
 220          **************************************************************************/
 221          /*void MACK_I2C()
 222          {
 223                  SDA=0;
 224                  _nop_();
 225                  _nop_();
 226                  SCL=1;
 227                  _nop_();
 228                  _nop_();
 229                  _nop_();
 230                  _nop_();
 231                  SCL=0;
 232                  _nop_();
 233                  _nop_();
 234          }*/
 235          /*************************************************************************
 236          *           函数原型:void  SendData_I2C(void)
 237          *           功    能:I2C总线MCU检查应答
 238          *           返 回 值:无
 239          *           最后修改日期:2003-11-4
 240          **************************************************************************/
 241          /*
C51 COMPILER V7.07   I2C                                                                   03/22/2006 16:36:26 PAGE 5   

 242          void SendData_I2C(uchar Data)
 243          {
 244                  uchar i;
 245                  for(i=0;i<8;i++)        
 246                          {
 247                                  if(Data & 0x80) 
 248                                  {SDA=1;}
 249                          else 
 250                                  {SDA=0;}
 251                                  _nop_();
 252                                  _nop_();
 253                                  _nop_();
 254                                  _nop_();
 255                                  SCL=1;
 256                                  _nop_();
 257                                  _nop_();
 258                                  _nop_();
 259                                  _nop_();
 260                                  _nop_();
 261                                  SCL=0;
 262                                  _nop_();
 263                                  _nop_();
 264                                  Data=Data<<1;
 265                          }
 266                  SDA=1;//很奇怪,应答要加在这里才可以

⌨️ 快捷键说明

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