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

📄 eeprom_24c02.lst

📁 单片机的实用程序代码
💻 LST
字号:
C51 COMPILER V7.02b   EEPROM_24C02                                                         09/26/2009 10:30:46 PAGE 1   


C51 COMPILER V7.02b, COMPILATION OF MODULE EEPROM_24C02
OBJECT MODULE PLACED IN EEPROM_24C02.OBJ
COMPILER INVOKED BY: D:\Progrom\Keil\C51\BIN\C51.EXE EEPROM_24C02.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /********************************************************************
   2          * 文件名  : EEPROM_24C02.c
   3          * 描述    :  该文件实现对24C02的操作。
   4                               确认试验是否成功:电源上电后,数码管的值在递增,观察值。关闭电源,待几秒后上电,
   5                               数码管显示的值会从断电钱的那个值开始显示。
   6          * 创建人  : 东流,2009年4月9日
   7          ***********************************************************************/
   8          #include <reg52.h>
   9          #include <intrins.h>
  10          
  11          #define uchar unsigned char
  12          #define uint  unsigned int
  13          
  14          sbit scl=P1^5;  //24c08 SCL
  15          sbit sda=P3^6;  //24c08 SDA
  16          
  17          uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 
  18          uchar sec;      //定义计数值,每过1秒,sec加1 
  19          uint write;             //写标志位
  20          
  21          /********************************************************************
  22          * 名称 : delay1()
  23          * 功能 : 短暂延时
  24          * 输入 : x
  25          * 输出 : 无
  26          ***********************************************************************/
  27          void delay1(uchar x)
  28          {  
  29   1              uint i;
  30   1              for(i=0; i<x; i++)
  31   1              ;
  32   1      }
  33          
  34          /********************************************************************
  35          * 名称 : flash()
  36          * 功能 : 延时,时间为2个NOP,大概为2US
  37          * 输入 : 无
  38          * 输出 : 无
  39          ***********************************************************************/
  40          void flash(void) 
  41          {
  42   1              _nop_();
  43   1              _nop_();
  44   1      }
  45          
  46          /********************************************************************
  47          * 名称 : x24c02_init()
  48          * 功能 : 24c02初始化子程序
  49          * 输入 : 无
  50          * 输出 : 无
  51          ***********************************************************************/
  52          void x24c02_init(void) 
  53          {
  54   1              scl = 1;
  55   1              flash();
C51 COMPILER V7.02b   EEPROM_24C02                                                         09/26/2009 10:30:46 PAGE 2   

  56   1              sda = 1;
  57   1              flash();
  58   1      }
  59          
  60          /********************************************************************
  61          * 名称 : start(void)
  62          * 功能 : 启动I2C总线
  63          * 输入 : 无
  64          * 输出 : 无
  65          ***********************************************************************/
  66          void start(void)
  67          {
  68   1              sda = 1;
  69   1              flash(); 
  70   1              scl = 1; 
  71   1              flash(); 
  72   1              sda = 0; 
  73   1              flash(); 
  74   1              scl = 0; 
  75   1              flash();
  76   1      }
  77          
  78          /********************************************************************
  79          * 名称 : stop()
  80          * 功能 : 停止I2C总线
  81          * 输入 : 无
  82          * 输出 : 无
  83          ***********************************************************************/
  84          void stop() 
  85          {
  86   1              sda = 0; 
  87   1              flash();
  88   1              scl = 1;
  89   1              flash();
  90   1              sda = 1;
  91   1              flash();
  92   1      }
  93          
  94          /********************************************************************
  95          * 名称 : writex()
  96          * 功能 : 写一个字节
  97          * 输入 : j(需要写入的值)
  98          * 输出 : 无
  99          ***********************************************************************/
 100          void writex(uchar j)
 101          {  
 102   1              uchar i,temp;
 103   1              temp = j;
 104   1              for(i=0; i<8; i++)
 105   1              {
 106   2                      temp = temp << 1; 
 107   2                      scl = 0; 
 108   2                      flash(); 
 109   2                      sda = CY; 
 110   2                      flash();
 111   2                      scl = 1; 
 112   2                      flash();
 113   2              }
 114   1              scl = 0;
 115   1              flash(); 
 116   1              sda = 1;
 117   1              flash();
C51 COMPILER V7.02b   EEPROM_24C02                                                         09/26/2009 10:30:46 PAGE 3   

 118   1      }
 119          
 120          /********************************************************************
 121          * 名称 : readx()
 122          * 功能 : 读一个字节
 123          * 输入 : 无
 124          * 输出 : 读出的值
 125          ***********************************************************************/
 126          uchar readx(void)
 127          {
 128   1              uchar i, j, k = 0;
 129   1              scl = 0;
 130   1              flash();
 131   1              sda = 1;
 132   1              for(i=0; i<8; i++)
 133   1              {  
 134   2                      flash();
 135   2                      scl = 1;
 136   2                      flash();
 137   2                      if(sda == 1)
 138   2                      {
 139   3                              j = 1;
 140   3                      }
 141   2                      else j = 0;
 142   2                      k = (k << 1) | j; 
 143   2                      scl = 0;
 144   2              }
 145   1              flash(); 
 146   1              return(k);
 147   1      }
 148          
 149          /********************************************************************
 150          * 名称 : clock()
 151          * 功能 : I2C总线时钟
 152          * 输入 : 无
 153          * 输出 : 无
 154          ***********************************************************************/
 155          void clock(void)
 156          {
 157   1              uchar i = 0;
 158   1              scl = 1;
 159   1              flash();
 160   1              while((sda == 1) && (i < 255)) 
 161   1              {
 162   2                      i++;
 163   2              }
 164   1              scl = 0;
 165   1              flash();
 166   1      }
 167          
 168          /********************************************************************
 169          * 名称 : x24c02_read()
 170          * 功能 : 从24c02中读出值
 171          * 输入 : address(要在这个地址读取值)
 172          * 输出 : 从24c02中读出的值
 173          ***********************************************************************/
 174          uchar x24c02_read(uchar address)
 175          {
 176   1              uchar i;
 177   1              start();
 178   1              writex(0xa0);
 179   1              clock();
C51 COMPILER V7.02b   EEPROM_24C02                                                         09/26/2009 10:30:46 PAGE 4   

 180   1              writex(address);
 181   1              clock();
 182   1              start();
 183   1              writex(0xa1);
 184   1              clock();
 185   1              i = readx();
 186   1              stop();
 187   1              delay1(10);
 188   1              return(i);
 189   1      }
 190          
 191          /********************************************************************
 192          * 名称 : x24c02_write()
 193          * 功能 : 想24c02中写入数据
 194          * 输入 : address(地址) , info(值)
 195          * 输出 : 无
 196          ***********************************************************************/
 197          void x24c02_write(uchar address, uchar info)
 198          {
 199   1              EA = 0;
 200   1              start();
 201   1              writex(0xa0);
 202   1              clock();
 203   1              writex(address);
 204   1              clock();
 205   1              writex(info);
 206   1              clock();
 207   1              stop();
 208   1              EA = 1;
 209   1              delay1(50);
 210   1      }
 211          
 212          /********************************************************************
 213          * 名称 : Delay_1ms()
 214          * 功能 : 延时,延时时间为 1ms * i
 215          * 输入 : i(延时1ms的个数)
 216          * 输出 : 无
 217          ***********************************************************************/
 218          void Delay_1ms(uint i)
 219          {
 220   1              uchar x, j;
 221   1              for(j=0; j<i; j++)
 222   1              for(x=0; x<=148; x++)
 223   1              ;       
 224   1      }
 225          
 226          /********************************************************************
 227          * 名称 : LED()
 228          * 功能 : 显示
 229          * 输入 : 无
 230          * 输出 : 无
 231          ***********************************************************************/
 232          void LED()                  //LED显示函数
 233          {
 234   1              P2 = 0x06; 
 235   1              P0 = table[sec / 10]; 
 236   1              Delay_1ms(5);
 237   1              P2 = 0x07;
 238   1              P0 = table[sec % 10];
 239   1              Delay_1ms(5);
 240   1      }
 241          
