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

📄 at24c01.lst

📁 AT24系列EEPROM底层驱动程序
💻 LST
字号:
C51 COMPILER V7.06   AT24C01                                                               12/01/2003 10:06:15 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE AT24C01
OBJECT MODULE PLACED IN AT24C01.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE AT24C01.C ROM(SMALL) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <at892051.h>
   2          #include "intrins.h"
   3          #define uchar unsigned char
   4          #define uint unsigned int
   5          
   6          uchar    bdata buffer;
   7          
   8          sbit SDA        = P3^5; /*串行数据*/
   9          sbit SCL        = P3^4; /*串行时钟*/
  10          sbit WP         = P3^3; /*硬件写保护*/
  11          
  12          sbit      B7 = buffer^7;
  13          sbit      B6 = buffer^6;
  14          sbit      B5 = buffer^5;
  15          sbit      B4 = buffer^4;
  16          sbit      B3 = buffer^3;
  17          sbit      B2 = buffer^2;
  18          sbit      B1 = buffer^1;
  19          sbit      B0 = buffer^0;
  20          
  21          //----------------------------------------------------------------
  22          //延时4.3uS,11.0592M晶振标准延时程序
  23          //----------------------------------------------------------------
  24          void    delay_4uS(void)
  25          {
  26   1            ;
  27   1      }
  28          //----------------------------------------------------------------
  29          //延时j毫秒程序,11.0592M晶振非标准延时程序
  30          //----------------------------------------------------------------
  31          
  32          void    mS_Delay(uchar j)
  33          {
  34   1              uchar i;
  35   1              while(j>0)
  36   1                {
  37   2                      i = 0;
  38   2                      j--;
  39   2                      while(i<114) i++;
  40   2                }
  41   1      
  42   1      }
  43          //----------------------------------------------------------------
  44          /*发送起始条件*/
  45          //----------------------------------------------------------------
  46          void Start_01(void) /*起始条件*/
  47          {
  48   1              do{
  49   2                      SDA=1;
  50   2                      SCL=1;
  51   2                }while(!(SDA&&SCL));                                                  //检测总线是否可用
  52   1              delay_4uS();
  53   1              SDA=0;
  54   1              delay_4uS();
  55   1              SCL=0;
C51 COMPILER V7.06   AT24C01                                                               12/01/2003 10:06:15 PAGE 2   

  56   1                      
  57   1      }
  58          //----------------------------------------------------------------
  59           /*停止条件*/
  60          //----------------------------------------------------------------
  61          void Stop_01(void)
  62          {
  63   1              SDA=0;
  64   1              SCL=1;
  65   1              delay_4uS();
  66   1              SDA=1;
  67   1              _nop_();
  68   1              _nop_();
  69   1      }
  70          //----------------------------------------------------------------
  71          //检测应答位
  72          //----------------------------------------------------------------
  73           void Ack(void)
  74          {
  75   1              SDA = 1;
  76   1              SCL=1;
  77   1              _nop_();
  78   1              _nop_();
  79   1              while(SDA);
  80   1              SCL=0;
  81   1      
  82   1      }
  83          
  84          
  85          //----------------------------------------------------------------
  86          /*反向应答位*/
  87          //----------------------------------------------------------------
  88          void NoAck(void)
  89          {
  90   1              SDA=1;
  91   1              delay_4uS();
  92   1              SCL=1;
  93   1              delay_4uS();
  94   1              SCL=0;
  95   1      }
  96          //----------------------------------------------------------------
  97           /*发送数据子程序,Data为要求发送的数据*/
  98          //----------------------------------------------------------------
  99          void Send_01()
 100          {
 101   1              uchar i; /*位数控制*/
 102   1              for(i=0;i<8;i++)
 103   1                {             
 104   2                      SDA = B7;
 105   2                      buffer = buffer<<1;
 106   2                      delay_4uS();
 107   2                      SCL=1;
 108   2                      delay_4uS();
 109   2                      SCL = 0;                
 110   2                }     
 111   1      }
 112          
 113          //-----------------------------------------------------------------------------
 114          //读一个字节的数据,并返回该字节值,虽然资料说是负跳沿读出数据,
 115          //可是在SCL高电平时读出才是正确的
 116          //-----------------------------------------------------------------------------
 117          void   Read_01(void)
