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

📄 i2c.lst

📁 philip RTC 芯片的驱动程序 8563
💻 LST
字号:
C51 COMPILER V7.50   I2C                                                                   08/19/2005 10:45:36 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 DEBUG OBJECTEXTEND

line level    source

   1          //***************************************************************
   2          //      I2C functions for ST72321 - master mode only
   3          //  Function    : Delay10us
   4          //  Description : delay 10us each time is called
   5          //                can be modified for different CPU speed
   6          // **************************************************************
   7          #include  "reg52.h"
   8          #include  "globedef.h"
   9          #include  "i2c.h"   
  10          #include  "delay.h"
  11          
  12          
  13          //***************************************************************
  14          //      Send start condition
  15          //      ensure data is high then issue a start condition
  16          //      see also i2c_Start() macro
  17          //***************************************************************
  18          void I2C_Start (void)
  19          {
  20   1              Pin_I2CSDA = 1;
  21   1                      Delay5US();
  22   1                      Delay5US();
  23   1              Pin_I2CSCL = 1; 
  24   1                      Delay5US();
  25   1              Delay5US();
  26   1              Pin_I2CSDA = 0; 
  27   1              Delay5US();     
  28   1              Delay5US();
  29   1              Delay5US();
  30   1              Pin_I2CSCL = 0;         
  31   1      }
  32          
  33          //***************************************************************
  34          //      Send stop condition
  35          //      data low-high while clock high
  36          //***************************************************************
  37          void I2C_Stop (void)
  38          {
  39   1              Pin_I2CSDA = 0;         
  40   1              Delay5US();
  41   1              Pin_I2CSCL = 1;         
  42   1              Delay5US();
  43   1              Delay5US();
  44   1              Pin_I2CSDA = 1;         
  45   1      }
  46          
  47          //***************************************************************
  48          //ROUTINE NAME : I2C_Ack
  49          //INPUT/OUTPUT : None.
  50          //DESCRIPTION  : Acknoledge generation from now.
  51          //COMMENTS     : Transfer sequence = DATA, ACK.
  52          //***************************************************************
  53          
  54          void I2C_Rack(void)
  55          {
C51 COMPILER V7.50   I2C                                                                   08/19/2005 10:45:36 PAGE 2   

  56   1              
  57   1                      Pin_I2CSCL = 0;
  58   1                      Pin_I2CSDA = 1;
  59   1              Delay5US();       
  60   1              Delay5US();        
  61   1              Pin_I2CSCL = 1;
  62   1              Delay5US();      
  63   1              Delay5US(); 
  64   1              Delay5US(); 
  65   1              Pin_I2CSDA = 0;
  66   1              Pin_I2CSCL = 0;          
  67   1              Delay5US();             
  68   1              
  69   1      }
  70          
  71          
  72          /*
  73          void I2C_Ack (void)
  74          {       
  75                  Pin_I2CSCL = 0;
  76                  Delay5US();             
  77                  Pin_I2CSDA = 0;
  78                  Delay5US();   
  79                  Pin_I2CSCL = 1;
  80                  Delay5US();
  81                  Pin_I2CSCL = 0;
  82                  Delay5US();
  83                  Pin_I2CSDA = 1;    
  84          }
  85          
  86          */
  87          //***************************************************************
  88          //ROUTINE NAME : I2C_nAck
  89          //INPUT/OUTPUT : None.
  90          //DESCRIPTION  : Non acknoledge generation from now.
  91          //COMMENTS     : Transfer sequence = DATA, NACK.
  92          //***************************************************************
  93          void I2C_nAck (void)
  94          {
  95   1              Pin_I2CSCL = 0;
  96   1              Delay5US();
  97   1              Pin_I2CSDA = 1;
  98   1              Delay5US();        
  99   1              Pin_I2CSCL = 1;
 100   1              Delay5US();
 101   1              Delay5US();
 102   1              Delay5US();
 103   1              Pin_I2CSCL = 0;
 104   1              Delay5US();
 105   1              Pin_I2CSDA = 1;
 106   1      }
 107          
 108          //***************************************************************
 109          //      Send a byte to the slave
 110          //      return I2C_ERROR on error
 111          //***************************************************************
 112          void I2C_TxData (BYTE i2c_data)
 113          {
 114   1              BYTE send_i;
 115   1      
 116   1              for(send_i=0; send_i<8; send_i++)
 117   1              {
C51 COMPILER V7.50   I2C                                                                   08/19/2005 10:45:36 PAGE 3   

 118   2                      Pin_I2CSCL = 0;         
 119   2                      Delay5US();             
 120   2                      if(i2c_data & 0x80)
 121   2                              Pin_I2CSDA = 1;
 122   2                      else
 123   2                              Pin_I2CSDA = 0;
 124   2                      Delay5US();     
 125   2                      Pin_I2CSCL = 1;         
 126   2                      Delay5US();                     
 127   2                      i2c_data <<= 1;
 128   2              }
 129   1              
 130   1      }
 131          
 132          //***************************************************************
 133          //ROUTINE NAME : I2Cm_RxData
 134          //INPUT/OUTPUT : Last byte to receive flag (active high)/Received data byte.
 135          //DESCRIPTION  : Receive a data byte.
 136          //COMMENTS     : Transfer sequence = DATA, ACK, EV7...
 137          //***************************************************************
 138          BYTE I2C_RxData (void)
 139          {   
 140   1          BYTE read_i;
 141   1          BYTE readbyte=0; 
 142   1          Pin_I2CSCL = 0;             
 143   1              Pin_I2CSDA = 1; 
 144   1              Delay5US();
 145   1      
 146   1              for(read_i=0; read_i<8; read_i++)
 147   1              {
 148   2                      Pin_I2CSCL = 1; 
 149   2                      readbyte <<= 1;
 150   2                      Delay5US();
 151   2                      if(Pin_I2CSDA)
 152   2                              readbyte |= 0x01;
 153   2                      
 154   2                      Pin_I2CSCL = 0;         
 155   2                      Delay5US();             
 156   2                      
 157   2              }  
 158   1              return readbyte;
 159   1      
 160   1      } 
 161          //***************************************************************
 162          //ROUTINE NAME : I2Cm_SetAddr
 163          //INPUT/OUTPUT : external I2C device address / None.
 164          //DESCRIPTION  : Generates Start-bit and transmits the address byte.
 165          //COMMENTS     : Transfer sequence = START, EV5, ADD, ACK...
 166          //***************************************************************
 167          void I2C_SetAddr(char i2c_addr)
 168          {
 169   1          I2C_TxData (i2c_addr);
 170   1      }
 171          
 172          
 173          
 174          //***************************************************************
 175          //    Send a byte to the slave and acknowledges the transfer
 176          //    return I2C_ERROR, or I2C_OK
 177          //***************************************************************
 178          
 179          /*
C51 COMPILER V7.50   I2C                                                                   08/19/2005 10:45:36 PAGE 4   

 180          void  I2C_PutByte(BYTE DevAddr,BYTE subAddr, BYTE ucData)
 181          {
 182              I2C_Start();
 183              I2C_SetAddr(DevAddr); 
 184              I2C_Rack();
 185              I2C_SetAddr(subAddr);     
 186              I2C_Rack();    
 187              I2C_TxData(ucData);
 188              I2C_Rack();    
 189              I2C_Stop();
 190          }
 191          */
 192          
 193          //***************************************************************
 194          //    Get a byte from the slave and acknowledges the transfer
 195          //    return I2C_OK or I2C_ERROR
 196          //***************************************************************
 197          
 198          /*
 199          BYTE  I2C_GetByte(BYTE DevAddr,BYTE subAddr)
 200          {
 201              BYTE  ucData;
 202                  
 203              I2C_Start ();
 204              I2C_SetAddr(DevAddr); 
 205              I2C_Rack();
 206              I2C_SetAddr(subAddr);     
 207              I2C_Rack();
 208          
 209              I2C_Start ();
 210              I2C_SetAddr(DevAddr+1);  
 211              I2C_Rack();
 212              ucData = I2C_RxData();                                               
 213              
 214              I2C_nAck();               
 215          
 216              I2C_Stop();
 217              return(ucData);
 218          }
 219          */
 220          //***************************************************************
 221          //     Send an array of bytes to the slave 
 222          //     -and acknowledges the transfer
 223          //     return I2C_OK or I2C_ERROR
 224          //***************************************************************
 225          
 226          /*
 227          void  I2C_PutString(BYTE DevAddr,BYTE subAddr, BYTE *str, BYTE length)
 228          {
 229              BYTE send_cc;
 230              send_cc = 0;
 231              I2C_Start ();
 232              I2C_SetAddr(DevAddr); 
 233              I2C_Rack();
 234              I2C_SetAddr(subAddr);     
 235              I2C_Rack();
 236          
 237              while(length)
 238              {
 239                 I2C_TxData(*str);
 240                 I2C_Rack();       
 241                 length--;
C51 COMPILER V7.50   I2C                                                                   08/19/2005 10:45:36 PAGE 5   

 242                 send_cc++;
 243                 if(length > 0)
 244                 str++;
 245                 
 246                 
 247                 if((send_cc % 8 == 0) && (length > 0))
 248                 {
 249                     I2C_Stop();
 250                     DelayX1ms(4);
 251                     
 252                     {
 253                                  I2C_Start ();
 254                                  I2C_SetAddr(DevAddr); 
 255                                  I2C_Rack();
 256                                  I2C_SetAddr(subAddr+send_cc);     
 257                                  I2C_Rack();
 258                             }
 259                     
 260                 }
 261              }
 262              I2C_Stop();
 263          }
 264          
 265          */
 266          
 267          /*
 268          void  I2C_OutString(BYTE DevAddr,BYTE subAddr, BYTE *str, BYTE length)
 269          {
 270              BYTE CCC;
 271              I2C_Start ();
 272              I2C_SetAddr(DevAddr); 
 273              I2C_Rack();
 274              I2C_SetAddr(subAddr);     
 275              I2C_Rack();
 276          
 277              while(length)
 278              {
 279               
 280                 I2C_TxData(*str);
 281                 I2C_Rack();       
 282                 length--;
 283                
 284                 if(length > 0)
 285                 str++;
 286              }
 287              I2C_Stop();
 288              for(CCC = 0; CCC <2;CCC++)
 289              ;
 290              
 291          }
 292          */
 293          
 294          //***************************************************************
 295          //     Reads number bytes from the slave, stores them at str 
 296          //     -and acknowledges the transfer
 297          //     return I2C_OK or I2C_ERROR not successfully read
 298          //***************************************************************
 299          
 300          /*
 301          void  I2C_GetString(BYTE DevAddr,BYTE subAddr, BYTE *str, BYTE number)
 302          {
 303              I2C_Start ();
C51 COMPILER V7.50   I2C                                                                   08/19/2005 10:45:36 PAGE 6   

 304              I2C_SetAddr(DevAddr); 
 305              I2C_Rack();
 306              I2C_SetAddr(subAddr);     
 307              I2C_Rack();
 308          
 309              I2C_Start ();
 310              I2C_SetAddr(DevAddr+1);  
 311              I2C_Rack();
 312              
 313              while(number)
 314              {
 315                          *str = I2C_RxData();
 316                          if (number==1)        
 317                                  I2C_nAck();      
 318                          else
 319                                  I2C_Ack();       
 320                          str++;
 321                          number -= 1;
 322              }
 323              I2C_Stop();
 324          }
 325          */


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


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

⌨️ 快捷键说明

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