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

📄 eeprom24c256.lst

📁 单片机存储器扩展及24C01的Keil+Proteus试验
💻 LST
字号:
C51 COMPILER V8.05a   EEPROM24C256                                                         12/13/2006 20:06:46 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE EEPROM24C256
OBJECT MODULE PLACED IN eeprom24c256.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE eeprom24c256.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #pragma  ot(6,SIZE)
   2          #include <reg52.h>
   3          #include <intrins.h>
   4          #define  ERRORCOUNT 10
   5          sbit     SDA=P3^5;
   6          sbit     SCL=P3^4;
   7          enum  eepromtype  {M2401,M2402,M2404,M2408,M2416,M2432,M2464,M24128,M24256};
   8          enum  eepromtype EepromType;
   9          
  10          
  11          
  12          //DataBuff为读写数据输入/输出缓冲区的首址
  13          //ByteQuantity 为要读写数据的字节数量
  14          //Address 为EEPROM的片内地址
  15          //ControlByte 为EEPROM的控制字节,具体形式为(1)(0)(1)(0)(A2)(A1)(A0)(R/W),其中R/W=1,
  16          //表示读操作,R/W=0为写操作,A2,A1,A0为EEPROM的页选或片选地址;
  17          //EepromType为枚举变量,需为M2401至M24256中的一种,分别对应24C01至24C256;
  18          //函数返回值为一个位变量,若返回1表示此次操作失效,0表示操作成功;
  19          //ERRORCOUNT为允许最大次数,若出现ERRORCOUNT次操作失效后,则函数中止操作,并返回1
  20          //SDA和SCL由用户自定义,这里暂定义为P0^0和P0^1;
  21          //其余的用户不用管,只要把只子程序放在你的程序中并调用它就可以了;
  22          
  23          
  24          /***********************************************************************************/
  25          bit   RW24XX(unsigned char *DataBuff,unsigned char ByteQuantity,unsigned int Address,
  26                               unsigned char ControlByte,enum eepromtype EepromType)
  27          {
  28   1      void Delay(unsigned char DelayCount);
  29   1      void IICStart(void);
  30   1      void IICStop(void);
  31   1      bit  IICRecAck(void);
  32   1      void IICNoAck(void);
  33   1      void IICAck(void);
  34   1      unsigned char IICReceiveByte(void);
  35   1      void IICSendByte(unsigned char sendbyte);
  36   1      unsigned char data j,i=ERRORCOUNT;
  37   1      bit      errorflag=1;
  38   1      while(i--)
  39   1         {
  40   2         IICStart();
  41   2         IICSendByte(ControlByte&0xfe);
  42   2         if(IICRecAck())
  43   2             continue;
  44   2         if(EepromType>M2416)
  45   2            {
  46   3            IICSendByte((unsigned char)(Address>>8));
  47   3            if(IICRecAck())
  48   3               continue;
  49   3            }
  50   2         IICSendByte((unsigned char)Address);
  51   2         if(IICRecAck())
  52   2             continue;
  53   2         if(!(ControlByte&0x01))
  54   2            {
  55   3            j=ByteQuantity;
C51 COMPILER V8.05a   EEPROM24C256                                                         12/13/2006 20:06:46 PAGE 2   

  56   3            errorflag=0;                      //********clr errorflag
  57   3            while(j--)
  58   3              {
  59   4              IICSendByte(*DataBuff++);
  60   4              if(!IICRecAck())
  61   4                 continue;
  62   4              errorflag=1;
  63   4              break;
  64   4              }
  65   3            if(errorflag==1)
  66   3              continue;
  67   3            break;
  68   3            }
  69   2         else
  70   2           {
  71   3           IICStart();
  72   3           IICSendByte(ControlByte);
  73   3           if(IICRecAck())
  74   3             continue;
  75   3           while(--ByteQuantity)
  76   3             {
  77   4             *DataBuff++=IICReceiveByte();
  78   4             IICAck();
  79   4             }
  80   3           *DataBuff=IICReceiveByte();        //read last byte data
  81   3           IICNoAck();
  82   3           errorflag=0;
  83   3           break;
  84   3           }
  85   2        }
  86   1      IICStop();
  87   1      if(!(ControlByte&0x01))
  88   1        {
  89   2        Delay(255);
  90   2        Delay(255);
  91   2        Delay(255);
  92   2        Delay(255);
  93   2        }
  94   1      return(errorflag);
  95   1      }
  96          
  97          
  98          /*****************以下是对IIC总线的操作子程序***/
  99          /*****************启动总线**********************/
 100          void IICStart(void)
 101          {
 102   1      SCL=0;                  //
 103   1      SDA=1;
 104   1      SCL=1;
 105   1      _nop_();
 106   1      _nop_();
 107   1      _nop_();
 108   1      SDA=0;
 109   1      _nop_();
 110   1      _nop_();
 111   1      _nop_();
 112   1      _nop_();
 113   1      SCL=0;
 114   1      SDA=1;                  //
 115   1      }
 116          
 117          /*****************停止IIC总线****************/
