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

📄 24c041.lst

📁 按键证明24C04功能
💻 LST
字号:
C51 COMPILER V8.02   24C041                                                                11/03/2007 09:12:09 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 24C041
OBJECT MODULE PLACED IN 24c041.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE 24c041.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*****************************************/
   2          /*作    者:焦建国  指导老师:宋树祥     */
   3          /* function:按K1键从0到7显示,按K2清除24C04中的数据*/
   4          /*2007-2,               湖南工学院       */
   5          /*****************************************///除去两个按键的功能为最简24C04子程序
   6          #include <reg52.h>
   7          #include <intrins.h>
   8          
   9          #define OP_READ 0xa1            // 器件地址以及读取操作
  10          #define OP_WRITE 0xa0           // 器件地址以及写入操作
  11          #define MAX_ADDR 0xfe           // AT24C02最大地址
  12          
  13          unsigned char code dis_code[16] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0
             -x86,0x8E}; ///*0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F,*/
  14          
  15                                          // 写入到AT24C01的数据串
  16          
  17          sbit SDA = P3^4;//P3^0;
  18          sbit SCL = P3^3;// P3^1;
  19          
  20          
  21          void start();
  22          void stop();
  23          unsigned char shin();
  24          bit shout(unsigned char write_data);
  25          unsigned char read_random(unsigned char random_addr);
  26          void write_byte( unsigned char addr, unsigned char write_data);
  27          void fill_byte(unsigned char fill_data);
  28          void delayms(unsigned char ms);
  29          sbit k1=P1^0;
  30          sbit k2=P1^1;
  31          
  32          main(void)
  33          {
  34   1              unsigned char i;
  35   1              SDA = 1;
  36   1              SCL = 1;
  37   1      //      fill_byte(0xff);                // 全部填充0xff
  38   1      
  39   1      //      for(i = 0 ; i < 8; i++)         //写入显示代码到AT24Cxx
  40   1      //      {
  41   1      //              write_byte(i, dis_code[i]);
  42   1      //      }
  43   1      
  44   1      //      i = 0;
  45   1         
  46   1              while(1)
  47   1              { 
  48   2                 if(k1==0)      //写入显示代码到AT24Cxx
  49   2                  {
  50   3                      for(i = 0 ; i < 16; i++)
  51   3                      write_byte(i, dis_code[i]);
  52   3                        }
  53   2                 if(k2==0)
  54   2                        fill_byte(0xff);
C51 COMPILER V8.02   24C041                                                                11/03/2007 09:12:09 PAGE 2   

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

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

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


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