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

📄 i2c.lst

📁 基于i2c总线控制的24c32C程序读写
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   I2C                                                                   04/18/2008 11:57:43 PAGE 1   


C51 COMPILER V8.02, 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          #define BYTE unsigned char   //宏定义
   4          #define WORD int  
   5          #define _Nop()  _nop_()      //定义空指令
   6          /*常量、变量定义区*/
   7          /*端口位定义区*/
   8          sibt   SCL=P3^0;             //模拟I2C时钟控制位
*** ERROR C129 IN LINE 8 OF I2C.C: missing ';' before 'SCL'
   9          sibt   SDA=P3^1;             //模拟I2C数据传送位
  10          /*状态标志*/
  11          bit  ack;
  12          /**************************************************
  13          启动总线函数
  14          函数原形:
  15          void   start_I2C();
  16          功能:
  17          启动I2C总线,即发送I2C起始条件
  18          参数:无
  19          返回值:无
  20          *****************************************************/
  21          void  start_I2C()
  22          {   SDA=1;                      //发送起始条件的数据信号\
*** WARNING C329 IN LINE 22 OF i2c.c: single-line comment contains line-continuation
  23              _Nop();
  24              SCL=1;
  25              _Nop();                     //起始条件建立时间大于4uS
  26              _Nop();
  27              _Nop();
  28              _Nop();
  29              _Nop();
  30              SDA=0;                      //发送起始信号
  31              _Nop();                     //起始条件锁定时间大于4us
  32              _Nop(); 
  33              _Nop();
  34              _Nop();
  35              _Nop();
  36              SCL=0;                      //准备发送或接受数据
  37              _Nop();
  38              _Nop();
  39          }
  40          /**************************************************
  41          结束总线函数
  42          函数原形:
  43          void   stop_I2C();
  44          功能:
  45          结束I2C总线,即发送I2C结束条件
  46          参数:无
  47          返回值:无
  48          *****************************************************/
  49          void  stop_I2C()
  50          {   SDA=0;                      //发送结束条件的数据信号
  51              _Nop();
  52              SCL=1;                      //发送结束条件的时钟信号
  53              _Nop();                     //结束条件建立时间大于4uS
C51 COMPILER V8.02   I2C                                                                   04/18/2008 11:57:43 PAGE 2   

  54              _Nop();
  55              _Nop();
  56              _Nop();
  57              _Nop();
  58              SDA=1;                      //发送结束信号
  59              _Nop();                     //结束条件锁定时间大于4us
  60              _Nop(); 
  61              _Nop();
  62              _Nop();
  63          }
  64          /*******************************************************
  65          字节数据传送函数
  66          函数原形:
  67          void  sendbyte(BYTE data);
  68          功能:
  69          发送数据,可以是地址,发送后等待回应,并对此状态位进行操作.
  70          应答或非应答都使ack=0,发送正常,ack=1;
  71           ack=0,表示接收器无应答或损坏
  72          参数:
  73          data:需要发送的数据
  74          返回值:无
  75          ********************************************************/
  76          void sendbyte(BYTE data)
  77          {
  78            BYTE  bitcount;
  79            for(bitcount=0;bitcount<8;bitcount++)    //要传送的数据长度为8位
  80             {
  81               if((data<<bitcount)&0x80)             //判断发送位
  82                SDA=1;
  83               else 
  84                    SDA=0;
  85                _Nop();
  86                 SCL=1;                              //置时钟线为高,通知被控器开始接收数据位
  87                _Nop();                              //保证时钟高电平周期大于4um
  88                _Nop();
  89                _Nop();
  90                _Nop();
  91                _Nop();
  92                    SCL=0;
  93             }
  94                _Nop();
  95                _Nop();
  96                 SDA=1;                               //8位发送后释放数据线,准备接收应答位
  97                _Nop();
  98                _Nop();
  99                SCL=1;
 100                _Nop();
 101                _Nop();
 102                _Nop();
 103                    if(SDA==1)
 104                      ack=0;
 105                    else  ack=1;        、                 //判断是否接收到应答信号
 106                    SCL=0;
 107                _Nop();
 108                _Nop();
 109          }
 110            /*******************************************************
 111          字节数据接收函数
 112          函数原形:
 113          BYTE  recbyte();
 114          功能:用来接收从器件传来的数据,并判断总线错误(不发生应答信号),发送后请用应答函数
 115          参数:无
C51 COMPILER V8.02   I2C                                                                   04/18/2008 11:57:43 PAGE 3   

 116          返回值:读到的数据
 117          ********************************************************/
 118          BYTE  recbyte()
 119          { BYTE recdata;
 120            BYTE bitcount;
 121            recdata=0;
 122            SDA=1;                                 //置数据线为输入方式
 123            for(bitcount=0;bitcount<8;bitcount++)
 124              { _Nop();
 125                    _Nop();                                               
 126                SCL=0;                            、//置时钟线为低,准备接收数据位
 127                _Nop();                              //保证时钟低电平周期大于4um
 128                _Nop();
 129                _Nop();
 130                _Nop();
 131                _Nop();
 132                 SCL=1;                               //置时钟为高使数据线上数据有效
 133                _Nop();
 134                _Nop();
 135                _Nop();
 136                recdata=recdata<<1;
 137                if(SDA=1)
 138                  recdata=recdata+1;                 //读数据位,接收的数据位放入recdata中
 139                _Nop();
 140                _Nop();
 141                _Nop();
 142               }
 143                   SCL=0;
 144                   _Nop();
 145               _Nop();
 146               _Nop();
 147                   return(recdata);
 148                           、、
 149          } 
 150           /*******************************************************
 151          应答子函数
 152          函数原形:void ack_i2c(bit a);
 153          功能:主控器进行应答信号,可以是应答或非应答信号。
 154          参数:a应答信号
 155          返回值:无
 156          ********************************************************/
 157          void ack_i2c(bit a)
 158          { if(a==0)

⌨️ 快捷键说明

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