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

📄 eeprom_24c02.lst

📁 单片机的实用程序代码
💻 LST
字号:
C51 COMPILER V7.50   EEPROM_24C02                                                          09/19/2011 11:17:32 PAGE 1   


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

line 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          * 名称 : flash()
  23          * 功能 : 延时,时间为2个NOP,大概为2US
  24          * 输入 : 无
  25          * 输出 : 无
  26          ***********************************************************************/
  27          void flash(void) 
  28          {
  29   1              _nop_();
  30   1              _nop_();
  31   1      }
  32          
  33          /********************************************************************
  34          * 名称 : x24c02_init()
  35          * 功能 : 24c02初始化子程序
  36          * 输入 : 无
  37          * 输出 : 无
  38          ***********************************************************************/
  39          void x24c02_init(void) 
  40          {
  41   1              scl = 1;
  42   1              flash();
  43   1              sda = 1;
  44   1              flash();
  45   1      }
  46          
  47          /********************************************************************
  48          * 名称 : start(void)
  49          * 功能 : 启动I2C总线
  50          * 输入 : 无
  51          * 输出 : 无
  52          ***********************************************************************/
  53          void start(void)
  54          {
  55   1              scl = 1; 
C51 COMPILER V7.50   EEPROM_24C02                                                          09/19/2011 11:17:32 PAGE 2   

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

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

 180          {
 181   1              EA = 0;
 182   1              start();
 183   1              writex(0xa0);
 184   1              ack();
 185   1              writex(address);
 186   1              ack();
 187   1              writex(info);
 188   1              ack();
 189   1              stop();
 190   1              EA = 1;
 191   1      }
 192          
 193          /********************************************************************
 194          * 名称 : Delay_1ms()
 195          * 功能 : 延时,延时时间为 1ms * i
 196          * 输入 : i(延时1ms的个数)
 197          * 输出 : 无
 198          ***********************************************************************/
 199          void Delay_1ms(uint i)
 200          {
 201   1              uchar x, j;
 202   1              for(j=0; j<i; j++)
 203   1              for(x=0; x<=148; x++)
 204   1              ;       
 205   1      }
 206          
 207          /********************************************************************
 208          * 名称 : LED()
 209          * 功能 : 显示
 210          * 输入 : 无
 211          * 输出 : 无
 212          ***********************************************************************/
 213          void LED()                  //LED显示函数
 214          {
 215   1              P2 = 6; 
 216   1              P0 = table[sec / 10]; 
 217   1              Delay_1ms(5);
 218   1              P2 = 7;
 219   1              P0 = table[sec % 10];
 220   1              Delay_1ms(5);
 221   1      }
 222          
 223          /********************************************************************
 224          * 名称 : time0()
 225          * 功能 : 定时中断函数,每秒中sec加一,并且写标识write使能
 226          * 输入 : del
 227          * 输出 : 无
 228          ***********************************************************************/
 229          void time0(void) interrupt 1 using 3  //定时中断服务函数
 230          {
 231   1              static uchar Count = 0; 
 232   1              TH0 = 0x4c; //对TH0 TL0赋值
 233   1              TL0 = 0x00; //重装计数初值
 234   1              Count++;        
 235   1              if(Count == 20)  //计满20次(1秒)时
 236   1              { 
 237   2                      Count = 0;   //重新再计
 238   2                      sec++;
 239   2                      write = 1;   //1秒写一次24C08
 240   2                      if(sec == 100) //定时100秒,在从零开始计时
 241   2                      {
C51 COMPILER V7.50   EEPROM_24C02                                                          09/19/2011 11:17:32 PAGE 5   

 242   3                              sec = 0;
 243   3                      } 
 244   2              } 
 245   1      }
 246          
 247          /********************************************************************
 248          * 名称 : Time0_Init()
 249          * 功能 : 定时器0的初始化
 250          * 输入 : 无
 251          * 输出 : 无
 252          ***********************************************************************/
 253          void Time0_Init(void)
 254          {
 255   1              TMOD = 0x01;                    //定时器工作在方式1
 256   1              ET0 = 1;
 257   1              EA = 1; 
 258   1              TH0 = 0x4c;     //对TH0 TL0赋值
 259   1              TL0 = 0x00;     //使定时器0.05秒中断一次
 260   1              TR0 = 1;                                        //开始计时
 261   1      }
 262          
 263          /********************************************************************
 264          * 名称 : Main()
 265          * 功能 : 主函数
 266          * 输入 : 无
 267          * 输出 : 无
 268          ***********************************************************************/
 269          void Main(void) 
 270          {
 271   1              x24c02_init();          //初始化24C02
 272   1              sec = x24c02_read(2);   //读出保存的数据赋于sec 
 273   1              Time0_Init();
 274   1              while(1) 
 275   1              {
 276   2                      LED();
 277   2                      if(write == 1)                     //判断计时器是否计时一秒
 278   2              {
 279   3                              write =0;              //清零 
 280   3                              x24c02_write(2,sec);   //在24c08的地址2中写入数据sec
 281   3                      }
 282   2              }
 283   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    365    ----
   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 + -