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

📄 24c04.lst

📁 i2c总线的程序设计
💻 LST
字号:
C51 COMPILER V8.02   24C04                                                                 10/16/2006 21:22:15 PAGE 1   


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

line level    source

   1          #include <reg51.h>
   2          #include <intrins.h>
   3          #include "at24c04.h"
   4          #include "i2c.h"
   5          
   6          
   7          
   8          
   9          void delay10ms(void)
  10          {
  11   1              uint i;
  12   1              for(i=0;i<200;i++);
  13   1      }
  14          
  15          //启动信号
  16          void start(void)
  17          {
  18   1              AT24C04_SCL=0;
  19   1              nop();
  20   1              AT24C04_SDA=1;
  21   1              nop();
  22   1              AT24C04_SCL=1;
  23   1              nop();
  24   1              AT24C04_SDA=0;
  25   1              nop();
  26   1              
  27   1      }
  28          //停止信号
  29          void stop(void)
  30          {       AT24C04_SCL=0;
  31   1              nop();
  32   1              AT24C04_SDA=0;
  33   1              AT24C04_SCL=1;
  34   1              nop();
  35   1              AT24C04_SDA=1;
  36   1              nop();
  37   1      }
  38          //发应答信号
  39          void ack(void)
  40          {
  41   1              AT24C04_SCL=0;
  42   1              AT24C04_SDA=0;
  43   1              AT24C04_SCL=1;
  44   1              nop();
  45   1              
  46   1      }
  47          //发非应答信号
  48          void no_ack(void)
  49          {
  50   1              AT24C04_SCL=0;
  51   1              AT24C04_SDA=1;
  52   1              AT24C04_SCL=1;
  53   1              nop();
  54   1      }
  55          //写字节
C51 COMPILER V8.02   24C04                                                                 10/16/2006 21:22:15 PAGE 2   

  56          bit write8bit(uchar input)
  57          {
  58   1              uchar i;
  59   1              for(i=0;i<8;i++)
  60   1              {
  61   2                      AT24C04_SCL=0;
  62   2                      input=input<<1;
  63   2                      AT24C04_SDA=CY;
  64   2                      nop();
  65   2                      nop();
  66   2                      AT24C04_SCL=1;
  67   2                      nop();
  68   2              }
  69   1              AT24C04_SCL=0;
  70   1              nop();
  71   1              AT24C04_SDA=1;
  72   1              AT24C04_SCL=1;
  73   1              nop();
  74   1              CY=AT24C04_SDA;
  75   1              return(CY);
  76   1      }
  77          //读字节
  78          uchar read8bit(void)
  79          {
  80   1              uchar i,readdata;
  81   1              for(i=0;i<8;i++)
  82   1              {
  83   2                      AT24C04_SCL=0;
  84   2                      nop();
  85   2      
  86   2                      readdata=(readdata<<1)|AT24C04_SDA;
  87   2                      AT24C04_SCL=1;
  88   2              }
  89   1              return readdata;
  90   1      }
  91          //功能:从EEPROM中给定一个地址连续读NLEN个字节数据存放在以指针
  92          //nContent开头的往下内容。
  93          void readflash(uchar *content,uchar address,uchar len)  //顺序读
  94          {
  95   1              uchar i;
  96   1              start();                                                        //以随机读开始,提供开始地址
  97   1              write8bit(WriteDeviceAddress);
  98   1              write8bit(address);
  99   1              
 100   1              start();
 101   1              write8bit(ReadDeviceAddress);
 102   1              for(i=0;i<len;i++)
 103   1              {
 104   2                      *content=read8bit();
 105   2                      content++;
 106   2                      ack();  
 107   2              }
 108   1              no_ack();
 109   1              stop();
 110   1      }
 111          
 112          uchar readflash_byte()
 113          {
 114   1               uchar readdata;
 115   1               start();
 116   1               write8bit(ReadDeviceAddress);
 117   1               readdata=read8bit();
C51 COMPILER V8.02   24C04                                                                 10/16/2006 21:22:15 PAGE 3   

 118   1               ack();
 119   1               stop();
 120   1               return readdata;
 121   1              }
 122          //
 123          bit Init_Flash ( unsigned int nPage ) //    8 Byte/1Page init 0xFF 
 124          {
 125   1              unsigned char nLen;
 126   1              unsigned char Addr;
 127   1              nLen=16;
 128   1          Addr=16 *nPage;
 129   1              start();;
 130   1          write8bit(WriteDeviceAddress);
 131   1              write8bit(Addr);
 132   1              for(;nLen!=0;nLen--)
 133   1          {
 134   2                     if(write8bit(0xff)) break;  //if Write8Bit() Return 1 Write Flase
 135   2              }
 136   1              stop();
 137   1              delay10ms();
 138   1          return(CY);
 139   1      }                                                                                                                                               
 140          //功能:向EEPROM
 141          
 142          void writeflash(uchar *content,uchar address,uchar len)
 143          {
 144   1              uchar i;
 145   1      
 146   1              start();
 147   1              write8bit(WriteDeviceAddress);
 148   1              write8bit(address);
 149   1              for(i=0;i<len;i++)
 150   1              {
 151   2                      if(address%16==0)//该写下一页了
 152   2                      {
 153   3                              stop();
 154   3                              delay10ms();
 155   3                              start();
 156   3                              write8bit(WriteDeviceAddress);
 157   3                              write8bit(address);
 158   3                      }
 159   2      
 160   2                      write8bit(*content);  
 161   2                      
 162   2                      content++;
 163   2                      address++;
 164   2              }
 165   1              stop();
 166   1              delay10ms();
 167   1      }
 168          
 169          
 170          
 171          
 172          
 173          
 174                                  


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    270    ----
   CONSTANT SIZE    =   ----    ----
C51 COMPILER V8.02   24C04                                                                 10/16/2006 21:22:15 PAGE 4   

   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      10
   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 + -