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

📄 at24c02.lst

📁 AT24系列EEPROM底层驱动程序
💻 LST
字号:
C51 COMPILER V7.06   AT24C02                                                               12/05/2003 14:04:57 PAGE 1   


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

stmt level    source

   1          //*****************************************************************
   2          //MCU:AT892051
   3          //EEPROM:AT24C02
   4          //11.0592M晶振
   5          //测试程序,绝对好用
   6          //对PC波特率56000(呵呵,快了对程序影响小,但会出误码)
   7          //******************************************************************
   8          #include <at892051.h>
   9          #include "intrins.h"
  10          #define uchar unsigned char
  11          #define uint unsigned int
  12          
  13          #define AddWr 0xa0 /*器件地址选择及写标志*/
  14          #define AddRd 0xa1 /*器件地址选择及读标志*/
  15          /*有关全局变量*/
  16          uchar    bdata buffer;
  17          
  18          sbit SDA        = P3^5; /*串行数据*/
  19          sbit SCL        = P3^4; /*串行时钟*/
  20          sbit WP         = P3^3; /*硬件写保护*/
  21          
  22          sbit      B7 = buffer^7;
  23          sbit      B6 = buffer^6;
  24          sbit      B5 = buffer^5;
  25          sbit      B4 = buffer^4;
  26          sbit      B3 = buffer^3;
  27          sbit      B2 = buffer^2;
  28          sbit      B1 = buffer^1;
  29          sbit      B0 = buffer^0;
  30          
  31          //----------------------------------------------------------------
  32          //延时4.3uS,11.0592M晶振标准延时程序
  33          //----------------------------------------------------------------
  34          void    delay_4uS(void)
  35          {
  36   1            ;
  37   1      }
  38          //----------------------------------------------------------------
  39          //延时j毫秒程序,11.0592M晶振非标准延时程序
  40          //----------------------------------------------------------------
  41          
  42          void    mS_Delay(uchar j)
  43          {
  44   1              uchar i;
  45   1              while(j>0)
  46   1                {
  47   2                      i = 0;
  48   2                      j--;
  49   2                      while(i<114) i++;
  50   2                }
  51   1      
  52   1      }
  53          //----------------------------------------------------------------
  54          /*发送起始条件*/
  55          //----------------------------------------------------------------