C51 COMPILER V7.02b   EEPROM_24C02                                                         09/26/2009 10:30:46 PAGE 5   

 242          /********************************************************************
 243          * 名称 : time0()
 244          * 功能 : 定时中断函数,每秒中sec加一,并且写标识write使能
 245          * 输入 : del
 246          * 输出 : 无
 247          ***********************************************************************/
 248          void time0(void) interrupt 1 using 3  //定时中断服务函数
 249          {
 250   1              static uchar Count = 0; 
 251   1              TH0 = (65536 - 50000) / 256; //对TH0 TL0赋值
 252   1              TL0 = (65536 - 50000) % 256; //重装计数初值
 253   1              Count++;        //每过250ust tcnt加一
 254   1              if(Count == 20)  //计满20次(1秒)时
 255   1              { 
 256   2                      Count = 0;   //重新再计
 257   2                      sec++;
 258   2                      write = 1;  //1秒写一次24C08
 259   2                      if(sec == 100) //定时100秒,在从零开始计时
 260   2                      {
 261   3                              sec = 0;
 262   3                      } 
 263   2              } 
 264   1      }
 265          
 266          /********************************************************************
 267          * 名称 : Time0_Init()
 268          * 功能 : 定时器0的初始化
 269          * 输入 : 无
 270          * 输出 : 无
 271          ***********************************************************************/
 272          void Time0_Init(void)
 273          {
 274   1              TMOD = 0x01;                    //定时器工作在方式1
 275   1              ET0 = 1;
 276   1              EA = 1; 
 277   1              TH0 = (65536 - 50000) / 256;    //对TH0 TL0赋值
 278   1              TL0 = (65536 - 50000) % 256;    //使定时器0.05秒中断一次
 279   1              TR0 = 1;                                        //开始计时
 280   1      }
 281          
 282          /********************************************************************
 283          * 名称 : Main()
 284          * 功能 : 主函数
 285          * 输入 : 无
 286          * 输出 : 无
 287          ***********************************************************************/
 288          void Main(void) 
 289          {
 290   1              P2 = 0x00; 
 291   1              x24c02_init();          //初始化24C02
 292   1              Time0_Init();
 293   1              sec = x24c02_read(2);   //读出保存的数据赋于sec
 294   1              while(1) 
 295   1              {
 296   2                      LED();
 297   2                      if(write == 1)                          //判断计时器是否计时一秒
 298   2              {
 299   3                              write =0 ;              //清零 
 300   3                              x24c02_write(2,sec);    //在24c08的地址2中写入数据sec
 301   3                      }
 302   2              }
 303   1      }
C51 COMPILER V7.02b   EEPROM_24C02                                                         09/26/2009 10:30:46 PAGE 6   



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