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

📄 eepromrw.lst

📁 程序为监测报警
💻 LST
字号:
C51 COMPILER V7.50   EEPROMRW                                                              05/30/2006 10:29:05 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE EEPROMRW
OBJECT MODULE PLACED IN EEPROMRW.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE EEPROMRW.C LARGE OPTIMIZE(SIZE) DEBUG OBJECTEXTEND

line level    source

   1                                  /*————————————————————
   2          〖说明〗24LC65 I2C EEPROM字节读写驱动程序,芯片A0-A1-A2要接VCC。
   3          现缺页写、页读,和CRC校验程序。以下程序经过50台验证,批量的效果有待考
   4          察。
   5          为了安全起见,程序中很多NOP是冗余的,希望读者能进一步精简,但必须经过验
   6          证。
   7          51晶振为11.0592MHz
   8          〖文件〗24LC65.c ﹫2001/03/23
   9          〖作者〗龙啸九天 c51@yeah.net http://mcs51.yeah.net/
  10          〖修改〗修改建议请到论坛公布 http://c51bbs.yeah.net/
  11          〖版本〗V1.00A Build 0323
  12          —————————————————————*/
  13          #include <reg52.h >
  14          #include<INTRINS.H>
  15          #define SDA P3_5
  16          #define SCL P3_4
  17          #define uchar  unsigned char
  18          #define uint   unsigned int
  19          sbit    P3_5 = P3^5;
  20          sbit    P3_4 = P3^4;
  21          /*----------------------------------------------------------------------------
  22          调用方式:write_8bit(uchar ch) ﹫2001/03/23
  23          函数说明:内函数,私有,用户不直接调用。
  24          ------------------------------------------------------------------------------*/
  25          write_8bit(uchar ch)
  26          {
  27   1      uchar i=8;
  28   1      SCL=0;
  29   1      _nop_();_nop_();_nop_();_nop_();_nop_();
  30   1      while (i--)
  31   1      {
  32   2      SDA=(bit)(ch&0x80);
  33   2      _nop_();_nop_();_nop_();_nop_();_nop_();
  34   2      ch<<=1;
  35   2      SCL=1;
  36   2      _nop_();_nop_();_nop_();_nop_();_nop_();
  37   2      SCL=0;
  38   2      _nop_();_nop_();_nop_();_nop_();_nop_();
  39   2      }
  40   1      _nop_();_nop_();_nop_();_nop_();_nop_();
  41   1      _nop_();_nop_();_nop_();_nop_();_nop_();
  42   1      
  43   1      }
  44          
  45          /*------------------------------------------------------------------------------
  46          --
  47          调用方式:void ACK(void) ﹫2001/03/23
  48          函数说明:内函数,私有,用户不直接调用。
  49          --------------------------------------------------------------------------------
  50          -*/
  51          void ACK(void)
  52          
  53          {
  54   1      uchar time_1 ;
  55   1      SDA=1;
C51 COMPILER V7.50   EEPROMRW                                                              05/30/2006 10:29:05 PAGE 2   

  56   1      SCL=0;
  57   1      _nop_();_nop_();_nop_();_nop_();_nop_();
  58   1      SCL=1;
  59   1      time_1=5;
  60   1      while(SDA) {if (!(time_1--)) break;} //ACK
  61   1      SCL=0;
  62   1      _nop_();_nop_();_nop_();_nop_();_nop_();
  63   1      }
  64          
  65          /*------------------------------------------------------------------------------
  66          --
  67          调用方式:void Write24LC65(uint address,uchar ddata) ﹫2001/03/23
  68          函数说明:在指定地址address(address<0x2000)写入一个字节ddata
  69          --------------------------------------------------------------------------------
  70          -*/
  71          void Write24LC65(uint address,uchar ddata)//
  72          {
  73   1      SCL=1;
  74   1      _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Tsu:STA
  75   1      SDA=0;
  76   1      _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Thd:STA
  77   1      SCL=0; //START
  78   1      write_8bit(0xae); //写从地址
  79   1      ACK();
  80   1      write_8bit(address>>8);
  81   1      ACK();
  82   1      write_8bit(address&0x00FF);
  83   1      ACK();
  84   1      write_8bit(ddata);
  85   1      ACK();
  86   1      SDA=0;_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_
  87   1      ();SDA=1; //STOP
  88   1      _nop_();_nop_();_nop_();_nop_();_nop_();
  89   1      _nop_();_nop_();_nop_();_nop_();_nop_();
  90   1      //delay(10);
  91   1      }
  92          
  93          /*------------------------------------------------------------------------------
  94          --
  95          调用方式:uchar Read24LC65(uint address) ﹫2001/03/23
  96          函数说明:读取24LC65指定地址address(address<0x2000)的数据。
  97          --------------------------------------------------------------------------------
  98          -*/
  99          uchar Read24LC65(uint address)
 100          {
 101   1      uchar ddata=0;
 102   1      uchar i=8;
 103   1      SDA=0;_nop_();SCL=0; //START
 104   1      write_8bit(0xae); //写从地址
 105   1      ACK();
 106   1      write_8bit(address>>8);
 107   1      ACK();
 108   1      write_8bit(address&0x00FF);
 109   1      ACK();
 110   1      //以上是一个“哑”写操作,相当于设置当前地址
 111   1      
 112   1      SCL=1;
 113   1      _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Tsu:STA
 114   1      SDA=0;
 115   1      _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Thd:STA
 116   1      SCL=0; //START
 117   1      write_8bit(0xaf); //写从地址,置为读模式
C51 COMPILER V7.50   EEPROMRW                                                              05/30/2006 10:29:05 PAGE 3   

 118   1      ACK();
 119   1      while (i--)
 120   1      {
 121   2      SDA=1;
 122   2      ddata<<=1;
 123   2      SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();SCL=1;
 124   2      if (SDA) ddata|=0x01;
 125   2      }
 126   1      
 127   1      SCL=0;_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 128   1      SDA=0;_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_
 129   1      ();SDA=1; //STOP
 130   1      _nop_();_nop_();_nop_();_nop_();_nop_();
 131   1      _nop_();_nop_();_nop_();_nop_();_nop_();
 132   1      //delay(5);
 133   1      return ddata;
 134   1      }
 135          
 136          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    266    ----
   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 + -