C51 COMPILER V7.06   AT24C02                                                               12/05/2003 14:04:57 PAGE 2   

  56          void Start_01(void) /*起始条件*/
  57          {
  58   1              do{
  59   2                      SDA=1;
  60   2                      SCL=1;
  61   2                }while(!(SDA&&SCL));                                                  //检测总线是否可用
  62   1              delay_4uS();
  63   1              SDA=0;
  64   1              delay_4uS();
  65   1              SCL=0;
  66   1                      
  67   1      }
  68          //----------------------------------------------------------------
  69           /*停止条件*/
  70          //----------------------------------------------------------------
  71          void Stop_01(void)
  72          {
  73   1              SDA=0;
  74   1              SCL=1;
  75   1              delay_4uS();
  76   1              SDA=1;
  77   1              _nop_();
  78   1              _nop_();
  79   1      }
  80          //----------------------------------------------------------------
  81          //检测应答位
  82          //----------------------------------------------------------------
  83           void Ack(void)
  84          {
  85   1              SDA = 1;
  86   1              SCL=1;
  87   1              _nop_();
  88   1              _nop_();
  89   1              while(SDA);
  90   1              SCL=0;
  91   1      
  92   1      }
  93          
  94          
  95          //----------------------------------------------------------------
  96          /*反向应答位*/
  97          //----------------------------------------------------------------
  98          void NoAck(void)
  99          {
 100   1              SDA=1;
 101   1              delay_4uS();
 102   1              SCL=1;
 103   1              delay_4uS();
 104   1              SCL=0;
 105   1      }
 106          //----------------------------------------------------------------
 107           /*发送数据子程序,Data为要求发送的数据*/
 108          //----------------------------------------------------------------
 109          void Send_01(void)
 110          {
 111   1              uchar i; /*位数控制*/
 112   1              for(i=0;i<8;i++)
 113   1                {             
 114   2                      SDA = B7;
 115   2                      buffer = buffer<<1;
 116   2                      delay_4uS();
 117   2                      SCL=1;
C51 COMPILER V7.06   AT24C02                                                               12/05/2003 14:04:57 PAGE 3   

 118   2                      delay_4uS();
 119   2                      SCL = 0;                
 120   2                }     
 121   1      }
 122          
 123          //-----------------------------------------------------------------------------
 124          //读一个字节的数据,并返回该字节值,虽然资料说是负跳沿读出数据,
 125          //可是在SCL高电平时读出才是正确的
 126          //-----------------------------------------------------------------------------
 127          void   Read_01(void)
 128          {
 129   1              uchar i;
 130   1              SDA=1;
 131   1              for(i=0;i<8;i++)
 132   1                {
 133   2                  buffer = buffer<<1; 
 134   2                      SCL=1;
 135   2                      _nop_();
 136   2                      _nop_();
 137   2                      B0 = SDA;       
 138   2                      _nop_();
 139   2                      SCL=0;
 140   2                      _nop_();
 141   2                      _nop_();
 142   2                }
 143   1      }
 144          
 145          //----------------------------------------------------------------
 146          //数据块写入,传递参数:数据块首址、写入地址、数据块长度
 147          //---------------------------------------------------------------
 148          void WrToROM(uchar Data[],uchar Address,uchar Num)
 149          {
 150   1              uchar data i;
 151   1              uchar data *PData;
 152   1              WP = 0;
 153   1              PData=Data;
 154   1              for(i=0;i<Num;i++)
 155   1                {
 156   2                      Start_01(); /*发送启动信号*/
 157   2                      buffer = AddWr; 
 158   2                      Send_01(); /*选择器件*/
 159   2                      Ack();
 160   2                      buffer = Address+i;
 161   2                      Send_01(); /*发送地址*/
 162   2                      Ack();
 163   2                      buffer = *(PData+i);
 164   2                      Send_01();
 165   2                      Ack();
 166   2                      Stop_01();
 167   2                      mS_Delay(15);
 168   2                }
 169   1              WP = 1;
 170   1      }
 171          //----------------------------------------------------------------
 172          //数据块读出,传递参数:数据块首址、读出地址、数据块长度
 173          //---------------------------------------------------------------
 174          void RdFromROM(uchar Data[],uchar Address,uchar Num)
 175          {
 176   1              uchar i;
 177   1              uchar *PData;
 178   1              PData=Data;
 179   1              for(i=0;i<Num;i++)
C51 COMPILER V7.06   AT24C02                                                               12/05/2003 14:04:57 PAGE 4   

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

 242   1              for(i=0;i<50;i++)
 243   1                {
 244   2                      Number[i]=i+50; 
 245   2                }
 246   1              WrToROM(Number,50,50); /*将初始化后的数值写入EEPROM*/
 247   1              mS_Delay(20);
 248   1              for(i=0;i<50;i++)
 249   1                {
 250   2                      Number[i]=i+100;        
 251   2                }
 252   1              WrToROM(Number,100,50); //将初始化后的数值写入EEPROM
 253   1              mS_Delay(20);
 254   1              for(i=0;i<50;i++)
 255   1                {
 256   2                      Number[i]=i+150;        
 257   2                }
 258   1              WrToROM(Number,150,50); //将初始化后的数值写入EEPROM
 259   1              mS_Delay(20);
 260   1              for(i=0;i<50;i++)
 261   1                {
 262   2                      Number[i]=i+200;        
 263   2                }
 264   1              WrToROM(Number,200,50); //将初始化后的数值写入EEPROM
 265   1              mS_Delay(20);
 266   1              for(i=0;i<255;i++)
 267   1                {
 268   2                      RdFromROM(Number,i,1);
 269   2                      TI = 1;
 270   2                      ser_send(Number[0]);
 271   2                }
 272   1              WP= 1;                                          //将AT24C01A写保护
 273   1              while(1);
 274   1      }


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