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

📄 iicxx.lst

📁 TSL256源程序驱动!通过其IIC口采集环境光光强
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.15   IICXX                                                                 12/25/2008 21:36:29 PAGE 1   


C51 COMPILER V8.15, COMPILATION OF MODULE IICXX
OBJECT MODULE PLACED IN .\IICxx.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\Inc\IICxx.c ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND PRINT(.\IICxx.lst) OB
                    -JECT(.\IICxx.obj)

line level    source

   1          //**********************************************************
   2          //**                     IIC驱动程序                   **
   3          //**          单片机: STC12C5410AD 主频: 24MHz          **
   4          //**              Jumping <2008.04.20>              **
   5          //**********************************************************
   6          
   7          //#include <REGx051.H>                                                          // AT89C4051头文件
   8          #include "../inc/STC12C5410AD.H"                                        // AT89C4051头文件
   9          #include <INTRINS.H>                                                            // 系统调令头文件
  10          #include "def.h"                                                                        // 类型定义文件
  11          #include "config.h"                                                                     // 配置头文件
  12          #include "IIC.h"                                                                        // 配置头文件
  13          #include "uart.h"                                                                       // 配置头文件
  14          
  15          
  16          #define SomeNOP(); {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
  17          
  18          //*****变量声明****
  19          INT CH0,CH1;     
  20          
  21          // *** 函数声明 ***
  22          void I2C_Start (void);
  23          void I2C_Stop (void);
  24          BOOL Send_Byte_I2C(BYTE tmData);
  25          BYTE Read_Byte_I2C_ACK();
  26          BYTE Read_Byte_I2C_NoACK();
  27          uchar TSL2561_read_byte( uchar addr);
  28          void InitTsl256x(void);
  29          INT GetLux(void);
  30          //BOOL Read_Data_I2C(BYTE iNum, unsigned int wAddr, BYTE tmData[64]);
  31          //BOOL Write_Data_I2C(BYTE iNum, unsigned int wAddr, BYTE tmData[64]);
  32          
  33          //***************************************************************************************
  34          unsigned int CalculateLux(unsigned int iGain, unsigned int tInt, unsigned int ch0, unsigned int ch1, int i
             -Type);
  35          
  36          //#pragma OPTIMIZE(5)
  37          
  38          /*******************************************************************************
  39          * 名    称: I2C_Start()
  40          * 功    能: 启动I2C操作
  41          * 入口参数: 无
  42          * 出口参数: 无
  43          *******************************************************************************/
  44          void I2C_Start (void)
  45          {
  46   1      
  47   1              SDA=0; 
  48   1              SCL=0; 
  49   1              SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
  50   1              SDA=1; 
  51   1              SCL=1; 
  52   1              SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
  53   1      
C51 COMPILER V8.15   IICXX                                                                 12/25/2008 21:36:29 PAGE 2   

  54   1              SDA=0; 
  55   1              SCL=0; 
  56   1              SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
  57   1              SDA=1; 
  58   1              SCL=1; 
  59   1              SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
  60   1              SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
  61   1              SDA=0; 
  62   1              SCL=0; 
  63   1              SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
  64   1              SDA=1; 
  65   1              SCL=1; 
  66   1              SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
  67   1      
  68   1              SDA=0; 
  69   1              SCL=0; 
  70   1              SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
  71   1              SDA=1; 
  72   1              SCL=1; 
  73   1              SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
  74   1              SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
  75   1      
  76   1              SDA=1; 
  77   1              SCL=0; 
  78   1              SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
  79   1      
  80   1              SDA=1; 
  81   1              SCL=1; 
  82   1              SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
  83   1      
  84   1              SDA=0; 
  85   1      
  86   1              SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
  87   1              SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
  88   1      
  89   1      }
  90          
  91          
  92          /*******************************************************************************
  93          * 名    称: I2C_Stop()
  94          * 功    能: 结束I2C操作
  95          * 入口参数: 无
  96          * 出口参数: 无
  97          *******************************************************************************/
  98          void I2C_Stop (void)
  99          {
 100   1      
 101   1              SDA=0; 
 102   1              SomeNOP(); //数据线保持低,时钟线从低到高一次跳变,I2C通信停止
 103   1              SCL=1; 
 104   1              SomeNOP(); 
 105   1              SDA=1; 
 106   1              SomeNOP(); 
 107   1      
 108   1                                                                      
 109   1      }
 110          /*******************************************************************************
 111          * 名    称: I2C_Start()
 112          * 功    能: 启动I2C操作
 113          * 入口参数: 无
 114          * 出口参数: 无
 115          *******************************************************************************/
