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

📄 iic.lst

📁 PCF8563的驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   IIC                                                                   12/01/2007 19:19:59 PAGE 1   


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

line level    source

   1          /******************************************************************************/
   2          /**
   3          /** 模 块 名: -------------------IIC.C--------------------------------------
   4          /**            -----------------PCF8583实时时钟模块-------------------------*/
   5          /** 功能描述: 
   6          /**
   7          /** 创 建 人: huangtiexiong    日期:2006-11-28   */
   8          /** 修 改 人:                  日期:2006-11-28   */ 
   9          /** 其他说明: 
  10          /******************************************************************************/
  11          
  12          #include "Includes.h"                   //文件包含
  13          
  14          /*************************************************
  15              模块级变量申明                 
  16          *************************************************/
  17          
  18          //…………模块级变量申明在这
  19          static void     IIC_Start(void);
  20          static void     IIC_Stop(void);
  21          static void     IIC_TxByte(int8u tx_byte);
  22          static int8u    IIC_RxByte(void);
  23          static bool     IIC_WaitAck(void);
  24          static void     IIC_SendAck(void);
  25          static void     IIC_SendNoAck(void);
  26          
  27          /*************************************************
  28              子函数定义                  
  29          *************************************************/
  30          
  31          /*******************************************************************************
  32          *** 函 数 名: static void IIC_Start(void)
  33          *** 功能描述: 
  34          *** 全局变量: NO !
  35          *** 输          入: NO !
  36          *** 输          出: NO !
  37          *** 创 建 人:huangtiexiong                       日期:2006-11-28
  38          *** 修 改 人:                                                                          日期:2006-11-28
  39          *** 函数说明: Start IIC.
  40          /******************************************************************************/
  41          static void IIC_Start(void)
  42          {
  43   1              EA = 0;                 //关中断;
  44   1              SDA = 1;                //初始化总线;
  45   1              SCL = 1;                
  46   1              NOP();
  47   1              SDA = 0;                //启动总线;
  48   1              NOP();
  49   1              SCL = 0;                //准备数据发送,启动IIC之后传输线全部置0;
  50   1              }
  51          /*******************************************************************************
  52          *** 函 数 名: static void       IIC_TxByte(int8u tx_byte)
  53          *** 功能描述: 发送一个字节;
  54          *** 全局变量: NO !
  55          *** 输          入: tx_byte
C51 COMPILER V7.50   IIC                                                                   12/01/2007 19:19:59 PAGE 2   

  56          *** 输          出: NO !
  57          *** 创 建 人:huangtiexiong                       日期:2006-11-28
  58          *** 修 改 人:                                                                          日期:2006-11-28
  59          *** 函数说明: 操作完成后保证SCL为0;
  60          /******************************************************************************/
  61          static void     IIC_TxByte(int8u tx_byte)
  62          {//SDA:0; SCL:0.
  63   1              int8u i;
  64   1              for(i=0;i<8;i++)
  65   1              {
  66   2                      if(tx_byte & 0x80)
  67   2                              SDA = 1;                                        //因为Start函数中以把SCL拉低,数据直接发送;
  68   2                      else 
  69   2                              SDA = 0;
  70   2                      tx_byte <<= 1;                  //因为发送顺序:由Msb——>Lsb;
  71   2                      SCL = 1;                
  72   2                      NOP();          //延时;
  73   2                      SCL = 0;                
  74   2                      }
  75   1              }
  76          /*******************************************************************************
  77          *** 函 数 名: static bool       IIC_WaitAck(void)
  78          *** 功能描述: 发送一个字节;
  79          *** 全局变量: NO !
  80          *** 输          入: tx_byte
  81          *** 输          出: NO !
  82          *** 创 建 人:huangtiexiong                       日期:2006-11-28
  83          *** 修 改 人:                                                                          日期:2006-11-28
  84          *** 函数说明: 操作完成后保证SCL为0;
  85          /******************************************************************************/
  86          static bool     IIC_WaitAck(void)
  87          {//SDA:U; SCL:0.
  88   1              int8u waitTime = 0xff;          //设置Ack信号超时数;
  89   1              SDA = 1;                //将数据线拉高;
  90   1              SCL = 1;                //启动Ack脉冲;
  91   1              NOP();
  92   1              while(SDA)
  93   1              {
  94   2                      waitTime--;
  95   2                      if(!waitTime)
  96   2                              {
  97   3                                      SCL = 0;                //SCL=0;
  98   3                                      IIC_Stop();
  99   3                                      return FALSE;
 100   3                                      }
 101   2                      }
 102   1              SCL = 0;                //操作完成后确认SCL为0,此时SDA=0;
 103   1              return TRUE;    
 104   1              }
 105          /*******************************************************************************
 106          *** 函 数 名: static int8u      IIC_RxByte(void)
 107          *** 功能描述: 接收一个字节;
 108          *** 全局变量: NO !
 109          *** 输          入: NO !
 110          *** 输          出: 接收字节:tmp
 111          *** 创 建 人:huangtiexiong                       日期:2006-11-28
 112          *** 修 改 人:                                                                          日期:2006-11-28
 113          *** 函数说明: 操作完成后保证SCL为0;
 114          /******************************************************************************/
 115          static int8u    IIC_RxByte(void)
 116          {//SDA:0; SCL:0;
 117   1              int8u tmp = 0;
C51 COMPILER V7.50   IIC                                                                   12/01/2007 19:19:59 PAGE 3   

 118   1              int8u i;
 119   1              for(i=0;i<8;i++)
 120   1              {
 121   2                      SCL = 0;
 122   2                      SDA = 1;                //向I/O口写1后准备读入;
 123   2                      NOP();
 124   2                      SCL = 1;
 125   2                      NOP();
 126   2                      tmp <<= 1;
 127   2                      if(SDA)
 128   2                              {
 129   3                                      tmp |= 0x01;
 130   3                                      }
 131   2                      }
 132   1              SCL = 0;                //SCL=0;
 133   1              return tmp;     
 134   1              }
 135          /*******************************************************************************
 136          *** 函 数 名: static void       IIC_SendAck(void)
 137          *** 功能描述: 发送应答信号;
 138          *** 全局变量: NO !
 139          *** 输          入: NO !
 140          *** 输          出: NO !
 141          *** 创 建 人:huangtiexiong                       日期:2006-11-28
 142          *** 修 改 人:                                                                          日期:2006-11-28
 143          *** 函数说明: 操作完成后保证SCL为0;
 144          /******************************************************************************/
 145          static void     IIC_SendAck(void)
 146          {

⌨️ 快捷键说明

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