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

📄 i2c.lst

📁 完全按照645协议编写的RS485通讯程序 (REG764单片机)
💻 LST
字号:
C51 COMPILER V7.50   I2C                                                                   05/18/2007 03:46:48 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN I2C.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE I2C.c OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************************
   2          I2C.C
   3          ********************************************************************/
   4          #include "Config.h"           
   5          #include "I2C.h"
   6          
   7          #define  _Nop()  _nop_()       
   8          
   9          sbit SDA=P1^3;            
  10          sbit SCL=P1^2;            
  11          
  12          bit ack;
  13                           
  14          
  15          void Start_I2c()
  16          {
  17   1        SDA=1;   
  18   1        _Nop();
  19   1        SCL=1;
  20   1        _Nop();    
  21   1        _Nop();
  22   1        _Nop();
  23   1        _Nop();
  24   1        _Nop();    
  25   1        SDA=0;   
  26   1        _Nop();    
  27   1        _Nop();
  28   1        _Nop();
  29   1        _Nop();
  30   1        _Nop();       
  31   1        SCL=0;   
  32   1        _Nop();
  33   1        _Nop();
  34   1      }
  35          
  36          
  37          void Stop_I2c()
  38          {
  39   1        SDA=0;  
  40   1        _Nop();   
  41   1        SCL=1;  
  42   1        _Nop();
  43   1        _Nop();
  44   1        _Nop();
  45   1        _Nop();
  46   1        _Nop();
  47   1        SDA=1;  
  48   1        _Nop();
  49   1        _Nop();
  50   1        _Nop();
  51   1        _Nop();
  52   1      }
  53          
  54          
  55          void  SendByte(uchar c)
C51 COMPILER V7.50   I2C                                                                   05/18/2007 03:46:48 PAGE 2   

  56          {
  57   1       uchar BitCnt;
  58   1       
  59   1       for(BitCnt=0;BitCnt<8;BitCnt++)  
  60   1          {
  61   2              
  62   2            if((c<<BitCnt)&0x80)
  63   2               SDA=1;   
  64   2            else  
  65   2               SDA=0;                
  66   2            _Nop();
  67   2            SCL=1;      
  68   2            _Nop(); 
  69   2            _Nop();             
  70   2            _Nop();
  71   2            _Nop();
  72   2            _Nop();         
  73   2            SCL=0; 
  74   2          }
  75   1          _Nop();
  76   1          _Nop();
  77   1          SDA=1;               
  78   1          _Nop();
  79   1          _Nop();   
  80   1          SCL=1;
  81   1          _Nop();
  82   1          _Nop();
  83   1          _Nop();
  84   1          if(SDA==1)
  85   1           ack=0;     
  86   1          else 
  87   1           ack=1;        
  88   1          SCL=0;
  89   1          _Nop();
  90   1          _Nop();
  91   1      }
  92          
  93          
  94          uchar  RcvByte()
  95          {
  96   1        uchar retc;
  97   1        uchar BitCnt;
  98   1        
  99   1        retc=0; 
 100   1        SDA=1;             
 101   1        for(BitCnt=0;BitCnt<8;BitCnt++)
 102   1            {
 103   2              _Nop();           
 104   2              SCL=0;       
 105   2              _Nop();
 106   2              _Nop();         
 107   2              _Nop();
 108   2              _Nop();
 109   2              _Nop();
 110   2              SCL=1;       
 111   2              _Nop();
 112   2              _Nop();
 113   2              retc=retc<<1;
 114   2              if(SDA==1)
 115   2              retc=retc+1; 
 116   2              _Nop();
 117   2              _Nop(); 
C51 COMPILER V7.50   I2C                                                                   05/18/2007 03:46:48 PAGE 3   

 118   2            }
 119   1        SCL=0;    
 120   1        _Nop();
 121   1        _Nop();
 122   1        return(retc);
 123   1      }
 124          
 125          void Ack_I2c(bit a)
 126          {
 127   1        if(a==0)
 128   1              SDA=0;    
 129   1        else 
 130   1              SDA=1;
 131   1        _Nop();
 132   1        _Nop();
 133   1        _Nop();      
 134   1        SCL=1;
 135   1          _Nop();
 136   1          _Nop();              
 137   1          _Nop();
 138   1          _Nop();
 139   1          _Nop();  
 140   1        SCL=0;                
 141   1          _Nop();
 142   1          _Nop();    
 143   1      }
 144          
 145          #if 0
              bit ISendByte(uchar sla,uchar c)
              {
                 Start_I2c();               
                 SendByte(sla);           
                 if(ack==0)
                      return(0);
                 SendByte(c);              
                 if(ack==0)
                      return(0);
                 Stop_I2c();                 
                 return(1);
              }
              #endif
 159          
 160          bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
 161          {
 162   1         uchar i;
 163   1      
 164   1         Start_I2c();               
 165   1         SendByte(sla);            
 166   1           if(ack==0)
 167   1               return(0);
 168   1         SendByte(suba);            
 169   1           if(ack==0)
 170   1               return(0);
 171   1      
 172   1         for(i=0;i<no;i++)
 173   1          {   
 174   2           SendByte(*s);               
 175   2             if(ack==0)
 176   2                 return(0);
 177   2           s++;
 178   2          } 
 179   1       Stop_I2c();                
C51 COMPILER V7.50   I2C                                                                   05/18/2007 03:46:48 PAGE 4   

 180   1        return(1);
 181   1      }
 182          
 183          #if 0
              bit IRcvByte(uchar sla,uchar *c)
              {
                 Start_I2c();               
                 SendByte(sla+1);           
                   if(ack==0)
                       return(0);
                 *c=RcvByte();               
                   Ack_I2c(1);              
                Stop_I2c();                 
                return(1);
              }
              #endif
 196          
 197          bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)
 198          {
 199   1         uchar i;
 200   1      
 201   1         Start_I2c();              
 202   1         SendByte(sla);           
 203   1           if(ack==0)
 204   1               return(0);
 205   1         SendByte(suba);            
 206   1           if(ack==0)
 207   1               return(0);
 208   1      
 209   1         Start_I2c();
 210   1         SendByte(sla+1);
 211   1            if(ack==0)
 212   1                return(0);
 213   1      
 214   1         for(i=0;i<no-1;i++)
 215   1          {   
 216   2           *s=RcvByte();               
 217   2            Ack_I2c(0);               
 218   2           s++;
 219   2          } 
 220   1         *s=RcvByte();
 221   1          Ack_I2c(1);                
 222   1        Stop_I2c();                    
 223   1        return(1);
 224   1      }


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