24c02.lst

来自「C8051ucos源码」· LST 代码 · 共 201 行

LST
201
字号
C51 COMPILER V8.01   24C02                                                                 12/24/2006 10:57:23 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE 24C02
OBJECT MODULE PLACED IN 24c02.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE program\24c02.c BROWSE DEBUG OBJECTEXTEND PRINT(.\24c02.lst) OBJECT(24c02.o
                    -bj)

line level    source

   1          /*=======================================================================================================
   2          IIC_是面向IIC_芯片的驱动程序
   3          
   4          建立于:2005.08.01
   5          编写人:杨术轩
   6          =======================================================================================================*/
   7          //移植部分
   8          #include "C8051F020.h" 
   9          #include <intrins.h>
  10          #include "24c02.h"
  11          
  12          #define IIC_CLK_DELAY()         _nop_();_nop_();_nop_();_nop_();_nop_();
  13          
  14          #define IIC_GET_SDA             P1_7 
  15          #define IIC_SET_SDA             P1_7=1 
  16          #define IIC_CLR_SDA             P1_7=0 
  17          #define IIC_SET_SCL             P1_6=1 
  18          #define IIC_CLR_SCL             P1_6=0 
  19          
  20          //=======================================================================================================
  21          //IIC_总线的开始状态
  22          void IIC_Start(void)
  23          {
  24   1              IIC_SET_SDA;
  25   1              IIC_SET_SCL;
  26   1              IIC_CLK_DELAY();
  27   1              IIC_CLR_SDA;
  28   1              IIC_CLK_DELAY();
  29   1              IIC_CLR_SCL;
  30   1              IIC_CLK_DELAY();
  31   1      }
  32          //------------------------------------------------------------------------------------------------------
  33          //IIC_总线的停止状态
  34          void IIC_Stop(void)
  35          {
  36   1              IIC_CLR_SCL;    
  37   1              IIC_CLR_SDA;
  38   1              IIC_CLK_DELAY();
  39   1              IIC_SET_SCL;
  40   1              IIC_CLK_DELAY();
  41   1              IIC_SET_SDA;
  42   1              IIC_CLK_DELAY();
  43   1      }
  44          //------------------------------------------------------------------------------------------------------
  45          //向从器件写入一个字节 ch,同时判断ack返回
  46          //返回:ack的状态
  47          unsigned char IIC_ByteWr(unsigned char ch)
  48          {
  49   1      unsigned char i;
  50   1              for (i=0; i<8; i++)
  51   1              {
  52   2                      if(ch&0x80) 
  53   2                              IIC_SET_SDA; 
  54   2                      else  
C51 COMPILER V8.01   24C02                                                                 12/24/2006 10:57:23 PAGE 2   

  55   2                              IIC_CLR_SDA;
  56   2                      ch<<=1;
  57   2                      IIC_CLK_DELAY();  
  58   2                      IIC_SET_SCL;
  59   2                      IIC_CLK_DELAY();
  60   2                      IIC_CLR_SCL;
  61   2                      IIC_CLK_DELAY();
  62   2              }
  63   1              IIC_SET_SDA; 
  64   1              IIC_CLK_DELAY();
  65   1              IIC_SET_SCL; 
  66   1              if(IIC_GET_SDA)
  67   1                      i=1;
  68   1              else 
  69   1                      i=0;
  70   1              IIC_CLK_DELAY();
  71   1              IIC_CLR_SCL;
  72   1              return i;
  73   1      }
  74          //------------------------------------------------------------------------------------------------------
  75          //从从器件读出一个字节 
  76          //reack:是反给从器件的应答信号
  77          //返回:读入的字节
  78          unsigned char IIC_ByteRd(unsigned char reack)
  79          {
  80   1      unsigned char i,val;
  81   1      
  82   1              IIC_SET_SDA;
  83   1              for (i=0; i<8; i++)
  84   1              {
  85   2                      IIC_CLK_DELAY();
  86   2                      IIC_SET_SCL;
  87   2                      val<<=1;
  88   2                      if(IIC_GET_SDA) val|=1;
  89   2                      IIC_CLK_DELAY();
  90   2                      IIC_CLR_SCL;
  91   2              } 
  92   1      
  93   1              if (reack!=0)
  94   1                      IIC_SET_SDA;
  95   1              else 
  96   1                      IIC_CLR_SDA;
  97   1              IIC_CLK_DELAY();
  98   1              IIC_SET_SCL;
  99   1              IIC_CLK_DELAY();
 100   1              IIC_CLR_SCL;
 101   1      return val;
 102   1      }
 103          //========================================================================================================
             -===
 104          
 105          // 对24C02的读、写
 106          
 107          #define WriteDeviceAddress 0xa0
 108          #define ReadDviceAddress 0xa1
 109          
 110          /*
 111          延时子程序,延时时间单位为1毫秒,晶振使用22.1184兆赫,芯片使用mcs51兼容芯片
 112          ms_number为需要延时的毫秒数,最大为255毫秒  误差小于1 %
 113          */
 114          void Delay1msOf24c02(unsigned char ms_number)
 115          { 
C51 COMPILER V8.01   24C02                                                                 12/24/2006 10:57:23 PAGE 3   

 116   1      unsigned int  i;
 117   1      unsigned char j;
 118   1      for(j=0;j<ms_number;j++)
 119   1      for(i=0;i<229;i++);
 120   1      }
 121          
 122          //--------------------------------------------------------------------------------------------------------
             ----
 123          void Write24c02Page(unsigned char *Wdata,unsigned char RomAddress,unsigned char cnt) 
 124          {
 125   1              IIC_Start();
 126   1              IIC_ByteWr(WriteDeviceAddress);
 127   1              IIC_ByteWr(RomAddress);
 128   1              while(cnt--){
 129   2                      IIC_ByteWr(*Wdata++);
 130   2              }
 131   1              IIC_Stop();
 132   1              Delay1msOf24c02(10);
 133   1      }
 134          //--------------------------------------------------------------------------------------------------------
             ----
 135          void Write24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char Len)
 136          {
 137   1      unsigned char i,j;
 138   1      j=Len/8;
 139   1      for(i=0;i<j;i++)
 140   1              {
 141   2              Write24c02Page(RamAddress,RomAddress,8);
 142   2              RamAddress+=8;
 143   2              RomAddress+=8;
 144   2              }
 145   1      i=Len%8;
 146   1      if(i!=0){Write24c02Page(RamAddress,RomAddress,i);}        
 147   1      }
 148          //--------------------------------------------------------------------------------------------------------
             ----
 149          void Read24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char len) 
 150          {
 151   1              if(len==0)return;
 152   1              IIC_Start();
 153   1              IIC_ByteWr(WriteDeviceAddress);
 154   1              IIC_ByteWr(RomAddress);
 155   1              IIC_Start();
 156   1              IIC_ByteWr(ReadDviceAddress);
 157   1              while(len--) 
 158   1              {
 159   2                      if(len!=0) *RamAddress++ = IIC_ByteRd(0);
 160   2                      else *RamAddress++ = IIC_ByteRd(1);
 161   2              }
 162   1              IIC_Stop();
 163   1      }
 164          //========================================================================================================
             -===
 165          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    428    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      17
C51 COMPILER V8.01   24C02                                                                 12/24/2006 10:57:23 PAGE 4   

   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?