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

📄 test eeprom.lst

📁 试验AT24C02EEPROM芯片程序 [实验要求] 在数码管的前两位显示0-99数字,当实验板断电后,再重新加电可继续 从断电处保存的数据开始上加,这正是体现了AT24C02有断电可保存数据
💻 LST
字号:
C51 COMPILER V6.12  TEST_EEPROM                                                            02/26/2009 14:34:10 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE TEST_EEPROM
OBJECT MODULE PLACED IN .\test eeprom.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\test eeprom.c DEBUG OBJECTEXTEND

stmt level    source

   1          
   2          //试验AT24C02EEPROM芯片程序 [实验要求]
   3          
   4          //在数码管的前两位显示0-99数字,当实验板断电后,再重新加电可继续
   5          //从断电处保存的数据开始上加,这正是体现了AT24C02有断电可保存数据能力.
   6          
   7           //[实验目的]
   8          
   9             //   掌握AT24C02程序驱动代码,掌握IIC驱动方式.
  10          
  11          
  12          #include<reg51.h>
  13          #include <intrins.h>
  14          #define uint unsigned int
  15          #define uchar unsigned char
  16          unsigned char sec;        //定义计数值,每过1秒,sec加1
  17          unsigned int tcnt;        //定时中断次数
  18          bit  write=0;             //写24C08的标志;
  19          sbit sda=P2^0;                          //IO口定义
  20          sbit scl=P2^1;
  21          sbit dula=P2^6;
  22          sbit wela=P2^7;
  23          unsigned char j,k;
  24          void delay(unsigned char i)  //延时程序
  25          {
  26   1        for(j=i;j>0;j--)
  27   1          for(k=125;k>0;k--);
  28   1      }
  29          uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,    //数码管编码
  30                                  0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  31          void display(uchar bai_c,uchar sh_c)   //显示程序
  32          {
  33   1         dula=0;
  34   1         P0=table[bai_c];  //显示百位
  35   1         dula=1;
  36   1         dula=0;
  37   1         wela=0;
  38   1         P0=0x7e;
  39   1         wela=1;
  40   1         wela=0;
  41   1         delay(5);
  42   1         dula=0;
  43   1         P0=table[sh_c];  //显示十位
  44   1         dula=1;
  45   1         dula=0;
  46   1         wela=0;
  47   1         P0=0x7d;
  48   1         wela=1;
  49   1         wela=0;
  50   1         delay(5);
  51   1      }
  52          /////////24C08读写驱动程序////////////////////
  53          void delay1(unsigned char x)
  54          {  unsigned int i;
  55   1        for(i=0;i<x;i++);
C51 COMPILER V6.12  TEST_EEPROM                                                            02/26/2009 14:34:10 PAGE 2   

  56   1        ;}
  57          void flash()
  58          {  ;  ; }
  59          void x24c08_init()  //24c08初始化子程序
  60           {scl=1; flash(); sda=1; flash();}
  61          void start()        //启动I2C总线
  62          {sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();}
  63          void stop()         //停止I2C总线
  64          {sda=0; flash(); scl=1; flash(); sda=1; flash();}
  65          void writex(unsigned char j)  //写一个字节
  66          {  unsigned char i,temp;
  67   1         temp=j;
  68   1         for (i=0;i<8;i++)
  69   1         {temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash();}
  70   1         scl=0; flash(); sda=1; flash();
  71   1      }
  72          unsigned char readx()   //读一个字节
  73          {
  74   1         unsigned char i,j,k=0;
  75   1         scl=0; flash(); sda=1;
  76   1         for (i=0;i<8;i++)
  77   1         {  flash(); scl=1; flash();
  78   2            if (sda==1) j=1;
  79   2            else j=0;
  80   2            k=(k<<1)|j;
  81   2         scl=0;}
  82   1         flash(); return(k);
  83   1      }
  84          void clock()         //I2C总线时钟
  85          {
  86   1         unsigned char i=0;
  87   1         scl=1; flash();
  88   1         while ((sda==1)&&(i<255))i++;
  89   1         scl=0; flash();
  90   1      }
  91          ////////从24c02的地址address中读取一个字节数据/////
  92          unsigned char x24c08_read(unsigned char address)
  93          {
  94   1         unsigned char i;
  95   1         start(); writex(0xa0);
  96   1         clock(); writex(address);
  97   1         clock(); start();
  98   1         writex(0xa1); clock();
  99   1         i=readx(); stop();
 100   1         delay1(10);
 101   1         return(i);
 102   1      }
 103          //////向24c02的address地址中写入一字节数据info/////
 104          void x24c08_write(unsigned char address,unsigned char info)
 105          {
 106   1         EA=0;
 107   1         start(); writex(0xa0);
 108   1         clock(); writex(address);
 109   1         clock(); writex(info);
 110   1         clock(); stop();
 111   1         EA=1;
 112   1         delay1(50);
 113   1      }
 114          void t0(void) interrupt 1 using 0  //定时中断服务函数
 115          {
 116   1      TH0=(65536-50000)/256; //对TH0 TL0赋值
 117   1      TL0=(65536-50000)%256; //重装计数初值
C51 COMPILER V6.12  TEST_EEPROM                                                            02/26/2009 14:34:10 PAGE 3   

 118   1      tcnt++;        //每过250ust tcnt加一
 119   1      if(tcnt==20)  //计满20次(1秒)时
 120   1        {
 121   2          tcnt=0;   //重新再计
 122   2          sec++;
 123   2          write=1;  //1秒写一次24C08
 124   2          if(sec==100) //定时100秒,在从零开始计时
 125   2            {sec=0;}
 126   2        }
 127   1      }
 128          void main()
 129          {
 130   1      unsigned char i;
 131   1      TMOD=0x01;  //定时器工作在方式1
 132   1      ET0=1;  EA=1;
 133   1      x24c08_init();        //初始化24C08
 134   1      sec=x24c08_read(2);//读出保存的数据赋于sec
 135   1      TH0=(65536-50000)/256; //对TH0 TL0赋值
 136   1      TL0=(65536-50000)%256; //使定时器0.05秒中断一次
 137   1      TR0=1;           //开始计时
 138   1       while(1)
 139   1        {
 140   2            i=10;
 141   2            while(i--)
 142   2            {
 143   3        display(sec/10,sec%10);
 144   3            }
 145   2       if(write==1) //判断计时器是否计时一秒
 146   2             {
 147   3        write=0;              //清零
 148   3                x24c08_write(2,sec);  //在24c08的地址2中写入数据sec
 149   3             }
 150   2         } 
 151   1      }


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