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

📄 wl007.lst

📁 AT89C51 24c02读写程序 AT89C51 24c02读写程序
💻 LST
字号:
C51 COMPILER V7.20   WL007                                                                 03/29/2005 15:46:59 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE WL007
OBJECT MODULE PLACED IN wl007.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE wl007.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*******************************************************************************
   2          *  标题:  伟纳电子ME300B单片机开发系统演示程序 - 读写AT24C02演示程序           *
   3          *  文件:  wl007.C                                                              *
   4          *  日期:  2004-1-5                                                             *
   5          *  版本:  1.0                                                                  *
   6          *  作者:  伟纳电子 - Freeman                                                   *
   7          *  邮箱:  freeman@willar.com                                                   *
   8          *  网站: http://www.willar.com                                                *
   9          ********************************************************************************
  10          *  描述:                                                                       *
  11          *         读写AT24C02演示程序                                                  *
  12          *                                                                              *
  13          *                                                                              *
  14          *                                                                              *
  15          ********************************************************************************
  16          * 【版权】 Copyright(C)伟纳电子 www.willar.com  All Rights Reserved            *
  17          * 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
  18          *******************************************************************************/
  19          
  20          
  21          #include <reg51.h>
  22          #include <intrins.h>
  23          
  24          #define OP_READ 0xa1            // 器件地址以及读取操作
  25          #define OP_WRITE 0xa0           // 器件地址以及写入操作
  26          #define MAX_ADDR 0x7f           // AT24C02最大地址
  27          
  28          unsigned char code dis_code[] = {0x7e,0xbd,0xdb,0xe7,0xdb,0xbd,0x7e,0xff};
  29                                          // 写入到AT24C01的数据串
  30          
  31          sbit SDA = P3^4;
  32          sbit SCL = P3^3;
  33          
  34          
  35          void start();
  36          void stop();
  37          unsigned char shin();
  38          bit shout(unsigned char write_data);
  39          unsigned char read_random(unsigned char random_addr);
  40          void write_byte( unsigned char addr, unsigned char write_data);
  41          void fill_byte(unsigned char fill_data);
  42          void delayms(unsigned char ms);
  43          
  44          main(void)
  45          {
  46   1              unsigned char i;
  47   1              SDA = 1;
  48   1              SCL = 1;
  49   1              fill_byte(0xff);                // 全部填充0xff
  50   1      
  51   1              for(i = 0 ; i < 8; i++)         //写入显示代码到AT24Cxx
  52   1              {
  53   2                      write_byte(i, dis_code[i]);
  54   2              }
  55   1      
C51 COMPILER V7.20   WL007                                                                 03/29/2005 15:46:59 PAGE 2   

  56   1              i = 0;
  57   1              while(1)
  58   1              {
  59   2      
  60   2                      P0 = read_random(i);    // 循环读取24Cxx内容,并输出到P0口
  61   2                      i++;
  62   2                      i &= 0x07;              // 循环读取范围为0x00~0x07
  63   2                      delayms(250);
  64   2              }
  65   1      }
  66          
  67          void start()
  68          // 开始位
  69          {
  70   1              SDA = 1;
  71   1              SCL = 1;
  72   1              _nop_();
  73   1              _nop_();
  74   1              SDA = 0;
  75   1              _nop_();
  76   1              _nop_();
  77   1              _nop_();
  78   1              _nop_();
  79   1              SCL = 0;
  80   1      }
  81          
  82          void stop()
  83          // 停止位
  84          {
  85   1              SDA = 0;
  86   1              _nop_();
  87   1              _nop_();
  88   1              SCL = 1;
  89   1              _nop_();
  90   1              _nop_();
  91   1              _nop_();
  92   1              _nop_();
  93   1              SDA = 1;
  94   1      }
  95          
  96          unsigned char shin()
  97          // 从AT24Cxx移入数据到MCU
  98          {
  99   1              unsigned char i,read_data;
 100   1              for(i = 0; i < 8; i++)
 101   1              {
 102   2                      SCL = 1;
 103   2                      read_data <<= 1;
 104   2                      read_data |= (unsigned char)SDA;
 105   2                      SCL = 0;
 106   2              }
 107   1              return(read_data);
 108   1      }
 109          bit shout(unsigned char write_data)
 110          // 从MCU移出数据到AT24Cxx
 111          {
 112   1              unsigned char i;
 113   1              bit ack_bit;
 114   1              for(i = 0; i < 8; i++)          // 循环移入8个位
 115   1              {
 116   2                      SDA = (bit)(write_data & 0x80);
 117   2                      _nop_();
C51 COMPILER V7.20   WL007                                                                 03/29/2005 15:46:59 PAGE 3   

 118   2                      SCL = 1;
 119   2                      _nop_();
 120   2                      _nop_();
 121   2                      SCL = 0;
 122   2                      write_data <<= 1;
 123   2              }
 124   1              SDA = 1;                        // 读取应答
 125   1              _nop_();
 126   1              _nop_();
 127   1              SCL = 1;
 128   1              _nop_();
 129   1              _nop_();
 130   1              _nop_();
 131   1              _nop_();
 132   1              ack_bit = SDA;
 133   1              SCL = 0;
 134   1              return ack_bit;                 // 返回AT24Cxx应答位
 135   1      }
 136          
 137          void write_byte(unsigned char addr, unsigned char write_data)
 138          // 在指定地址addr处写入数据write_data
 139          {
 140   1              start();
 141   1              shout(OP_WRITE);
 142   1              shout(addr);
 143   1              shout(write_data);
 144   1              stop();
 145   1              delayms(10);            // 写入周期
 146   1      }
 147          
 148          void fill_byte(unsigned char fill_data)
 149          // 填充数据fill_data到EEPROM内
 150          {
 151   1              unsigned char i;
 152   1              for(i = 0; i < MAX_ADDR; i++)
 153   1              {
 154   2                      write_byte(i, fill_data);
 155   2              }
 156   1      
 157   1      }
 158          
 159          unsigned char read_current()
 160          // 在当前地址读取
 161          {
 162   1              unsigned char read_data;
 163   1              start();
 164   1              shout(OP_READ);
 165   1              read_data = shin();
 166   1              stop();
 167   1              return read_data;
 168   1      }
 169          
 170          unsigned char read_random(unsigned char random_addr)
 171          // 在指定地址读取
 172          {
 173   1              start();
 174   1              shout(OP_WRITE);
 175   1              shout(random_addr);
 176   1              return(read_current());
 177   1      }
 178          
 179          void delayms(unsigned char ms)  
C51 COMPILER V7.20   WL007                                                                 03/29/2005 15:46:59 PAGE 4   

 180          // 延时子程序
 181          {
 182   1              unsigned char i;
 183   1              while(ms--)
 184   1              {
 185   2                      for(i = 0; i < 120; i++);
 186   2              }
 187   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    246    ----
   CONSTANT SIZE    =      8    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       3
   IDATA SIZE       =   ----    ----
   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 + -