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

📄 iic.lst

📁 用户可以在远端利用固定电话或移动电话发送DTMF双音多频信号,实现对近端电器设备的远程控制。
💻 LST
字号:
C51 COMPILER V7.20   IIC                                                                   05/31/2006 22:36:00 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE IIC
OBJECT MODULE PLACED IN IIC.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE IIC.c ROM(COMPACT)

line level    source

   1          
   2            
   3            
   4          #include <allseting.h>             
   5          #include <regx52.h>         /*头文件的包含*/
   6          #include <intrins.h>
   7          #define  _Nop()  _nop_()        /*定义空指令*/
   8          
   9          /******************** 端口位定义 *******************************/
  10           
  11                                     
  12          sbit SDA=P3^7;            /*模拟I2C数据传送位*/
  13          sbit SCL=P3^6;            /*模拟I2C时钟控制位*/
  14          
  15          bit ack;                      /*应答标志位*/
  16             
  17          
  18          
  19          
  20          
  21          
  22          /*******************************************************************
  23                               起动总线函数               
  24          ********************************************************************/
  25          void Start_I2c()
  26          {
  27   1        SDA=1;   /*发送起始条件的数据信号*/
  28   1        _Nop();
  29   1        SCL=1;
  30   1        _Nop();    /*起始条件建立时间大于4.7us,延时*/
  31   1        _Nop();
  32   1        _Nop();
  33   1        _Nop();
  34   1        _Nop();    
  35   1        SDA=0;    /*发送起始信号*/
  36   1        _Nop();    /* 起始条件锁定时间大于4μs*/
  37   1        _Nop();
  38   1        _Nop();
  39   1        _Nop();
  40   1        _Nop();       
  41   1        SCL=0;   /*钳住I2C总线,准备发送或接收数据 */
  42   1        _Nop();
  43   1        _Nop();
  44   1      }
  45          
  46          
  47          
  48          
  49          /*******************************************************************
  50                                结束总线函数               
  51          ********************************************************************/
  52          void Stop_I2c()
  53          {
  54   1        SDA=0;  /*发送结束条件的数据信号*/
  55   1        _Nop();   /*发送结束条件的时钟信号*/
C51 COMPILER V7.20   IIC                                                                   05/31/2006 22:36:00 PAGE 2   

  56   1        SCL=1;  /*结束条件建立时间大于4μs*/
  57   1        _Nop();
  58   1        _Nop();
  59   1        _Nop();
  60   1        _Nop();
  61   1        _Nop();
  62   1        SDA=1;  /*发送I2C总线结束信号*/
  63   1        _Nop();
  64   1        _Nop();
  65   1        _Nop();
  66   1        _Nop();
  67   1      }
  68          
  69          
  70          
  71          
  72          /*******************************************************************
  73                           字节数据传送函数               
  74          ********************************************************************/
  75          void  SendByte(uchar c)
  76          {
  77   1       uchar BitCnt;
  78   1       
  79   1       for(BitCnt=0;BitCnt<8;BitCnt++)  /*要传送的数据长度为8位*/
  80   1          {
  81   2           if((c<<BitCnt)&0x80)SDA=1;   /*判断发送位*/
  82   2             else  SDA=0;                
  83   2           _Nop();
  84   2           SCL=1;               /*置时钟线为高,通知被控器开始接收数据位*/
  85   2            _Nop(); 
  86   2            _Nop();               /*保证时钟高电平周期大于4μs*/
  87   2            _Nop();
  88   2            _Nop();
  89   2            _Nop();         
  90   2           SCL=0; 
  91   2          }
  92   1          
  93   1          _Nop();
  94   1          _Nop();
  95   1          SDA=1;               /*8位发送完后释放数据线,准备接收应答位*/
  96   1          _Nop();
  97   1          _Nop();   
  98   1          SCL=1;
  99   1          _Nop();
 100   1          _Nop();
 101   1          _Nop();
 102   1          if(SDA==1)ack=0;     
 103   1             else ack=1;        /*判断是否接收到应答信号*/
 104   1          SCL=0;
 105   1          _Nop();
 106   1          _Nop();
 107   1      }
 108          
 109          
 110          
 111          
 112          
 113          
 114          /*******************************************************************
 115                           字节数据传送函数               
 116          ********************************************************************/   
 117          uchar  RcvByte()
C51 COMPILER V7.20   IIC                                                                   05/31/2006 22:36:00 PAGE 3   

 118          {
 119   1        uchar retc;
 120   1        uchar BitCnt;
 121   1        
 122   1        retc=0; 
 123   1        SDA=1;             /*置数据线为输入方式*/
 124   1        for(BitCnt=0;BitCnt<8;BitCnt++)
 125   1            {
 126   2              _Nop();           
 127   2              SCL=0;       /*置时钟线为低,准备接收数据位*/
 128   2              _Nop();
 129   2              _Nop();         /*时钟低电平周期大于4.7μs*/
 130   2              _Nop();
 131   2              _Nop();
 132   2              _Nop();
 133   2              SCL=1;       /*置时钟线为高使数据线上数据有效*/
 134   2              _Nop();
 135   2              _Nop();
 136   2              retc=retc<<1;
 137   2              if(SDA==1)retc=retc+1; /*读数据位,接收的数据位放入retc中 */
 138   2              _Nop();
 139   2              _Nop(); 
 140   2            }
 141   1        SCL=0;    
 142   1        _Nop();
 143   1        _Nop();
 144   1        return(retc);
 145   1      }
 146          
 147          
 148          
 149          
 150          /********************************************************************
 151                               应答子函数
 152          ********************************************************************/
 153          void Ack_I2c(bit a)
 154          {
 155   1        
 156   1        if(a==0)SDA=0;     /*在此发出应答或非应答信号 */
 157   1              else SDA=1;
 158   1        _Nop();
 159   1        _Nop();
 160   1        _Nop();      
 161   1        SCL=1;
 162   1          _Nop();
 163   1          _Nop();              /*时钟低电平周期大于4μs*/
 164   1          _Nop();
 165   1          _Nop();
 166   1          _Nop();  
 167   1       SCL=0;                /*清时钟线,钳住I2C总线以便继续接收*/
 168   1          _Nop();
 169   1          _Nop();    
 170   1      }
 171          
 172          
 173          
 174          
 175          
 176          
 177          


C51 COMPILER V7.20   IIC                                                                   05/31/2006 22:36:00 PAGE 4   

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


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

⌨️ 快捷键说明

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