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

📄 24c02.lst

📁 2010年新增TX-1C程序
💻 LST
字号:
C51 COMPILER V8.02   24C02                                                                 07/09/2010 08:54:13 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 24C02
OBJECT MODULE PLACED IN 24c02.OBJ
COMPILER INVOKED BY: D:\处理软件\keil\C51\BIN\C51.EXE 24c02.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /***************************************************************
   2                                                  “天祥电子”            倾情奉献
   3                                                                  www.txmcu.com
   4                                                                  www.txmcu.cn
   5          *****************************************************************
   6          程序功能:  驱动 AT24C02EEPROM芯片,让其保存sec值。
   7          演示方法:  下载程序后,数码管开始显示自加数值。片刻后,关闭学习板
   8                                  电源,然后打开,会发现数码管上显示的数值是断电瞬间所显
   9                                  示的数值。(也即由AT24C02EEPROM芯片所记忆的数值。)
  10          ***************************************************************/
  11          //试验AT24C02EEPROM芯片程序
  12          #include<reg51.h>
  13          #include <intrins.h>
  14          #define uint unsigned int
  15          #define uchar unsigned char
  16          unsigned char sec,num;        //定义计数值,每过1秒,sec加1
  17          unsigned int times;        //定时中断次数
  18          bit  write=0;             //写24C02的标志;
  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          
  25          void delay(unsigned char i)             //延时程序
  26          {
  27   1        for(j=i;j>0;j--)
  28   1          for(k=125;k>0;k--);
  29   1      }
  30          
  31          uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,                         //数码管编码
  32                                  0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  33          
  34          void nop()
  35          {
  36   1              _nop_();
  37   1              _nop_();
  38   1      }
  39          void display(uchar a,uchar b)                   //显示程序
  40          {
  41   1         dula=0;
  42   1         P0=table[a];         //显示百位
  43   1         dula=1;
  44   1         dula=0;
  45   1      
  46   1         wela=0;
  47   1         P0=0x7e;
  48   1         wela=1;
  49   1         wela=0;
  50   1         delay(5);
  51   1      
  52   1         dula=0;
  53   1         P0=table[b];         //显示十位
  54   1         dula=1;
  55   1         dula=0;
C51 COMPILER V8.02   24C02                                                                 07/09/2010 08:54:13 PAGE 2   

  56   1      
  57   1         wela=0;
  58   1         P0=0x7d;
  59   1         wela=1;
  60   1         wela=0;
  61   1         delay(5);
  62   1      
  63   1      }
  64          
  65          /////////24C02读写驱动程序////////////////////
  66          void delay1(unsigned char m)
  67          {       unsigned int n;
  68   1              for(n=0;n<m;n++);
  69   1      }
  70          
  71          
  72          
  73          void init()  //24c08初始化子程序
  74          {
  75   1              scl=1;
  76   1              nop();
  77   1              sda=1;
  78   1              nop();
  79   1      }
  80          
  81          void start()        //启动I2C总线
  82          {
  83   1              sda=1;
  84   1              nop();
  85   1              scl=1;
  86   1              nop();
  87   1              sda=0;
  88   1              nop();
  89   1              scl=0;
  90   1              nop();
  91   1      }
  92          
  93          void stop()         //停止I2C总线
  94          {
  95   1              sda=0;
  96   1              nop();
  97   1              scl=1;
  98   1              nop();
  99   1              sda=1;
 100   1              nop();
 101   1      }
 102          
 103          void writebyte(unsigned char j)  //写一个字节
 104          {
 105   1              unsigned char i,temp;
 106   1              temp=j;
 107   1              for (i=0;i<8;i++)
 108   1         {
 109   2                 temp=temp<<1;
 110   2                 scl=0;
 111   2                 nop();
 112   2                 sda=CY;              //temp左移时,移出的值放入了CY中
 113   2                 nop();
 114   2                 scl=1;               //待sda线上的数据稳定后,将csl拉高
 115   2                 nop();
 116   2         }
 117   1         scl=0;
C51 COMPILER V8.02   24C02                                                                 07/09/2010 08:54:13 PAGE 3   

 118   1         nop();
 119   1         sda=1;
 120   1         nop();
 121   1      }
 122          
 123          unsigned char readbyte()   //读一个字节
 124          {
 125   1         unsigned char i,j,k=0;
 126   1         scl=0; nop(); sda=1;
 127   1         for (i=0;i<8;i++)
 128   1         {  
 129   2                      nop(); scl=1; nop();
 130   2              if(sda==1) 
 131   2                      j=1;
 132   2              else
 133   2                      j=0;
 134   2              k=(k<<1)|j;
 135   2                      scl=0;
 136   2              }
 137   1              nop();
 138   1              return(k);
 139   1      }
 140          
 141          void clock()         //I2C总线时钟
 142          {
 143   1         unsigned char i=0;
 144   1         scl=1;
 145   1         nop();
 146   1         while((sda==1)&&(i<255))
 147   1                i++;
 148   1         scl=0;
 149   1         nop();
 150   1      }
 151          
 152          ////////从24c02的地址address中读取一个字节数据/////
 153          unsigned char read24c02(unsigned char address)
 154          {
 155   1         unsigned char i;
 156   1         start();
 157   1         writebyte(0xa0);
 158   1         clock();
 159   1         writebyte(address);
 160   1         clock();
 161   1         start();
 162   1         writebyte(0xa1);
 163   1         clock();
 164   1         i=readbyte();
 165   1         stop();
 166   1         delay1(10);
 167   1         return(i);
 168   1      }
 169          
 170          //////向24c02的address地址中写入一字节数据info/////
 171          void write24c02(unsigned char address,unsigned char info)
 172          {
 173   1         EA=0;
 174   1         start();
 175   1         writebyte(0xa0);
 176   1         clock();
 177   1         writebyte(address);
 178   1         clock();
 179   1         writebyte(info);
C51 COMPILER V8.02   24C02                                                                 07/09/2010 08:54:13 PAGE 4   

 180   1         clock();
 181   1         stop();
 182   1         EA=1;
 183   1         delay1(50);
 184   1      }
 185          
 186          void main()
 187          {
 188   1      unsigned char i;
 189   1      TMOD=0x01;  //定时器工作在方式1
 190   1      ET0=1;
 191   1      EA=1;
 192   1      TH0=0x4c; //对TH0 TL0赋值
 193   1      TL0=0x00; //使定时器0.05秒中断一次
 194   1      TR0=1;           //开始计时
 195   1      
 196   1      init();        //初始化24C02
 197   1      sec=read24c02(1);//读出保存的数据赋于sec
 198   1      
 199   1      while(1)
 200   1        {
 201   2            i=20;
 202   2                //num=read24c02(1);//读出保存的数据赋于num
 203   2            while(i--)
 204   2            {
 205   3                      display(sec/10,sec%10);
 206   3            }
 207   2                if(write==1) //判断计时器是否计时一秒
 208   2             {
 209   3                      write=0;              //清零
 210   3              write24c02(1,sec);  //在24c02的地址1中写入数据sec
 211   3                 }
 212   2         } 
 213   1      }
 214          
 215          void timer0(void) interrupt 1 using 0  //定时中断服务函数
 216          {
 217   1      TH0=0x4c; //对TH0 TL0赋值 ,每隔0.05s发出一次中断。
 218   1      TL0=0x00; //重装计数初值
 219   1      times++;        //每过250ust tcnt加一
 220   1      if(times==20)  //计满20次(1秒)时
 221   1        {
 222   2          times=0;   //重新再计
 223   2          sec++;
 224   2          write=1;  //1秒写一次24C08
 225   2          if(sec==60) //定时100秒,在从零开始计时
 226   2            {sec=0;}
 227   2        }
 228   1      }


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