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

📄 i2c.lst

📁 mtv512mg + mx88v462 液晶电视驱动C完整程序
💻 LST
字号:
C51 COMPILER V7.50   I2C                                                                   12/14/2006 10:36:32 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 ..\source\I2C.C LARGE DEBUG OBJECTEXTEND PRINT(.\I2C.lst) OBJECT(.\I2C.obj)

line level    source

   1          /*-------------------------------------------------------------------------
   2          I2C.C
   3          Copyright 2004 Macronix International Co., Ltd.
   4          -------------------------------------------------------------------------*/
   5          #define _I2C_
   6          
   7          #include "..\inc\public2.h"
   8          
   9          #define I2C_ACK         0
  10          #define I2C_NACK        1
  11          
  12          void                    I2C_SendStart(void);
  13          void                    I2C_SendStop(void);
  14          void                    I2C_SendACK(bit);
  15          void                    I2C_SendByte(unsigned char );
  16          unsigned char   I2C_GetByte(bit);
  17                  
  18          //-------------------------------------------------------------------
  19          //      I2C_ReleaseBus(void)
  20          //-------------------------------------------------------------------
  21          void I2C_Delay(unsigned char value)
  22          {
  23   1              while(value>0) 
  24   1                      value--;
  25   1      }
  26          
  27          //-------------------------------------------------------------------
  28          //      I2C_SendStart(void)
  29          //-------------------------------------------------------------------
  30          void I2C_SendStart(void)
  31          {
  32   1              I2C_SDA = 1;
  33   1              I2C_SCL = 1;
  34   1              I2C_Delay(2);
  35   1                      
  36   1              I2C_SDA = 0;
  37   1              I2C_Delay(2);   
  38   1              I2C_SCL = 0;
  39   1      }
  40          
  41          //-------------------------------------------------------------------
  42          //      I2C_SendStop(void)
  43          //-------------------------------------------------------------------
  44          void I2C_SendStop(void)
  45          {
  46   1              I2C_SDA = 0;
  47   1              I2C_SCL = 1;            
  48   1              I2C_Delay(2);
  49   1              I2C_SDA = 1;            
  50   1              I2C_Delay(2);
  51   1      }
  52          
  53          //-------------------------------------------------------------------
  54          //      I2C_SendByte(unsigned char val)
  55          //-------------------------------------------------------------------
