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

📄 led.lst

📁 51单片机读写E2PROM芯片at24c02
💻 LST
字号:
C51 COMPILER V8.02   LED                                                                   02/28/2009 21:13:53 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE LED
OBJECT MODULE PLACED IN led.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE led.c DEBUG OBJECTEXTEND

line level    source

   1          #include<reg52.h>
   2          #define uchar unsigned char
   3          sbit sda=P3^3;
   4          sbit scl=P3^2;
   5          uchar a;
   6          void delay2402()
   7          { ;; }
   8          void start()  //开始信号
   9          {       
  10   1              sda=1;
  11   1              delay2402();
  12   1              scl=1;
  13   1              delay2402();
  14   1              sda=0;
  15   1              delay2402();
  16   1      }
  17          
  18          void stop()   //停止 信号
  19          {
  20   1              sda=0;
  21   1              delay2402();
  22   1              scl=1;
  23   1              delay2402();
  24   1              sda=1;
  25   1              delay2402();
  26   1      }
  27          
  28          void respons()  //应答
  29          {
  30   1              uchar i;
  31   1              scl=1;
  32   1              delay2402();
  33   1              while((sda==1)&&(i<250))i++;   //一定时间不应答就默认2402收到了
  34   1              scl=0;     //第九个时钟结束
  35   1              delay2402();
  36   1      }
  37          
  38          void init()      //总线初始化
  39          {
  40   1              sda=1;   //释放总线
  41   1              delay2402();
  42   1              scl=1;
  43   1              delay2402();
  44   1      }
  45          
  46          void write_byte(uchar date)     //写一字节
  47          {
  48   1              uchar i,temp;
  49   1              temp=date;       //data内放的为实参
  50   1      
  51   1      
  52   1              for(i=0;i<8;i++)
  53   1              {
  54   2                      temp=temp<<1; //从高位到地位读取先把最高位移入CY最后补零,移8次
  55   2                      scl=0;    //拉低,只有时钟为低电平sda才允许改变
C51 COMPILER V8.02   LED                                                                   02/28/2009 21:13:53 PAGE 2   

  56   2                  delay2402();
  57   2                      sda=CY;   //把每次移动的CY位移入sda
  58   2                      delay2402();
  59   2                      scl=1;    //拉高,只有时钟为高电平才能被读或写
  60   2                      delay2402();
  61   2              //      scl=0;
  62   2           //   delay2402();
  63   2              }
  64   1              scl=0;    //释放总线,读取应答信号(因为应答信号为低电平)
  65   1              delay2402();
  66   1              sda=1;    //应答
  67   1              delay2402();
  68   1      }
  69          
  70          uchar read_byte()         //读一个字节
  71          {
  72   1              uchar i,k;
  73   1              scl=0;     //拉低,只有低电平才允许改变
  74   1              delay2402();
  75   1              sda=1;
  76   1              delay2402();
  77   1              for(i=0;i<8;i++)
  78   1              {
  79   2                      scl=1;   //为一时才允许读
  80   2                      delay2402();    
  81   2                      k=(k<<1)|sda; //k左移一位最低位补零,最低位再和sda相或既把一位sda数据赋给k,左移8次就送完一个字节
  82   2                      scl=0;    //一个时钟读(或写)一位数据,读或写都要按时序
  83   2                      delay2402();    
  84   2              }
  85   1              return k;
  86   1      }
  87          
  88          void delay24021(uchar x)
  89          {
  90   1              uchar a,b;
  91   1              for(a=x;a>0;a--)
  92   1               for(b=100;b>0;b--);
  93   1      }
  94          
  95          void write_add(uchar address,uchar date)
  96          {
  97   1              start();
  98   1              write_byte(0xa0);//1010 000 0(1010为4位固定地址000为器件地址0为写命令)
  99   1              respons();               //应答
 100   1              write_byte(address); //写地址(2402的地址)
 101   1              respons();                       //应答
 102   1              write_byte(date);        //写数据
 103   1              respons();                       //应答
 104   1              stop();                          //停
 105   1      }
 106          
 107          uchar read_add(uchar address)
 108          {
 109   1              uchar date;
 110   1              start();
 111   1              write_byte(0xa0); //1010 000 0(1010为4位固定地址000为器件地址0为写命令)
 112   1              respons();
 113   1              write_byte(address);
 114   1              respons();
 115   1              start();
 116   1              write_byte(0xa1);
 117   1              respons();
C51 COMPILER V8.02   LED                                                                   02/28/2009 21:13:53 PAGE 3   

 118   1              date=read_byte();
 119   1              stop();
 120   1              return date;
 121   1      }
 122          
 123          void main()
 124          {
 125   1              init();
 126   1              write_add(23,0xff);
 127   1              delay24021(100);
 128   1              P0=read_add(23);
 129   1              while(1);
 130   1      }


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