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

📄 at24c02.lst

📁 Keil中文版
💻 LST
字号:
C51 COMPILER V7.00  AT24C02                                                                09/25/2002 15:25:40 PAGE 1   


C51 COMPILER V7.00, COMPILATION OF MODULE AT24C02
OBJECT MODULE PLACED IN .\At24c02.obj
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE ..\ALARM\At24c02.c BROWSE DEBUG OBJECTEXTEND PRINT(.\At24c02.lst) OBJECT(.\
                    -At24c02.obj)

stmt level    source

   1              //  AT24C02.C
   2              //  2001/11/20
   3          
   4          #include<reg51.h>
   5          #include<absacc.h>
   6          #include<intrins.h>
   7          #include"almset1.h"
   8          #include"bitdef.h"
   9          
  10          #define DEVICE_ADDRESS  0xa2
  11          
  12          extern bit flag_permit_int_t0;
  13          
  14          static void send_start_bit();
  15          static void send_stop_bit();
  16          static void send_low_ack();
  17          static void send_high_ack();
  18          static void write_1_byte(unsigned char v);
  19          static uchar read_1_byte();
  20          void read_n_bytes(uchar data * pt,uchar n,uchar word_address);
  21          void write_n_bytes(uchar data * pt,uchar n,uchar word_address);
  22          
  23          
  24          
  25          
  26              //延迟10uS
  27          #define delay_10us      _nop_();         \
  28                                  _nop_();         \
  29                                  _nop_();         \
  30                                  _nop_();         \
  31                                  _nop_();         \
  32                                  _nop_();         \
  33                                  _nop_();         \
  34                                  _nop_();         \
  35                                  _nop_();         \
  36                                  _nop_()
  37          
  38              //向EEPROM发起始位
  39          static void send_start_bit()
  40          {
  41   1       bit_scl = LOW;
  42   1       delay_10us;
  43   1       bit_sda = HIGH;
  44   1       delay_10us;
  45   1       bit_scl = HIGH;
  46   1       delay_10us;
  47   1       bit_sda = LOW;
  48   1       delay_10us;
  49   1       bit_scl = LOW;
  50   1       delay_10us;
  51   1      }
  52          
  53              //向EEPROM发停止位
  54          static void send_stop_bit()