C51 COMPILER V7.50   I2C                                                                   12/14/2006 10:36:32 PAGE 2   

  56          void I2C_SendByte(unsigned char val)
  57          {
  58   1              unsigned char i;
  59   1      
  60   1          for (i=0; i<8; i++)
  61   1          {
  62   2              I2C_SDA = (bit)(val & 0X80);
  63   2                      I2C_SCL = 1;
  64   2                      val <<= 1;
  65   2                      I2C_Delay(1);
  66   2                      I2C_SCL = 0;
  67   2          }
  68   1      
  69   1              I2C_SDA = 1;
  70   1              I2C_SCL = 1;
  71   1              I2C_Delay(1);
  72   1              I2C_SCL = 0;
  73   1      }
  74          
  75          //-------------------------------------------------------------------
  76          //      I2C_GetByte(bit ACK_NACK)
  77          //                      ACK  ->I2C_SDA = 0
  78          //                      NACK ->I2C_SDA = 1
  79          //-------------------------------------------------------------------
  80          unsigned char I2C_GetByte(bit ACK_NACK)
  81          {
  82   1          unsigned char i;
  83   1          unsigned char rd_byte;
  84   1      
  85   1          rd_byte = 0;
  86   1      
  87   1          for(i=0; i<8; i++)
  88   1          {
  89   2                      I2C_SCL = 1;
  90   2              rd_byte <<= 1;
  91   2                      I2C_Delay(1);
  92   2                      rd_byte |= I2C_SDA;
  93   2                      I2C_SCL = 0;
  94   2          }
  95   1      
  96   1              I2C_SDA = ACK_NACK;
  97   1              I2C_SCL = 1;
  98   1              I2C_Delay(1);
  99   1              I2C_SCL = 0;
 100   1              I2C_SDA = 1;
 101   1              
 102   1          return(rd_byte);
 103   1      }
 104          
 105          /**--------------------------------------------------------------------------
 106          * Name          void I2C_Write(unsigned char dev_addr, unsigned char start_addr,
 107          *                                                               unsigned char count , unsigned char *write_buf)
 108          *
 109          * Description   WRITE Control register BY I2C
 110          *
 111          * Flow Chart    1.Send Module Write ID address
 112          *                               2.Send Subaddress
 113          *                               3.Send Data(n byte)
 114          *
 115          * Return
 116          *
 117          * DATE          Author          Description
C51 COMPILER V7.50   I2C                                                                   12/14/2006 10:36:32 PAGE 3   

 118          * ===========================================================================
 119          **/
 120          void I2C_Write(unsigned char dev_addr, unsigned char start_addr, unsigned char count , unsigned char *writ
             -e_buf)
 121          {
 122   1              unsigned char i;
 123   1      
 124   1          I2C_SendStart();
 125   1          I2C_SendByte(dev_addr);                                     //Write W_ID
 126   1          I2C_SendByte(start_addr);                           //Write Address
 127   1      
 128   1              for(i=0;i<count;i++)
 129   1              {
 130   2              I2C_SendByte(*(write_buf+i));           //Write multi-data
 131   2              }
 132   1              I2C_SendStop();                                                 //Stop
 133   1      }
 134          
 135          void I2C_WriteByte(unsigned char dev_addr, unsigned char start_addr, unsigned char write_byte)
 136          {
 137   1          I2C_SendStart();
 138   1          I2C_SendByte(dev_addr);                                     //Write W_ID
 139   1          I2C_SendByte(start_addr);                           //Write Address
 140   1      
 141   1          I2C_SendByte(write_byte);                           //Write data
 142   1                      
 143   1              I2C_SendStop();                                                 //Stop
 144   1      }
 145          
 146          /**--------------------------------------------------------------------------
 147          * Name          void I2C_Read(unsigned char dev_addr, unsigned char start_addr,
 148          *                                                                       unsigned char count, unsigned char *DATA_BUF )
 149          *
 150          * Description   READ Control register BY I2C
 151          *
 152          * Flow Chart    1.Send Module Write ID address
 153          *                               2.Send Subaddress
 154          *                               3.Send Module Read ID address
 155          *                               4.Read Data(n byte)
 156          *
 157          * Return
 158          *
 159          * DATE          Author          Description
 160          * ===========================================================================
 161          **/
 162          void I2C_Read(unsigned char dev_addr, unsigned char start_addr, unsigned char count, unsigned char *DATA_B
             -UF)
 163          {
 164   1              unsigned char i;
 165   1      
 166   1          I2C_SendStart();
 167   1          I2C_SendByte(dev_addr);                                     //Write W_ID
 168   1              I2C_SendByte(start_addr);                               //Write Address
 169   1      
 170   1          I2C_SendStart();
 171   1          I2C_SendByte(dev_addr|0X01);                        //Write W_ID
 172   1      
 173   1              for(i=0;i<count-1;i++)
 174   1              {
 175   2                      *(DATA_BUF+i)=I2C_GetByte(I2C_ACK);     //Read data from device(burst mode)
 176   2              }
 177   1              *(DATA_BUF+i) = I2C_GetByte(I2C_NACK);  //Read the last data then send NACK to STOP
C51 COMPILER V7.50   I2C                                                                   12/14/2006 10:36:32 PAGE 4   

 178   1      
 179   1              I2C_SendStop();                                                 //Stop
 180   1      }
 181          
 182          unsigned char I2C_ReadByte(unsigned char dev_addr, unsigned char start_addr)
 183          {
 184   1              unsigned char   rd_byte;
 185   1      
 186   1          I2C_SendStart();
 187   1          I2C_SendByte(dev_addr);                                     //Write W_ID
 188   1              I2C_SendByte(start_addr);                               //Write Address
 189   1      
 190   1          I2C_SendStart();
 191   1          I2C_SendByte(dev_addr|0X01);                        //Write W_ID
 192   1      
 193   1              rd_byte = I2C_GetByte(I2C_NACK);                //Read the last data then send NACK to STOP
 194   1      
 195   1              I2C_SendStop();                                                 //Stop
 196   1              
 197   1              return(rd_byte);
 198   1      }


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


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

⌨️ 快捷键说明

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