C51 COMPILER V7.06   AT24C01                                                               12/01/2003 10:06:15 PAGE 3   

 118          {
 119   1              uchar i;
 120   1              SDA=1;
 121   1              for(i=0;i<8;i++)
 122   1                {
 123   2                  buffer = buffer<<1; 
 124   2                      SCL=1;
 125   2                      _nop_();
 126   2                      _nop_();
 127   2                      B0 = SDA;       
 128   2                      _nop_();
 129   2                      SCL=0;
 130   2                      _nop_();
 131   2                      _nop_();
 132   2                }
 133   1      }
 134          
 135          //----------------------------------------------------------------
 136          //数据块写入,传递参数:数据块首址、写入地址、数据块长度
 137          //---------------------------------------------------------------
 138          void WrToROM(uchar Data[],uchar Address,uchar Num)
 139          {
 140   1              uchar data i;
 141   1              uchar data *PData;
 142   1              PData=Data;
 143   1              SBUF = 0X00;
 144   1              while(TI==0);TI =0;
 145   1              for(i=0;i<Num;i++)
 146   1                {
 147   2                      Start_01(); /*发送启动信号*/
 148   2                      buffer = Address+i;
 149   2                      buffer =(buffer<<1)|0x00;
 150   2                      Send_01(); /*发送地址*/
 151   2                      Ack();
 152   2                      SBUF = 0X11;
 153   2                      while(TI==0);TI =0;
 154   2                      buffer = *(PData+i);
 155   2                      Send_01();
 156   2                      Ack();
 157   2                      SBUF = 0X22;
 158   2                      while(TI==0);TI =0;
 159   2                      Stop_01();
 160   2                      mS_Delay(15);
 161   2                }
 162   1      }
 163          //----------------------------------------------------------------
 164          //数据块读出,传递参数:数据块首址、读出地址、数据块长度
 165          //---------------------------------------------------------------
 166          void RdFromROM(uchar Data[],uchar Address,uchar Num)
 167          {
 168   1              uchar i;
 169   1              uchar *PData;
 170   1              PData=Data;
 171   1              for(i=0;i<Num;i++)
 172   1                {
 173   2                      Start_01();
 174   2                      buffer = Address+i;
 175   2                      buffer =(buffer<<1)|0x01;
 176   2                      Send_01();
 177   2                      Ack();
 178   2                      Read_01();
 179   2                      *(PData+i)= buffer;
C51 COMPILER V7.06   AT24C01                                                               12/01/2003 10:06:15 PAGE 4   

 180   2                      NoAck();
 181   2                      Stop_01();
 182   2                }
 183   1      }
 184          //-------------------------------------------
 185          //串口发送子程序,条件:TI=1,ES=0;
 186          //---------------------------------------------
 187          void  ser_send(uchar  a)
 188          {
 189   1            while(TI==0);
 190   1            SBUF = a;
 191   1            TI=0;
 192   1      }
 193          
 194          /*=============================================================================
 195          *Name           :SysInit
 196          *Descripton     :sysem initialization
 197          *Status         :Done
 198          =============================================================================*/
 199          
 200          void      SysInit(void)
 201          {
 202   1              mS_Delay(1);
 203   1              SCON  = 0x50;                   /* SCON: mode 1, 8-bit UART, enable rcvr      */
 204   1              TMOD  = 0x21;                   /* T0工作于方式1,十六位定时器,T1工作于方式2      */
 205   1              TH1   = 0xff;                   /* TH1:  reload value for 1200 baud @ 16MHz   */
 206   1              TL1   = 0xff;
 207   1              PCON  = PCON|0x80;
 208   1              TL0   = 0x3f;
 209   1              TH0   = 0xfe;
 210   1              TR1   = 1;                      /* TR1:  timer 1 run                          */
 211   1              //TR0   = 1;                    /* TR0:  timer 0 run                    */
 212   1              IE    = 0x80;
 213   1              P1 = 0X00;
 214   1      }
 215          
 216          void main()
 217          {
 218   1              uchar Number[50]={0};
 219   1              uchar i;
 220   1              SysInit();
 221   1              for(i=0;i<50;i++)
 222   1                {
 223   2                      Number[i]=i;    
 224   2                }
 225   1              WrToROM(Number,0,50); /*将初始化后的数值写入EEPROM*/
 226   1              mS_Delay(20);
 227   1              for(i=0;i<50;i++)
 228   1                {
 229   2                      Number[i]=i+50; 
 230   2                }
 231   1              WrToROM(Number,50,50); /*将初始化后的数值写入EEPROM*/
 232   1              mS_Delay(20);
 233   1              for(i=0;i<125;i++)
 234   1                {
 235   2                      RdFromROM(Number,i,1);
 236   2                      TI = 1;
 237   2                      ser_send(Number[0]);
 238   2                }
 239   1              while(1)
 240   1                {
 241   2                      Start_01(); /*发送启动信号*/
C51 COMPILER V7.06   AT24C01                                                               12/01/2003 10:06:15 PAGE 5   

 242   2                      buffer = 0xAA; 
 243   2                      Send_01(); /*选择器件*/
 244   2                      Stop_01();
 245   2                }     
 246   1      
 247   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    405    ----
   CONSTANT SIZE    =     50    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1      63
   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 + -