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

📄 at24c01_2.lst

📁 无线红外传感报警系统
💻 LST
字号:
C51 COMPILER V7.06   AT24C01_2                                                             06/10/2005 23:25:33 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE AT24C01_2
OBJECT MODULE PLACED IN AT24c01_2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE AT24c01_2.c DEBUG OBJECTEXTEND

stmt level    source

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

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

 118   1      CY=SDA;                 //因为返回值总是放在CY中的
 119   1      SCL=0;
 120   1      return(CY);
 121   1      }
 122          
 123          /***************对IIC总线产生应答*******************/
 124          void IICACK(void)
 125          {
 126   1      SDA=0;
 127   1      SCL=1;
 128   1      _nop_();
 129   1      _nop_();
 130   1      SCL=0;
 131   1      _nop_();
 132   1      SDA=1;
 133   1      }
 134          
 135          /*****************不对IIC总线产生应答***************/
 136          void IICNoAck(void)
 137          {
 138   1      SDA=1;
 139   1      SCL=1;
 140   1      _nop_();
 141   1      _nop_();
 142   1      SCL=0;
 143   1      }
 144          
 145          /*******************向IIC总线写数据*********************/
 146          void IICSendByte(unsigned char sendbyte)
 147          {
 148   1      unsigned char data j=8;
 149   1      for(;j>0;j--)
 150   1         {
 151   2         SCL=0;
 152   2         sendbyte<<=1;        //无论C51怎样实现这个操作,始终会使CY=sendbyte^7;
 153   2         SDA=CY;
 154   2         SCL=1;
 155   2         }
 156   1      SCL=0;
 157   1      }
 158          
 159          /**********************从IIC总线上读数据子程序**********/
 160          unsigned char IICReceiveByte(void)
 161          {
 162   1      register receivebyte,i=8;
 163   1      SCL=0;
 164   1      while(i--)
 165   1         {
 166   2         SCL=1;
 167   2         receivebyte=(receivebyte<<1)|SDA;
 168   2         SCL=0;
 169   2         }
 170   1      return(receivebyte);
 171   1      }
 172          
 173          /***************一个简单延时程序************************/
 174          void Delay(unsigned char DelayCount)
 175          {
 176   1      while(DelayCount--);
 177   1      } 
 178          /*
 179          void main(void)
C51 COMPILER V7.06   AT24C01_2                                                             06/10/2005 23:25:33 PAGE 4   

 180          {unsigned i;
 181          unsigned char buff[18]={1,5,5,5,5,5,5,2,8,9,10,11,12,13,10,15,16,17};
 182          unsigned char buff2[18];
 183          RW24XX(buff2,16,0x20,0xa1);
 184          for(i=0;i<16;i++)
 185             if(buff[i]!=buff2[i])  led=0;
 186           
 187           while(1);
 188          }
 189          
 190          */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    315    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      10
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -