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

📄 iic.lst

📁 I2C总线的读写 EEPROMAT2402存储器的读写编程
💻 LST
字号:
C51 COMPILER V8.02   IIC                                                                   12/10/2008 15:33:36 PAGE 1   


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

line level    source

   1          #include"reg51.h"
   2          sbit IIC_SDA=P3^7;                                                      /*IIC总线SDA引脚定义*/
   3          sbit IIC_SCL=P3^6;                                                      /*IIC总线SCL引脚定义*/
   4          #define uchar unsigned char
   5          #define uint  unsigned int
   6          #define IC24X_ORDER_WRITE 0xa0                                          /*AT24C02写指令*/
   7          #define IC24X_ORDER_READ 0xa1                                           /*AT24C02读指令*/
   8          #define IIC_TLOW 10                                                     /*IIC总线等待时间*/
   9          
  10          void IicDelay();
  11          void IicStart();
  12          void IicStop();
  13          void IicAck();
  14          void IicNAck();
  15          void IicWrite(uchar ucData);
  16          uchar IicRead();
  17          void AT24C02WriteByte(uint uiAddr,uchar ucData);
  18          uchar AT24C02ReadByte(uint uiAddr);
  19          /*****************************************************************************
  20          名称: AT24C02WriteByte()
  21          说明: AT24C02写操作
  22          参数: uint uiAddr 地址
  23                uchar ucData 数据
  24          返回: 无
  25          *****************************************************************************/
  26          void AT24C02WriteByte(uint uiAddr,uchar ucData)
  27          {
  28   1              IicStart();
  29   1              IicWrite(IC24X_ORDER_WRITE);
  30   1              IicAck();
  31   1              IicWrite(uiAddr);
  32   1              IicAck();
  33   1              IicWrite(ucData);
  34   1              IicAck();
  35   1              IicStop();
  36   1              IicDelay();     
  37   1      }
  38          
  39          /*****************************************************************************
  40          名称: AT24C02ReadByte()
  41          说明: AT24C02读操作
  42          参数: uint uiAddr 地址   
  43          返回: uchar 数据
  44          *****************************************************************************/
  45          uchar AT24C02ReadByte(uint uiAddr)
  46          {
  47   1              uchar ucData;
  48   1      
  49   1              IicStart();
  50   1              IicWrite(IC24X_ORDER_WRITE);
  51   1              IicAck();
  52   1              IicWrite(uiAddr);
  53   1              IicAck();
  54   1              IicStart();
  55   1              IicWrite(IC24X_ORDER_READ);
C51 COMPILER V8.02   IIC                                                                   12/10/2008 15:33:36 PAGE 2   

  56   1              IicAck();
  57   1              ucData=IicRead();
  58   1              IicNAck();
  59   1              IicStop();
  60   1              return ucData;
  61   1      }
  62          
  63          /****************************************************************************
  64          说明: IIC总线处理函数
  65          *****************************************************************************/
  66          void IicDelay(void)             /*内部涵数*/
  67          {
  68   1              uchar a;
  69   1              for(a=0;a<IIC_TLOW;a++);
  70   1      }
  71          
  72          void IicStart(void)             /*内部涵数*/
  73          {
  74   1              IIC_SDA=1;
  75   1              IicDelay();     
  76   1              IIC_SCL=1;
  77   1              IicDelay();     
  78   1              IIC_SDA=0;
  79   1              IicDelay();
  80   1              IIC_SCL=0;
  81   1      }
  82          
  83          void IicStop(void)              /*内部涵数*/
  84          {
  85   1              IIC_SCL=0;
  86   1              IIC_SDA=0;
  87   1              IIC_SCL=1;
  88   1              IIC_SDA=1;
  89   1      }
  90          
  91          void IicAck(void)               /*内部涵数*/
  92          {
  93   1              IIC_SDA=0;
  94   1              IIC_SCL=1;
  95   1              IicDelay();     
  96   1              IIC_SCL=0;
  97   1              IIC_SDA=1;
  98   1      }
  99          void IicNAck(void)              /*内部涵数*/
 100          {
 101   1              IIC_SDA=1;
 102   1              IIC_SCL=1;
 103   1              IicDelay();
 104   1              IIC_SDA=0;
 105   1              IIC_SCL=0;
 106   1      }
 107          
 108          void IicWrite(uchar ucData)     /*内部涵数*/
 109          {
 110   1              uchar a;
 111   1      
 112   1              for(a=0;a<8;a++)
 113   1              {
 114   2                      if(ucData&0x80)
 115   2                      {
 116   3                              IIC_SDA=1;
 117   3                      }
C51 COMPILER V8.02   IIC                                                                   12/10/2008 15:33:36 PAGE 3   

 118   2                      else
 119   2                      {
 120   3                              IIC_SDA=0;
 121   3                      }
 122   2                      IIC_SCL=1; 
 123   2                      IIC_SCL=0;
 124   2                      ucData=ucData<<1;
 125   2              }
 126   1      }
 127          
 128          uchar IicRead(void)             /*内部涵数*/
 129          {
 130   1              uchar a,ucData=0;
 131   1                               
 132   1              for(a=0;a<8;a++)
 133   1              {
 134   2                      IIC_SDA=1;
 135   2                      IIC_SCL=1;              
 136   2                      ucData<<=1;
 137   2                      if(IIC_SDA==1)
 138   2                      {
 139   3                              ucData|=0x01;
 140   3                      }
 141   2                      else
 142   2                      {
 143   3                              ucData&=0xfe;
 144   3                      }                        
 145   2                      IIC_SCL=0; 
 146   2              }
 147   1              return ucData;
 148   1      }
 149          /*********************************************************************/
 150          void delay(uchar j)                     /*延时*/
 151          {
 152   1              uchar  k,l;
 153   1              for(l=0;l<=j;l++)
 154   1              for(k=0;k<=250;k++);
 155   1      }
 156          /*********************************************************************/
 157          void main(void)
 158          {
 159   1              //uchar i;
 160   1      
 161   1                      IIC_SDA=1;
 162   1                      IIC_SCL=1; 
 163   1                                                                                                                                                               /*IIC时钟引脚至0*/
 164   1              AT24C02WriteByte(22,0x99);
 165   1              delay(80);  
 166   1                      /*将dsp数组的数据写入24c02*/
 167   1              while(1)
 168   1                         {
 169   2                              P0=AT24C02ReadByte(22);
 170   2                              delay(80);      /*读出24c02中的数据并送P0口显示*/
 171   2                      }
 172   1              
 173   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    253    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
C51 COMPILER V8.02   IIC                                                                   12/10/2008 15:33:36 PAGE 4   

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