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

📄 at24c02.lst

📁 IIC总线epprom 24c02源程序
💻 LST
字号:
C51 COMPILER V8.05a   AT24C02                                                              12/20/2008 11:08:09 PAGE 1   


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

line level    source

   1          #include<reg52.h>
   2          #define uchar unsigned char
   3          uchar temp;
   4          sbit dula=P2^6;
   5          sbit wela=P2^7;
   6          sbit sda=P2^0;
   7          sbit scl=P2^1;
   8          sbit wr=P3^7;
   9          sbit P30=P3^0;
  10          sbit P31=P3^1;
  11          uchar a;
  12          void delay()
  13          { ;; }
  14          void start()  //开始信号
  15          {       
  16   1              sda=1;//sda为高 
  17   1              delay();//简单延时
  18   1              scl=1;//scl为高
  19   1              delay();//简单延时
  20   1              sda=0;//sda为低
  21   1              delay();//简单延时
  22   1      }
  23          
  24          void stop()   //停止
  25          {
  26   1              sda=0;//sda为低
  27   1              delay();//简单延时
  28   1              scl=1;//scl为高
  29   1              delay();//简单延时
  30   1              sda=1;//sda为高 
  31   1              delay();
  32   1      }
  33          
  34          void respons()  //应答
  35          {
  36   1              uchar i;
  37   1              scl=1;//scl为高
  38   1              delay();//简单延时
  39   1              while((sda==1)&&(i<250))i++;//(sda==1)和(i<250)只要有一个为真就退出while循环
  40   1              scl=0;//scl为低
  41   1              delay();//简单延时
  42   1      }
  43          
  44          void init()//初始化
  45          {
  46   1              wr=0;//关闭写保护
  47   1              sda=1;//sda为高
  48   1              delay();//简单延时
  49   1              scl=1;//scl为高
  50   1              delay();//简单延时                      
  51   1      }
  52          
  53          void write_byte(uchar date)//写数据
  54          {
  55   1              uchar i,temp;
C51 COMPILER V8.05a   AT24C02                                                              12/20/2008 11:08:09 PAGE 2   

  56   1              temp=date;
  57   1      
  58   1      
  59   1              for(i=0;i<8;i++)//依次将8个字节写入
  60   1              {
  61   2                      temp=temp<<1;
  62   2                      scl=0;
  63   2                  delay();
  64   2                      sda=CY;
  65   2                      delay();
  66   2                      scl=1;
  67   2                      delay();
  68   2              }
  69   1              scl=0;
  70   1              delay();
  71   1              sda=1;
  72   1              delay();
  73   1      }
  74          
  75          uchar read_byte()//读数据
  76          {
  77   1              uchar i,k;
  78   1              scl=0;
  79   1              delay();
  80   1              sda=1;
  81   1              delay();
  82   1              for(i=0;i<8;i++)//依次读出8个字节
  83   1              {
  84   2                      scl=1;
  85   2                      delay();        
  86   2                      k=(k<<1)|sda;
  87   2                      scl=0;
  88   2                      delay();        
  89   2              }
  90   1              return k;
  91   1      }
  92          
  93          void delay1(uchar x)//延时
  94          {
  95   1              uchar a,b;
  96   1              for(a=x;a>0;a--)
  97   1               for(b=100;b>0;b--);
  98   1      }
  99          
 100          void write_add(uchar address,uchar date)//写
 101          {
 102   1              start();//开始信号
 103   1              write_byte(0xa0);//选择器件,并发出写信号
 104   1              respons();//等待应答信号
 105   1              write_byte(address);//发出要写数据的器件地址
 106   1              respons();//等待应答
 107   1              write_byte(date);//发出要写的数据给器件
 108   1              respons();//等待应答
 109   1              stop();//停止信号
 110   1      }
 111          
 112          uchar read_add(uchar address)//读
 113          {
 114   1              uchar date;
 115   1              start();//开始信号
 116   1              write_byte(0xa0);//选择器件,并发出写信号
 117   1              respons();//等待应答
C51 COMPILER V8.05a   AT24C02                                                              12/20/2008 11:08:09 PAGE 3   

 118   1              write_byte(address);//发出要数据的器件地址
 119   1              respons();//等待应答
 120   1              start();//开始信号
 121   1              write_byte(0xa1);//选择器件,并发出读信号
 122   1              respons();//等待应答
 123   1              date=read_byte();//把器件地址中的数据读出后,放在date中
 124   1              stop();//停止信号
 125   1              return date;//返回值
 126   1      }
 127          
 128          void main()
 129          {  uchar k=0;k=read_add(0x01);P1=k;
 130   1              init();//初始化器件
 131   1              while(1){
 132   2              
 133   2              if(P30==0){delay1(10);if(P30==0)write_add(0x01,k);while(P30==0);}//将k值写入芯片的第1个地址
 134   2                      delay1(200);//延时100ms,(这个延时过短,会造成错误)
 135   2              if(P31==0){delay1(10);if(P31==0)k++;P1=k;while(P31==0);}
 136   2                    temp=read_add(0x01);//将芯片的第23个地址中的数据读出,赋给temp
 137   2                    P0=temp;//将temp的数据赋给P0口
 138   2                      
 139   2              
 140   2                      }
 141   1      
 142   1      }
 143          
 144          


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