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

📄 i2c.lst

📁 单片机
💻 LST
字号:
C51 COMPILER V7.06   I2C                                                                   03/04/2008 10:55:54 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN I2C.OBJ
COMPILER INVOKED BY: D:\Program Files\keil c\C51\BIN\C51.EXE I2C.c BROWSE DEBUG OBJECTEXTEND SRC(.\I2C.SRC)

stmt level    source

   1          #include <reg52.h>
   2          #include "lyj.h"
   3          #include "I2C.h"
   4          
   5          #ifdef I2C_SUPPORT
   6          #define t_lp_n 2                //I2C 读写单步延时
   7                                          //22.1184MHZ时,12机械周期情况下,t_lp_n  =2可用
   8          #define I2C_WRITE_DELAY 250     //I2C 写完需要一个10ms的延时;应根据晶体的震荡频率适当调节
   9                                          //22.1184MHZ时,12机械周期情况下,I2C_WRITE_DELAY =250可用
  10          sbit I2C_SCL = P1^0;
  11          sbit I2C_SDA = P1^1;
  12          //sbit I2C_WP  = P3^5;
  13          
  14          void t_lp(UINT i)
  15          {
  16   1              UINT j;
  17   1              for(j = 0 ; j< i ; j++);
  18   1      }
  19          //I2C START 过程
  20          void I2C_START()
  21          {
  22   1              I2C_SCL = 0;
  23   1              t_lp(t_lp_n);
  24   1              I2C_SDA = 1;
  25   1              t_lp(t_lp_n);
  26   1              I2C_SCL = 1;
  27   1              t_lp(t_lp_n);
  28   1              I2C_SDA = 0;
  29   1              t_lp(t_lp_n);
  30   1              I2C_SCL = 0;  
  31   1              t_lp(t_lp_n);
  32   1      }
  33          //I2C stop 过程
  34          void I2C_STOP()
  35          {
  36   1              I2C_SCL = 0;
  37   1              t_lp(t_lp_n);
  38   1              I2C_SDA = 0;
  39   1              t_lp(t_lp_n);
  40   1              I2C_SCL = 1;
  41   1              t_lp(t_lp_n);
  42   1              I2C_SDA = 1;
  43   1              t_lp(t_lp_n);
  44   1      }
  45          
  46          void I2C_CK()
  47          {
  48   1              I2C_SCL = 0;
  49   1              t_lp(t_lp_n);
  50   1              I2C_SCL = 1;
  51   1              t_lp(t_lp_n);
  52   1              I2C_SCL = 0; 
  53   1              t_lp(t_lp_n);
  54   1      }
  55           
C51 COMPILER V7.06   I2C                                                                   03/04/2008 10:55:54 PAGE 2   

  56          bit I2C_OUT(UCHAR i2c_sda_out)
  57          { 
  58   1              UCHAR i; 
  59   1              bit j;   
  60   1              for(i=0;i<8;i++)
  61   1              {           
  62   2                      I2C_SDA = (i2c_sda_out << i)&0x80;
  63   2                      I2C_CK();
  64   2              }  
  65   1              I2C_SCL = 0;
  66   1              t_lp(t_lp_n);
  67   1              I2C_SCL = 1;
  68   1              t_lp(t_lp_n);
  69   1              j = I2C_SDA;
  70   1              I2C_SCL = 0;
  71   1              t_lp(t_lp_n);
  72   1              return j;  
  73   1      }
  74          
  75          UCHAR I2C_IN()
  76          { 
  77   1              UCHAR i; 
  78   1              UCHAR j;   
  79   1              for(i=0;i<8;i++)
  80   1              {
  81   2                      I2C_SCL = 0;
  82   2                      t_lp(t_lp_n);
  83   2                      I2C_SCL = 1;
  84   2                      t_lp(t_lp_n); 
  85   2                      
  86   2                      if (I2C_SDA == 1) 
  87   2                              j = (j<<1) | 0x01;
  88   2                      else
  89   2                              j = j<<1 ;
  90   2              
  91   2                      I2C_SCL = 0;
  92   2                      t_lp(t_lp_n); 
  93   2              }
  94   1              I2C_SDA = 1;
  95   1              I2C_SCL = 0;
  96   1              t_lp(t_lp_n);
  97   1              I2C_SDA = 1;
  98   1              t_lp(t_lp_n);
  99   1              I2C_SCL = 1;
 100   1              t_lp(t_lp_n);
 101   1              I2C_SCL = 0;
 102   1              t_lp(t_lp_n);
 103   1              I2C_SDA = 0;
 104   1              t_lp(t_lp_n);
 105   1              I2C_STOP();
 106   1              return j;  
 107   1      }
 108          
 109          
 110          //I2C字节写函数,device_address器件级联地址,本硬件没有级联;word_address要写得字节的存储地址;I2C_DATA要

⌨️ 快捷键说明

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