C51 COMPILER V8.05a   EEPROM24C256                                                         12/13/2006 20:06:46 PAGE 3   

 118          void IICStop(void)
 119          {
 120   1      SCL=0;
 121   1      SDA=0;
 122   1      SCL=1;
 123   1      _nop_();
 124   1      _nop_();
 125   1      _nop_();
 126   1      SDA=1;
 127   1      _nop_();
 128   1      _nop_();
 129   1      _nop_();
 130   1      SCL=0;
 131   1      }
 132          
 133          /**************检查应答位*******************/
 134          bit IICRecAck(void)
 135          {
 136   1      SCL=0;
 137   1      SDA=1;
 138   1      SCL=1;
 139   1      _nop_();
 140   1      _nop_();
 141   1      _nop_();
 142   1      _nop_();
 143   1      CY=SDA;                 //因为返回值总是放在CY中的
 144   1      SCL=0;
 145   1      return(CY);
 146   1      }
 147          
 148          /***************对IIC总线产生应答*******************/
 149          void IICACK(void)
 150          {
 151   1      SDA=0;
 152   1      SCL=1;
 153   1      _nop_();
 154   1      _nop_();
 155   1      _nop_();
 156   1      _nop_();
 157   1      SCL=0;
 158   1      _nop_();
 159   1      SDA=1;
 160   1      }
 161          
 162          /*****************不对IIC总线产生应答***************/
 163          void IICNoAck(void)
 164          {
 165   1      SDA=1;
 166   1      SCL=1;
 167   1      _nop_();
 168   1      _nop_();
 169   1      _nop_();
 170   1      _nop_();
 171   1      SCL=0;
 172   1      }
 173          
 174          /*******************向IIC总线写数据*********************/
 175          void IICSendByte(unsigned char sendbyte)
 176          {
 177   1      unsigned char data j=8;
 178   1      for(;j>0;j--)
 179   1         {
C51 COMPILER V8.05a   EEPROM24C256                                                         12/13/2006 20:06:46 PAGE 4   

 180   2         SCL=0;
 181   2         sendbyte<<=1;        //无论C51怎样实现这个操作,始终会使CY=sendbyte^7;
 182   2         SDA=CY;
 183   2         SCL=1;
 184   2         }
 185   1      SCL=0;
 186   1      }
 187          
 188          /**********************从IIC总线上读数据子程序**********/
 189          unsigned char IICReceiveByte(void)
 190          {
 191   1      register receivebyte,i=8;
 192   1      SCL=0;
 193   1      while(i--)
 194   1         {
 195   2         SCL=1;
 196   2         receivebyte=(receivebyte<<1)|SDA;
 197   2         SCL=0;
 198   2         }
 199   1      return(receivebyte);
 200   1      }
 201          
 202          /***************一个简单延时程序************************/
 203          void Delay(unsigned char DelayCount)
 204          {
 205   1      while(DelayCount--);
 206   1      }
 207          


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