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

📄 24c02.lst

📁 EEPROM,AT24C02读写程序
💻 LST
字号:
C51 COMPILER V8.08   24C02                                                                 04/22/2009 13:44:22 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE 24C02
OBJECT MODULE PLACED IN 24C02.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE 24C02.C DEBUG OBJECTEXTEND

line level    source

   1          
   2          
   3          #include <reg51.h>
   4          #include <intrins.h>
   5          
   6          #define OP_READ 0xa1            // 器件地址以及读取操作
   7          #define OP_WRITE 0xa0           // 器件地址以及写入操作
   8          #define MAX_ADDR 0x7f           // AT24C02最大地址
   9          #define uchar unsigned char
  10          
  11          unsigned char code dis_code[] = {0x7e,0xbd,0xdb,0xe7,0xdb,0xbd,0x7e,0xff};
  12                                          // 写入到AT24C01的数据串
  13          
  14          sbit SDA = P3^4;
  15          sbit SCL = P3^3;
  16          
  17          
  18          void start();
  19          void stop();
  20          unsigned char shin();
  21          bit shout(unsigned char write_data);
  22          unsigned char read_random(unsigned char random_addr);
  23          void write_byte( unsigned char addr, unsigned char write_data);
  24          void fill_byte(unsigned char fill_data);
  25          void delayms(unsigned char ms);
  26          
  27          main(void)
  28          {
  29   1              unsigned char i;
  30   1              SDA = 1;
  31   1              SCL = 1;
  32   1              fill_byte(0xff);                // 全部填充0xff
  33   1      
  34   1              for(i = 0 ; i < 8; i++)         //写入显示代码到AT24Cxx
  35   1              {
  36   2                      write_byte(i, dis_code[i]);
  37   2              }
  38   1      
  39   1              i = 0;
  40   1              while(1)
  41   1              {
  42   2      
  43   2                      P0 = read_random(i);    // 循环读取24Cxx内容,并输出到P0口
  44   2                      i++;
  45   2                      i &= 0x07;              // 循环读取范围为0x00~0x07
  46   2                      delayms(250);
  47   2              }
  48   1      }
  49          
  50          void start()
  51          // 开始位
  52          {
  53   1              SDA = 1;
  54   1              SCL = 1;
  55   1              _nop_();
C51 COMPILER V8.08   24C02                                                                 04/22/2009 13:44:22 PAGE 2   

  56   1              _nop_();
  57   1              SDA = 0;
  58   1              _nop_();
  59   1              _nop_();
  60   1              _nop_();
  61   1              _nop_();
  62   1              SCL = 0;
  63   1      }
  64          
  65          void stop()
  66          // 停止位
  67          {
  68   1              SDA = 0;
  69   1              _nop_();
  70   1              _nop_();
  71   1              SCL = 1;
  72   1              _nop_();
  73   1              _nop_();
  74   1              _nop_();
  75   1              _nop_();
  76   1              SDA = 1;
  77   1      }
  78          
  79          unsigned char shin()
  80          // 从AT24Cxx移入数据到MCU
  81          {
  82   1              unsigned char i,read_data;
  83   1              for(i = 0; i < 8; i++)
  84   1              {
  85   2                      SCL = 1;
  86   2                      read_data <<= 1;
  87   2                      read_data |= (unsigned char)SDA;
  88   2                      SCL = 0;
  89   2              }
  90   1              return(read_data);
  91   1      }
  92          bit shout(unsigned char write_data)
  93          // 从MCU移出数据到AT24Cxx
  94          {
  95   1              unsigned char i;
  96   1              bit ack_bit;
  97   1              for(i = 0; i < 8; i++)          // 循环移入8个位
  98   1              {
  99   2                      SDA = (bit)(write_data & 0x80);
 100   2                      _nop_();
 101   2                      SCL = 1;
 102   2                      _nop_();
 103   2                      _nop_();
 104   2                      SCL = 0;
 105   2                      write_data <<= 1;
 106   2              }
 107   1              SDA = 1;                        // 读取应答
 108   1              _nop_();
 109   1              _nop_();
 110   1              SCL = 1;
 111   1              _nop_();
 112   1              _nop_();
 113   1              _nop_();
 114   1              _nop_();
 115   1              ack_bit = SDA;
 116   1              SCL = 0;
 117   1              return ack_bit;                 // 返回AT24Cxx应答位
C51 COMPILER V8.08   24C02                                                                 04/22/2009 13:44:22 PAGE 3   

 118   1      }
 119          
 120          void write_byte(unsigned char addr, unsigned char write_data)
 121          // 在指定地址addr处写入数据write_data
 122          {
 123   1              start();
 124   1              shout(OP_WRITE);
 125   1              shout(addr);
 126   1              shout(write_data);
 127   1              stop();
 128   1              delayms(10);            // 写入周期
 129   1      }
 130          
 131          void fill_byte(unsigned char fill_data)
 132          // 填充数据fill_data到EEPROM内
 133          {
 134   1              unsigned char i;
 135   1              for(i = 0; i < MAX_ADDR; i++)
 136   1              {
 137   2                      write_byte(i, fill_data);
 138   2              }
 139   1      
 140   1      }
 141          
 142          unsigned char read_current()
 143          // 在当前地址读取
 144          {
 145   1              unsigned char read_data;
 146   1              start();
 147   1              shout(OP_READ);
 148   1              read_data = shin();
 149   1              stop();
 150   1              return read_data;
 151   1      }
 152          
 153          unsigned char read_random(unsigned char random_addr)
 154          // 在指定地址读取
 155          {
 156   1              start();
 157   1              shout(OP_WRITE);
 158   1              shout(random_addr);
 159   1              return(read_current());
 160   1      }
 161          
 162          void delayms(unsigned char ms)  
 163          // 延时子程序
 164          {
 165   1              unsigned char i;
 166   1              while(ms--)
 167   1              {
 168   2                      for(i = 0; i < 120; i++);
 169   2              }
 170   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    246    ----
   CONSTANT SIZE    =      8    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       3
   IDATA SIZE       =   ----    ----
C51 COMPILER V8.08   24C02                                                                 04/22/2009 13:44:22 PAGE 4   

   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 + -