C51 COMPILER V8.15   IICXX                                                                 12/25/2008 21:36:29 PAGE 3   

 116          void SendAck(void)
 117          {
 118   1              SDA=1; 
 119   1              SCL=0; 
 120   1              SomeNOP(); //数据线保持低,时钟线发生一次从高低的跳变 发送一个应答信号
 121   1              SCL=1; 
 122   1              SomeNOP();
 123   1      //      SCL=0;
 124   1      }
 125          /*******************************************************************************
 126          * 名    称: I2C_Start()
 127          * 功    能: 启动I2C操作
 128          * 入口参数: 无
 129          * 出口参数: 无
 130          *******************************************************************************/
 131          void SendNotAck(void)
 132          {
 133   1              SDA=1; 
 134   1              SCL=0;
 135   1              SomeNOP(); //数据线保持高,时钟线发生一次从高低的跳变 没有应答
 136   1              SCL=1; 
 137   1              SomeNOP();
 138   1      //      SCL=0;
 139   1      }
 140          /*******************************************************************************
 141          * 名    称: I2C_Start()
 142          * 功    能: 启动I2C操作
 143          * 入口参数: 无
 144          * 出口参数: 无
 145          *******************************************************************************/
 146          BOOL Send_Byte_I2C(BYTE ch)
 147          {
 148   1              unsigned char i=8;
 149   1              while (i--)
 150   1              {
 151   2                      SCL=0;
 152   2                      _nop_();
 153   2                      SDA=(bit)(ch&0x80); 
 154   2                      ch<<=1; 
 155   2                      SomeNOP(); //时钟保持低可以发送数据
 156   2                      SCL=1; 
 157   2                      SomeNOP();
 158   2              }
 159   1              SCL=0;
 160   1              
 161   1              SendNotAck();
 162   1      
 163   1              return 0;
 164   1      }
 165          
 166          
 167          /*******************************************************************************
 168          * 名    称: I2C_Start()
 169          * 功    能: 启动I2C操作
 170          * 入口参数: 无
 171          * 出口参数: 无
 172          *******************************************************************************/
 173          
 174          BYTE Read_Byte_I2C_ACK(void)
 175          {
 176   1              BYTE i,tdata;
 177   1              i=8;tdata=0;
C51 COMPILER V8.15   IICXX                                                                 12/25/2008 21:36:29 PAGE 4   

 178   1              
 179   1              SDA=1;
 180   1              _nop_();_nop_();_nop_();
 181   1              while (i--)
 182   1              {
 183   2                      tdata<<=1;
 184   2                      SCL=0;
 185   2                      SomeNOP();
 186   2                      SCL=1;
 187   2                      SomeNOP(); //时钟做一次从低到高的跳变 可以接收数据
 188   2                      tdata|=SDA;
 189   2              }
 190   1              SCL=0;
 191   1              
 192   1              SendAck();
 193   1              
 194   1              return tdata;
 195   1      
 196   1      }
 197          
 198          
 199          /*******************************************************************************
 200          * 名    称: I2C_Start()
 201          * 功    能: 启动I2C操作
 202          * 入口参数: 无
 203          * 出口参数: 无
 204          *******************************************************************************/
 205          BYTE Read_Byte_I2C_NoACK()
 206          {
 207   1              BYTE i;
 208   1              BYTE tmData = 0;
 209   1              SDA=1;
 210   1              for(i=0; i<8; i++)
 211   1              {
 212   2                      tmData *= 2;
 213   2                      SCL = 1;
 214   2      
 215   2                      if(SDA)
 216   2                              tmData |= 0x01;
 217   2                      SCL = 0;
 218   2      
 219   2                      _nop_ ();
 220   2                      _nop_ ();
 221   2                      _nop_ ();
 222   2                      _nop_ ();
 223   2                      _nop_ ();
 224   2              }
 225   1      
 226   1      /*      SCL = 0;*/
 227   1      
 228   1              return tmData;
 229   1      }

⌨️ 快捷键说明

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