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

📄 i2c.lst

📁 51单片机开始的24064点陈显示屏驱动程序
💻 LST
字号:
C51 COMPILER V7.50   I2C                                                                   05/17/2006 14:04:54 PAGE 1   


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

line level    source

   1          #include <reg52.h>
   2          #include <intrins.h>
   3          #include "i2c.h"
   4           
   5           
   6           bit  SCL,SDA ;                    //用于切换两个I2C存储器
   7           #define HIGH  1
   8           #define LOW   0
   9           #define FALSE 0
  10           #define TRUE  1
  11           
  12          /*********************************
  13          
  14          *  功  能:
  15          *  播入5个NOP指令,用于延时
  16          
  17          **********************************/
  18          void delay_5us(void)
  19          {
  20   1        _nop_();
  21   1        _nop_();
  22   1        _nop_();
  23   1        _nop_();
  24   1        _nop_();
  25   1        _nop_();
  26   1      }
  27          
  28          /**********************************
  29          
  30          *  功  能:
  31          *  提供I2C总线工作时序中的起始位
  32          *  SCL 为高时 SDA 由高变低时为启动信号
  33          
  34          **********************************/
  35          void  i_start()     
  36          {
  37   1        SCL = HIGH;
  38   1        SDA = HIGH;
  39   1        delay_5us();
  40   1        SDA = LOW ;
  41   1        delay_5us();
  42   1        SCL = LOW  ;
  43   1        delay_5us();
  44   1      }
  45          
  46          /**********************************
  47          
  48          *  功  能:
  49          *  提供I2C总线工作时序中的停止位
  50          *  SCL 为高时 SDA 由低变高停止信号
  51          
  52          **********************************/
  53          void  i_stop()     
  54          {
  55   1        SCL = HIGH;
C51 COMPILER V7.50   I2C                                                                   05/17/2006 14:04:54 PAGE 2   

  56   1        SDA = LOW;
  57   1        delay_5us();
  58   1        SDA = HIGH;
  59   1        delay_5us();
  60   1        SCL = LOW;
  61   1        delay_5us();
  62   1      }
  63          
  64          /*************************************
  65          
  66          *  功  能:
  67          *  提供I2C总线初始化
  68          
  69          ***************************************/
  70          void  i_init()     
  71          {
  72   1        SCL = LOW;
  73   1        i_stop();
  74   1      }
  75          
  76          /***************************************
  77          
  78          *  功  能:
  79          *  提供I2C总线的时钟信号,并返回在时钟
  80          *  电平为高期间SDA信号线上状态。
  81          *  本函数可用于数据发送,也可用于数据接收
  82          
  83          *****************************************/
  84          bit  i_clock()     
  85            {
  86   1          SCL = HIGH;
  87   1          delay_5us();
  88   1          if(SDA)
  89   1           {
  90   2            SCL = LOW;
  91   2            delay_5us();
  92   2            return(1);
  93   2           }
  94   1          SCL = LOW;
  95   1          delay_5us();
  96   1          return (0);
  97   1        }
  98          /**********************************
  99          
 100          *  功  能:
 101          *  向I2C总线发送8位数据,并请求一个应答信号ACK,
 102          *  如果接到ACK应答则返回TURE,否则返回FALSE
 103          
 104          **********************************/
 105          bit  i_send( uchar i_data )     
 106            {
 107   1          uchar i;
 108   1          for( i = 0; i<8; i++ )
 109   1           {
 110   2            SDA = (bit)(i_data&0x80);
 111   2            i_data <<= 1 ;
 112   2            i_clock();
 113   2           }
 114   1          SDA = HIGH;
 115   1          return ( ~i_clock() );
 116   1        }
 117          
C51 COMPILER V7.50   I2C                                                                   05/17/2006 14:04:54 PAGE 3   

 118          /**********************************
 119          
 120          *  功  能:
 121          *  从I2C总线接收8位数据,并将接收到的数据做为1B返回
 122          *  不回送应答信号ACK。主函数在调用本函数前应保证SDA
 123          *  信号线处于浮置状态,高电平
 124          
 125          **********************************/
 126            uchar i_receive(void)
 127             {
 128   1           uchar i,i_data = 0;
 129   1           for( i = 0; i<8; i++ )
 130   1             {
 131   2               i_data <<=1;
 132   2               if( i_clock() )
 133   2                 {
 134   3                   i_data++;
 135   3                 }
 136   2             }
 137   1          return ( i_data );
 138   1      }
 139          
 140          /**********************************
 141          
 142          *  功  能:
 143          *  向I2C总线发送一个应答信号ACK,
 144          *  一般用于连续读取时
 145          
 146          **********************************/
 147          void i_ack()
 148          {
 149   1        SDA = LOW;
 150   1        i_clock();
 151   1        SDA = HIGH;
 152   1      }
 153          
 154          /*****************************************
 155          
 156          *功能:向24C04写入器件地址和一个指定的字节
 157          
 158          ******************************************/
 159          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    118    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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