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

📄 i2c.lst

📁 本程序能够实现温度测量
💻 LST
字号:
C51 COMPILER V7.06   I2C                                                                   11/18/2006 22:47:03 PAGE 1   


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

stmt level    source

   1          /*--------------------------------------------------------
   2          i2c.c file
   3          Creat by Computer-lov Date: 2005.7.19
   4          Last edit date:2005.7.19
   5          Copyright(C) 2005-2015 Computer-lov
   6          All rights reserved
   7          Welcome to my Blog: Http://computer00.21ic.org
   8          -----------------------------------------------------------*/
   9          
  10          #include "hardware.h"
  11          #include "I2C.h"
  12          
  13          #define delay()
  14          //*****************************************************************************************************
  15          //void delay(void)      //延时子程序
  16          //{
  17          // unsigned char i;
  18          // for(i=0;i<1;i++);
  19          //}
  20          //*****************************************************************************************************
  21          
  22          
  23          //**************************************   将一个字节写入I2C总线   ***************************************
             -**
  24          unsigned char Write_a_data(unsigned char device_addr,unsigned char data_addr,unsigned char w_data) 
  25          {
  26   1       unsigned char i,Device_Addr;
  27   1       delay();
  28   1       SDA=0;                          //产生一个起始位       
  29   1       delay();
  30   1       Device_Addr=device_addr;        //地址暂存
  31   1       for(i=0;i<7;i++)                //输出设备地址
  32   1        { 
  33   2         SCL=0;
  34   2         delay();
  35   2         SDA=device_addr&0x80;         //SDA上输出一位数据,高位在前
  36   2         device_addr<<=1;
  37   2         delay();
  38   2         SCL=1;
  39   2         delay();
  40   2        }
  41   1       SCL=0;
  42   1       delay();
  43   1       SDA=0;                          //SDA上输出0,表示写操作
  44   1       delay();
  45   1       SCL=1;
  46   1       delay();
  47   1       SCL=0;
  48   1       delay();
  49   1       SDA=1;                          //释放SDA线
  50   1       delay();
  51   1       SCL=1;
  52   1       delay();
  53   1       if(SDA){return 1;}               //如果设备未响应,则返回出错代码1
  54   1       for(i=0;i<8;i++)                //输出数据地址
C51 COMPILER V7.06   I2C                                                                   11/18/2006 22:47:03 PAGE 2   

  55   1        {
  56   2         SCL=0;
  57   2         delay();
  58   2         SDA=data_addr&0x80;           //SDA上输出一位数据,高位在前
  59   2         data_addr<<=1;       
  60   2         delay();
  61   2         SCL=1;
  62   2         delay();
  63   2         delay();
  64   2        }  
  65   1       SCL=0;
  66   1       delay();
  67   1       SDA=1;                          //释放SDA线
  68   1       delay();
  69   1       SCL=1;
  70   1       delay();
  71   1       if(SDA){return 2;}             //如果设备未响应,则返回出错代码2
  72   1       for(i=0;i<8;i++)                //输出要写入的数据
  73   1        {
  74   2         SCL=0;
  75   2         delay();
  76   2         SDA=w_data&0x80;               //SDA上输出一位数据,高位在前
  77   2         w_data<<=1;
  78   2         delay();
  79   2         SCL=1;
  80   2         delay();
  81   2        }  
  82   1       SCL=0;
  83   1       delay();
  84   1       SDA=1;                          //释放SDA线
  85   1       delay();
  86   1       SCL=1;
  87   1       delay();
  88   1       if(SDA){return 3;}               //如果设备未响应,则返回出错代码3
  89   1       SCL=0;
  90   1       delay();
  91   1       SDA=0;
  92   1       delay();
  93   1       SCL=1;
  94   1       delay();
  95   1       SDA=1;                         //产生一个停止位,停止操作
  96   1       return 0;                      //正确写入,返回0
  97   1      }
  98          //****************************************************************************************
  99          
 100          
 101          #define SET_POINT 0xB0   //0xB0命令表示写入地址
 102          
 103          //*********************************   从I2C总线中读取一个字节   *****************************
 104          unsigned int Read_a_data(unsigned char device_addr,unsigned char data_addr) 
 105          {
 106   1       unsigned char i,r_data;             //,Device_Addr;                          
 107   1       Write_a_data(device_addr,SET_POINT,data_addr);
 108   1       SDA=0;                         //产生一个起始位        
 109   1       delay();
 110   1       for(i=0;i<7;i++)            //输出设备地址,一个7位的地址
 111   1        { 
 112   2         SCL=0;
 113   2         delay();
 114   2         SDA=device_addr&0x80;     //SDA上输出一位数据,高位在前
 115   2         device_addr<<=1;
 116   2         delay();
C51 COMPILER V7.06   I2C                                                                   11/18/2006 22:47:03 PAGE 3   

 117   2         SCL=1;
 118   2         delay();
 119   2        }
 120   1       SCL=0;
 121   1       delay();
 122   1       SDA=1;                     //SDA上输出1,表示读操作
 123   1       delay();
 124   1       SCL=1;
 125   1       delay();
 126   1       SCL=0;
 127   1       delay();
 128   1       SDA=1;                     //释放SDA线
 129   1       delay();
 130   1       SCL=1;
 131   1       delay();
 132   1       if(SDA) return 0x0300;    //如果设备未响应,则返回出错代码0x0300
 133   1       for(i=0;i<8;i++)          //读出数据
 134   1        {
 135   2         SCL=0;
 136   2         delay();
 137   2         r_data<<=1;
 138   2         delay();
 139   2         SCL=1;
 140   2         if(SDA)r_data=r_data|0x01;   //保存一位数据
 141   2         delay();
 142   2        }  
 143   1       SCL=0;
 144   1       delay();
 145   1       SDA=1;                        //置SDA高电平,表示停止读出
 146   1       delay(); 
 147   1       SCL=1;
 148   1       delay();
 149   1       SCL=0;
 150   1       delay();
 151   1       SDA=0;
 152   1       delay();
 153   1       SCL=1;
 154   1       delay();
 155   1       SDA=1;                         //产生一个停止位,停止读操作
 156   1       return r_data;                 //返回数据
 157   1      }
 158          //****************************************************************************************


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    199    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       1
   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 + -