C51 COMPILER V7.00  AT24C02                                                                09/25/2002 15:25:40 PAGE 2   

  55          {
  56   1       bit_scl = LOW;
  57   1       delay_10us;
  58   1       bit_sda = LOW;
  59   1       delay_10us;
  60   1       bit_scl = HIGH;
  61   1       delay_10us;
  62   1       bit_sda = HIGH;
  63   1       delay_10us;
  64   1       bit_scl = LOW;
  65   1       delay_10us;
  66   1      }
  67          
  68              //向EEPROM发低应答信号
  69          static void send_low_ack()
  70          {
  71   1       bit_scl = LOW;
  72   1       delay_10us;
  73   1       bit_sda = LOW;
  74   1       delay_10us;
  75   1       bit_scl = HIGH;
  76   1       delay_10us;
  77   1       bit_scl = LOW;
  78   1       delay_10us;
  79   1       bit_sda = HIGH;
  80   1       delay_10us;
  81   1      }
  82          
  83              //向EEPROM发高应答信号
  84          static void send_high_ack()
  85          {
  86   1       bit_scl = LOW;
  87   1       delay_10us;
  88   1       bit_sda = HIGH;
  89   1       delay_10us;
  90   1       bit_scl = HIGH;
  91   1       delay_10us;
  92   1       bit_scl = LOW;
  93   1       delay_10us;
  94   1       bit_sda = LOW;
  95   1       delay_10us;
  96   1      }
  97          
  98              //向EEPROM写入一字节
  99          static void write_1_byte(uchar v)
 100          {uchar i;
 101   1       bit_scl = LOW;
 102   1       for(i=0;i<8;i++)
 103   1       {v=v<<1;
 104   2        bit_sda = CY;
 105   2        delay_10us;
 106   2        bit_scl = HIGH;
 107   2        delay_10us;
 108   2        bit_scl = LOW;
 109   2        delay_10us;
 110   2       }
 111   1       bit_sda = HIGH;
 112   1       delay_10us;
 113   1       bit_scl = HIGH;
 114   1       delay_10us;
 115   1       for(i=0;i<250;i++)
 116   1       {CY = bit_sda;
C51 COMPILER V7.00  AT24C02                                                                09/25/2002 15:25:40 PAGE 3   

 117   2        if(!CY)
 118   2        {break;
 119   3        }
 120   2       }
 121   1       bit_scl = LOW;
 122   1       delay_10us;
 123   1      }
 124          
 125              //读EEPROM一字节
 126          static uchar read_1_byte()
 127          {uchar i,var;
 128   1       var=0;
 129   1       for(i=0;i<8;i++)
 130   1       {
 131   2        delay_10us;
 132   2        bit_sda = HIGH;
 133   2        delay_10us;
 134   2        bit_scl = HIGH;
 135   2        delay_10us;
 136   2        var = var<<1;
 137   2        if(bit_sda)
 138   2        {var = var+1;
 139   3        }
 140   2        delay_10us;
 141   2        bit_scl = LOW;
 142   2        delay_10us;
 143   2       }
 144   1       return(var);
 145   1      }
 146          
 147              //从EEPROM中读n字节数据
 148              //应避免跨页
 149          void read_n_bytes(uchar data * pt,uchar n,uchar word_address)
 150          {uchar i;
 151   1       flag_permit_int_t0 = FALSE;
 152   1       send_stop_bit();
 153   1       send_start_bit();
 154   1       write_1_byte(DEVICE_ADDRESS&0xfe);      //写方式器件地址(Device Address)
 155   1       write_1_byte(word_address);      //字地址(Device Address)
 156   1       send_start_bit();
 157   1       write_1_byte(DEVICE_ADDRESS|0x01);      //读方式器件地址(Device Address)
 158   1       for(i=0;i<n;i++)
 159   1       {*pt = read_1_byte();
 160   2        send_low_ack();
 161   2        pt++;
 162   2       }
 163   1       send_high_ack();
 164   1       send_stop_bit();
 165   1       send_stop_bit();
 166   1       send_stop_bit();
 167   1       send_stop_bit();
 168   1       send_stop_bit();
 169   1       send_stop_bit();
 170   1       send_stop_bit();
 171   1       send_stop_bit();
 172   1       send_stop_bit();
 173   1       send_stop_bit();
 174   1       bit_sda = HIGH;
 175   1       bit_scl = HIGH;
 176   1       flag_permit_int_t0 = TRUE;
 177   1       for(i=0;i<200;i++);
 178   1      }
C51 COMPILER V7.00  AT24C02                                                                09/25/2002 15:25:40 PAGE 4   

 179          
 180              //写n字节数据到EEPROM中
 181          void write_n_bytes(uchar data * pt,uchar n,uchar word_address)
 182          {uchar i;
 183   1       flag_permit_int_t0 = FALSE;
 184   1       send_stop_bit();
 185   1       send_start_bit();
 186   1       write_1_byte(DEVICE_ADDRESS&0xfe);      //写方式器件地址(Device Address)
 187   1       write_1_byte(word_address);      //字地址(Device Address)
 188   1       for(i=0;i<n;i++)
 189   1       {write_1_byte(*pt);
 190   2        pt++;
 191   2       }
 192   1       send_stop_bit();
 193   1       send_stop_bit();
 194   1       send_stop_bit();
 195   1       send_stop_bit();
 196   1       send_stop_bit();
 197   1       send_stop_bit();
 198   1       send_stop_bit();
 199   1       send_stop_bit();
 200   1       send_stop_bit();
 201   1       send_stop_bit();
 202   1       bit_sda = HIGH;
 203   1       bit_scl = HIGH;
 204   1       flag_permit_int_t0 = TRUE;
 205   1       for(i=0;i<200;i++);
 206   1      }
 207          


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