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

📄 twi_lib.lst

📁 atmel at89c51snd1c mp3芯片方案源码
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.50   TWI_LIB                                                               02/16/2009 09:59:54 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE TWI_LIB
OBJECT MODULE PLACED IN twi_lib.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE lib_mcu\twi\twi_lib.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\twi_lib.lst) 
                    -OBJECT(twi_lib.obj)

line level    source

   1          
   2          #include "config.h"                         /* system configuration */
   3          #include "twi_lib.h"
   4          #include "lib_mcu\lcd\lcd_drv.h" 
   5          #include <intrins.h>
   6          
   7          
   8          #define IIC_BIT_BANG
   9          
  10          #ifdef IIC_BIT_BANG
  11          
  12          
  13          
  14          ///////////////////////////////////////////////////////////////////
  15          void Start_I2c()
  16          {
  17   1              SDA=1;   /*发送起始条件的数据信号*/
  18   1              _Nop();
  19   1              SCL=1;
  20   1              _Nop();   /*起始条件建立时间大于4.7us,延时*/
  21   1              _Nop();
  22   1              _Nop();
  23   1              _Nop();
  24   1              _Nop();    
  25   1              SDA=0;   /*发送起始信号*/
  26   1              _Nop();  /* 起始条件锁定时间大于4*/
  27   1              _Nop();
  28   1              _Nop();
  29   1              _Nop();
  30   1              _Nop();       
  31   1              SCL=0;   /*钳住I2C总线,准备发送或接收数据 */
  32   1              _Nop();
  33   1              _Nop();
  34   1      }
  35          
  36          
  37          //////////////////////////////////////////////////////////////////////////
  38          void Stop_I2c()
  39          {
  40   1              SDA=0;  /*发送结束条件的数据信号*/
  41   1              _Nop();   /*发送结束条件的时钟信号*/
  42   1              SCL=1; /*结束条件建立时间大于4us*/
  43   1              _Nop();
  44   1              _Nop();
  45   1              _Nop();
  46   1              _Nop();
  47   1              _Nop();
  48   1              SDA=1;  /*发送I2C总线结束信号*/
  49   1              _Nop();
  50   1              _Nop();
  51   1              _Nop();
  52   1              _Nop();
  53   1      }
  54          
C51 COMPILER V7.50   TWI_LIB                                                               02/16/2009 09:59:54 PAGE 2   

  55          /////////////////////////////////////////////////////////////////////////
  56          bit SendByte(uchar c)
  57          {
  58   1        INT8U  i;
  59   1        bit    bAck;
  60   1      
  61   1        for(i=0; i<8; i++) 
  62   1        {
  63   2           if((c <<  i) & 0x80)
  64   2                 SDA = 1;   
  65   2           else  
  66   2                 SDA = 0;  
  67   2                    
  68   2           _Nop();
  69   2           SCL=1;               /*置时钟线为高,通知被控器开始接收数据位*/
  70   2           _Nop(); 
  71   2           _Nop();               /*保证时钟高电平周期大于4μs*/
  72   2           _Nop();
  73   2           _Nop();
  74   2           _Nop();         
  75   2           SCL=0; 
  76   2         }
  77   1          
  78   1          _Nop();
  79   1          _Nop();
  80   1          SDA=1;               /*8位发送完后释放数据线,准备接收应答位*/
  81   1          _Nop();
  82   1          _Nop();   
  83   1          SCL=1;
  84   1          _Nop();
  85   1          _Nop();
  86   1          _Nop();
  87   1          if(SDA == 1)
  88   1                 bAck = 0;    
  89   1          else 
  90   1                 bAck = 1;        /*判断是否接收到应答信号*/
  91   1          SCL=0;
  92   1          _Nop();
  93   1          _Nop();
  94   1              return bAck;
  95   1      }
  96          
  97          
  98          //////////////////////////////////////////////////////////////////////////////////////////////
  99          void IIC_init(void)
 100          {
 101   1          SCL=0;
 102   1          Stop_I2c();
 103   1      }
 104          
 105          
 106          //////////////////////////////////////////////////////////////////////////////////////////////
 107          bit iic_send(unsigned char slave_adr, bit rw, unsigned char nbbytes, unsigned char *info )
 108          {
 109   1         INT8U *cp;
 110   1         bit rc = 0;
 111   1      
 112   1         if(rw == I2C_WRITE)
 113   1         {
 114   2            Start_I2c();
 115   2      
 116   2                if( (rc = SendByte(slave_adr << 1)) == 1)  //ack received
C51 COMPILER V7.50   TWI_LIB                                                               02/16/2009 09:59:54 PAGE 3   

 117   2                {
 118   3                  lcd_print_string(0x40, "acked");
 119   3                  for(cp=info; nbbytes--; cp++)
 120   3                      {
 121   4                         if( (rc = SendByte(*cp)) == 0 )
 122   4                           break;
 123   4                      }
 124   3                }
 125   2         }
 126   1         Stop_I2c();
 127   1         return rc;
 128   1      }
 129          
 130          
 131          #endif
 132          
 133          
 134          
 135          ////////////////////////////////////////////////////////////////////////////
 136          #ifndef IIC_BIT_BANG
              
              volatile bit b_I2C_busy;
              volatile unsigned char I2C_Err;
              volatile unsigned char I2C_nb_transmited;
              volatile unsigned char I2C_RecPtr;
              
              
              volatile unsigned char xdata I2C_slave_data[I2C_NB_SLAVE_DATA];
              
              
              volatile I2C_type_message xdata I2C_message;
              
              
              
              
              /*F**************************************************************************
              * NAME: i2c_baud_rate 
              *----------------------------------------------------------------------------
              * PARAMS:
              * return:  value for CR2..CR0 
              *----------------------------------------------------------------------------
              * PURPOSE: 
              * returns correct value for CR2..CR0.
              *----------------------------------------------------------------------------
              * EXAMPLE:
              * SSCON |= i2c_baud_rate(256);
              *----------------------------------------------------------------------------
              * NOTE: 
              *----------------------------------------------------------------------------
              * REQUIREMENTS: 
              *****************************************************************************/
              unsigned char I2C_baud_rate (unsigned int ratio)
              {
                switch ( ratio )
                {
                  case 256:
                    return I2C_RATIO_256;
                  break;
              
                  case 224:
                    return I2C_RATIO_224;
                  break;
C51 COMPILER V7.50   TWI_LIB                                                               02/16/2009 09:59:54 PAGE 4   

              
                  case 192:
                   return I2C_RATIO_192;
                  break;
              
                  case 160:
                    return I2C_RATIO_160;
                  break;
              
                  case 960:
                    return I2C_RATIO_960;
                  break;
              
                  case 120:
                    return I2C_RATIO_120;
                  break;
              
                  case 60:
                    return I2C_RATIO_60;
                  break;
                  }
              }
                      
              
              
              /*F**************************************************************************
              * NAME: I2C_decode_status 
              *----------------------------------------------------------------------------
              * PARAMS:
              * return:  none
              *----------------------------------------------------------------------------
              * PURPOSE: 
              * main processing state machine for I2C message reception transmission
              * in slave or master mode.
              * This function is called when an event occured on the I2C interface.
              * Can be used both in polling or interrupt mode.
              *----------------------------------------------------------------------------
              * EXAMPLE:
              *----------------------------------------------------------------------------
              * NOTE: 
              *----------------------------------------------------------------------------
              * REQUIREMENTS: 

⌨️ 快捷键说明

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