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

📄 at24c02.lst

📁 51单片机示例程序
💻 LST
字号:
C51 COMPILER V7.20   AT24C02                                                               03/15/2007 15:00:57 PAGE 1   


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

line level    source

   1          /*******************************************************************
   2                                                                                          
   3                             I2C存储器AT24C02读写实验
   4                           网址:http://www.kaifaban.com  
   5                                                    
   6                          功能:在AT24C02某一地址写入一个数据
   7                                               再读出显示在P0口
   8                                                               
   9          ********************************************************************/
  10          #include <reg52.h>
  11          #include <intrins.h>
  12          #define  uchar unsigned char
  13          #define  uint unsigned int
  14          sbit SCL=P3^4;//串行时钟线
  15          sbit SDA=P3^5;//串行数据线
  16          sbit DsySelect=P3^7;//控制LED的74HC244所在IO口
  17          //I2C延时程序
  18          void I2cDelay(){
  19   1      _nop_();_nop_();_nop_();_nop_();_nop_();
  20   1      }
  21          //I2C起始条件
  22          void I2cStart(){
  23   1      SDA=1;
  24   1      _nop_();
  25   1      SCL=1;
  26   1      I2cDelay();
  27   1      SDA=0;
  28   1      I2cDelay();
  29   1      SCL=0;//钳住I2C总线,准备发送或接收数据
  30   1      _nop_();
  31   1      }
  32          //I2C停止条件
  33          void I2cStop(){
  34   1      SDA=0;
  35   1      _nop_();
  36   1      SCL=1;
  37   1      I2cDelay();
  38   1      SDA=1;
  39   1      I2cDelay();
  40   1      }
  41          //发ACK应答
  42          void I2cAck(){
  43   1      SDA=0;
  44   1      _nop_();
  45   1      SCL=1;
  46   1      I2cDelay();
  47   1      SCL=0;
  48   1      _nop_();
  49   1      }
  50          //发NOACK应答
  51          void I2cNoAck(){
  52   1      SDA=1;
  53   1      _nop_();
  54   1      SCL=1;
  55   1      I2cDelay();
C51 COMPILER V7.20   AT24C02                                                               03/15/2007 15:00:57 PAGE 2   

  56   1      SCL=0;
  57   1      _nop_();
  58   1      }
  59          //等待应答
  60          bit WaitAck(){
  61   1        uchar Time=255;
  62   1        SDA=1;
  63   1        _nop_();
  64   1        SCL=1;
  65   1        I2cDelay();
  66   1        while(SDA){
  67   2          Time--;
  68   2          if(Time==0){
  69   3            I2cStop();
  70   3            return (0);
  71   3          }
  72   2        }
  73   1        SCL=0;
  74   1        _nop_();
  75   1        return (1);
  76   1      }
  77          //I2C写一字节数据
  78          void I2cWriteByte(uchar Data){
  79   1        uchar i;
  80   1        for(i=0;i<8;i++){
  81   2          SCL=0;
  82   2          I2cDelay();
  83   2          SDA=(bit)(Data&0x80);
  84   2          Data<<=1;
  85   2          I2cDelay();
  86   2          SCL=1;
  87   2          I2cDelay();
  88   2        }
  89   1        SCL=0;
  90   1      }
  91          //I2C读一字节数据
  92          uchar I2cReadByte(){
  93   1        uchar i,TmpData=0;
  94   1        SDA=1;
  95   1        for(i=0;i<8;i++){
  96   2        SCL=0;
  97   2        I2cDelay();
  98   2        SCL=1;
  99   2        I2cDelay();
 100   2        TmpData<<=1;
 101   2        TmpData|=SDA;
 102   2        }
 103   1        SCL=0;
 104   1        return(TmpData);
 105   1      }
 106          //I2C写数据到AT24C02
 107          void I2cWrite(uchar Address,uchar Data){
 108   1      I2cStart();//启动总线
 109   1      I2cWriteByte(0xA0);//发送器件地址
 110   1      WaitAck();
 111   1      I2cWriteByte(Address);//发送器件子地址
 112   1      WaitAck();
 113   1      I2cWriteByte(Data);//发送数据
 114   1      WaitAck();
 115   1      I2cStop();
 116   1      }
 117          //I2C从AT24C02读数据
C51 COMPILER V7.20   AT24C02                                                               03/15/2007 15:00:57 PAGE 3   

 118          uchar I2cRead(uchar Address){
 119   1      uchar TmpData;
 120   1      I2cStart();//启动总线
 121   1      I2cWriteByte(0xA0);//发送器件地址
 122   1      WaitAck();
 123   1      I2cWriteByte(Address);//发送器件子地址
 124   1      WaitAck();
 125   1      I2cStart();//启动总线
 126   1      I2cWriteByte(0xA1);//发送器件地址
 127   1      I2cAck();
 128   1      TmpData=I2cReadByte();//读取数据
 129   1      I2cNoAck();
 130   1      I2cStop();
 131   1      return(TmpData);
 132   1      }
 133          //主函数
 134          main(){
 135   1      uchar ReadData;
 136   1      DsySelect=0;//打开LED
 137   1      I2cWrite(0x00,0x12);//在地址0x00写入数据0x12
 138   1      while(1){
 139   2      ReadData=I2cRead(0x00);//读出地址为0x00的数据
 140   2      P0=~ReadData;
 141   2      }
 142   1      }


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