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

📄 iic.lst

📁 基于51系列单片机的介绍IIC的原理与应用的软件设计
💻 LST
字号:
C51 COMPILER V7.06   IIC                                                                   12/24/2007 12:35:57 PAGE 1   


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

stmt level    source

   1          #include <reg52.H>
   2          #include <intrins.h>
   3          
   4          sbit SCL        =       P1^6;           /*IIC时钟线*/
   5          sbit SDA        =       P1^7;           /*IIC数据线*/
   6          
   7          static  unsigned char Mode;
   8          /*----------------------------全局符号定义----------------------------*/
   9          #define SomeNop(); _nop_(); _nop_();  _nop_();  _nop_();  _nop_(); 
  10          
  11          /******************************************************************
  12                  I2CStart:发动IIC总线起始信号
  13          ******************************************************************/
  14          void    I2CStart        (void)
  15                  {
  16   1                      SomeNop();
  17   1      
  18   1                      SCL     =       1;
  19   1                      SomeNop();
  20   1      
  21   1                      SDA     =       0;
  22   1                      SomeNop();
  23   1                      SCL     =       0;
  24   1                      SomeNop();
  25   1              }
  26          /*****************************************************************
  27                  I2CStop:发出IIC总线结束信号
  28          *****************************************************************/
  29          void    I2CStop(void)
  30                  {
  31   1                      SDA     =       0;
  32   1                      SomeNop();
  33   1                      SCL     =       1;
  34   1                      SomeNop();
  35   1      
  36   1                      SDA     =       1;
  37   1                      SomeNop();
  38   1                      SCL     =       0;
  39   1              }
  40          /***************************************************************
  41                  I2CInit:I2C总线初始化程序
  42          ***************************************************************/
  43          void    I2CInit (void)
  44                  {
  45   1                      SCL=0;
  46   1                      SomeNop();
  47   1                      I2CStop();
  48   1              }
  49          /**************************************************************
  50                  I2Cclock:       发送总线时钟信号,并返回时钟电平为高期间SDA上的状态,
  51                                          可用于发送,也可用于接收。
  52          ***************************************************************/                                                        
  53          bit     I2CClock (void)
  54                  {
  55   1              bit     sample;
C51 COMPILER V7.06   IIC                                                                   12/24/2007 12:35:57 PAGE 2   

  56   1                      SomeNop();
  57   1                      SCL     =       1;
  58   1                      _nop_();        _nop_();        _nop_();
  59   1                      sample  =       SDA;
  60   1                      _nop_();        _nop_();        
  61   1                      SCL     =       0;
  62   1                      SomeNop();
  63   1                      return(sample);
  64   1              }
  65          /************************************************************
  66                  I2CSendByte:    向I2C总线发送一个字节,并请求应答,若收到应答
  67                                                  则返回1,否则返回0
  68          **************************************************************/
  69          bit     I2CSendByte     (char   I2CData)        
  70                  {
  71   1                      register        unsigned        char    i;
  72   1                      for     (i=0; i<8; i++){
  73   2                              SDA     =       (bit)   (I2CData&0x80);
  74   2                              I2CData <<=     1;
  75   2                              I2CClock();
  76   2                      }
  77   1                      SDA     =       1;
  78   1                      return(~I2CClock());
  79   1              }
  80          /************************************************************
  81                  I2CReceiveByte: 从总线接收1 个字节,并返回该字节,不回送
  82                                                  该字节,不回送应答信号,主函数调用本函数
  83                                                  应保证SDA为1
  84          ************************************************************/
  85          char    I2CReceiveByte (void)
  86                  {
  87   1                      unsigned        char    I2CData =       0;
  88   1                      register        unsigned        char    i;
  89   1                      for     (i=0; i<8; i++)
  90   1                              {
  91   2                                      I2CData <<=     1;
  92   2                                      if      (I2CClock())
  93   2                                              I2CData++;
  94   2                              }
  95   1                              return(I2CData);
  96   1              }
  97          /************************************************************
  98                  I2CSendAck:     向I2C总线发送应答信号ACK
  99          ************************************************************/
 100          void    I2CSendAck(void)
 101                          {
 102   1                              SDA=0;
 103   1                              I2CClock();
 104   1                              SDA     =       1;
 105   1                      }
 106          /***********************************************************
 107                  I2CSendNotAck:  发送非应答信号到I2C总线
 108          **********************************************************/
 109          void    I2CSendNotAck   (void)
 110                  {
 111   1                      SDA     =       1;
 112   1                      I2CClock();
 113   1              }
 114          /*********************************************************
 115                  WRBYTES:        读写RAM单元
 116                                  参数:
 117                                                  Ramaddr: 指定的RAM单元地址
C51 COMPILER V7.06   IIC                                                                   12/24/2007 12:35:57 PAGE 3   

 118                                                  buf:     读写数据缓存区首地址
 119                                                  num:     从addr开始读写的数据字节个数
 120                                                  wr:      读写标志,1为主机读,0为主机写
 121          **********************************************************/
 122          void    WRBYTES(unsigned masteraddr,unsigned char Ramaddr,unsigned char buf[],unsigned char num,bit wr)
 123                  {
 124   1                      unsigned char index;
 125   1                      EA = 0;
 126   1                      I2CInit();
 127   1                      I2CStart();
 128   1                      I2CSendByte(masteraddr);
 129   1                      I2CSendByte(Ramaddr);
 130   1                      if (wr==0)
 131   1                      {
 132   2                              for(index=0; index<num; index++)
 133   2                              {       
 134   3                                      I2CSendByte(buf[index]);
 135   3                              }
 136   2                      }
 137   1                      else if (wr==1)
 138   1                      {
 139   2                              I2CStart();
 140   2                              I2CSendByte(masteraddr|0x01);
 141   2                              for (index=0; index<num-1; index++)
 142   2                              {       
 143   3                                      SDA     =       1;
 144   3                                      buf[index] = I2CReceiveByte();
 145   3                                      I2CSendAck      ();
 146   3                              }
 147   2                              buf[index] = I2CReceiveByte();
 148   2                              I2CSendNotAck();
 149   2                      }
 150   1                      I2CStop();
 151   1                      EA = 1;
 152   1      }
 153          
 154          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    280    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1       7
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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