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

📄 i2c.lst

📁 通过车载终端采集GPS数据
💻 LST
字号:
C51 COMPILER V8.02   I2C                                                                   09/22/2008 11:37:52 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN .\output\bin\i2c.obj
COMPILER INVOKED BY: C:\Keil802\C51\BIN\C51.EXE eeprom\i2c.c LARGE BROWSE INCDIR(audio\;eeprom\;extendUART\;flash\;gps\;
                    -inter\;key\;mcu\;menu\;usb\;gprs\;main\;1wire\) DEBUG OBJECTEXTEND PRINT(.\output\i2c.lst) OBJECT(.\output\bin\i2c.obj)

line level    source

   1          #include "i2c.h"
   2          #include <intrins.h>
   3          #include "w77e532.h"
   4          /*SDA P4_2 SCL P4_3 WP P4_0*/
   5          /*#define SDA     P1_0
   6          #define SCL     P1_1
   7          extern Uchar volatile xdata D12_Y5;
   8          extern idata Uchar D18CS;//代替WP的作用*/
   9          #define SDA_ON P4|=0x4//SDA=1
  10          #define SDA_OFF P4&=0xb//SDA=0
  11          //#define IIC_CLOCK_HIGH       SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_
             -();SCL=1;_nop_();_nop_()
  12          //#define IIC_CLOCK_LOW        SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();SCL=0
             -;_nop_();_nop_()
  13          #define IIC_CLOCK_HIGH       P4&=0x7;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_
             -();P4|=0x8;_nop_();_nop_()
  14          #define IIC_CLOCK_LOW        P4|=0x8;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();P4&=0
             -x7;_nop_();_nop_()
  15          
  16          unsigned char sda_equalzero()
  17          {
  18   1          char P4_reg;
  19   1          P4_reg = P4;
  20   1          P4_reg &= 0x4;
  21   1          if (0 == P4_reg)
  22   1              return 1;
  23   1          else
  24   1              return 0;
  25   1      }
  26          
  27          void i2c_wp(char flag)
  28          {
  29   1          if( flag )
  30   1              //WP = 1;
  31   1              P4 |= 0x1;
  32   1          else
  33   1              //WP = 0;
  34   1              P4 &= 0xe;
  35   1      }
  36          
  37          /***************i2c起始位************************/
  38          void i2c_start(void)
  39          {
  40   1          IIC_CLOCK_HIGH;
  41   1          //SDA=1;
  42   1          SDA_ON;
  43   1          _nop_();
  44   1          _nop_();
  45   1          _nop_();
  46   1          //SDA=0;
  47   1          SDA_OFF;
  48   1          _nop_();
  49   1          _nop_();  
  50   1          IIC_CLOCK_LOW;
C51 COMPILER V8.02   I2C                                                                   09/22/2008 11:37:52 PAGE 2   

  51   1      }
  52          
  53          /***************i2c停止位********************/
  54          void i2c_stop(void)
  55          {
  56   1          //SDA=0;
  57   1          SDA_OFF;
  58   1          _nop_();
  59   1          _nop_();
  60   1          IIC_CLOCK_HIGH;
  61   1          _nop_();
  62   1          _nop_();
  63   1          _nop_();
  64   1          _nop_();
  65   1          _nop_();
  66   1          _nop_();
  67   1          _nop_();
  68   1          _nop_();
  69   1          _nop_();
  70   1          _nop_();
  71   1          //SDA=1;
  72   1          SDA_ON;
  73   1      }
  74          
  75          /***************i2c等应答函数******************/
  76          
  77          char i2c_get_ack(void)
  78          {   
  79   1          //SDA=1;
  80   1          SDA_ON;
  81   1          _nop_(); 
  82   1          _nop_();
  83   1          IIC_CLOCK_HIGH;
  84   1      
  85   1       /*   if( SDA == 0 )
  86   1          {
  87   1              IIC_CLOCK_LOW; 
  88   1              return OK;
  89   1          }
  90   1          else
  91   1          {
  92   1              IIC_CLOCK_LOW; 
  93   1              return ERROR;
  94   1          } */
  95   1          if( 1 == sda_equalzero() )
  96   1          {
  97   2              IIC_CLOCK_LOW; 
  98   2              return OK;
  99   2          }
 100   1          else
 101   1          {
 102   2              IIC_CLOCK_LOW; 
 103   2              return ERROR;
 104   2          }
 105   1      }
 106          
 107          /*主机发应答,连续读数据用*/
 108          void i2c_send_ack(void)
 109          {
 110   1       //   SDA=0;
 111   1          SDA_OFF;
 112   1          _nop_();
C51 COMPILER V8.02   I2C                                                                   09/22/2008 11:37:52 PAGE 3   

 113   1          IIC_CLOCK_LOW;
 114   1      
 115   1       //   SDA=1;                  /*释放总线给24C16*/
 116   1          SDA_ON;
 117   1      }
 118          
 119          /*无需应答位 noack*/
 120          void i2c_send_no_ack(void)
 121          {
 122   1       //   SDA=1;
 123   1          SDA_ON;
 124   1          _nop_();
 125   1          IIC_CLOCK_LOW;
 126   1      }
 127          /***************写i2c******************/
 128          void i2c_writeByte(unsigned char dat)
 129          {
 130   1          char i;
 131   1          unsigned char temp;
 132   1      
 133   1          temp = dat;
 134   1          for(i=0;i<8;i++)
 135   1          {
 136   2              if(temp & 0x80)
 137   2              {
 138   3                //  SDA=1;
 139   3                  SDA_ON;
 140   3              }
 141   2              else
 142   2              {
 143   3               //   SDA=0;
 144   3                  SDA_OFF;
 145   3              }
 146   2        
 147   2              temp <<= 1;
 148   2              IIC_CLOCK_LOW; 
 149   2          }
 150   1      }
 151          
 152          /***************读i2c************************/
 153          char i2c_readByte(void)
 154          {
 155   1          unsigned char dat;
 156   1          unsigned char i;
 157   1          
 158   1          i = 8;
 159   1          dat = 0x00;
 160   1          while(i--)
 161   1          {
 162   2              dat <<= 1;
 163   2              IIC_CLOCK_HIGH;
 164   2      //        if(SDA)
 165   2              if (0 == sda_equalzero())
 166   2                  dat |= 0x01;
 167   2          }  
 168   1          IIC_CLOCK_LOW;  
 169   1      
 170   1          return dat;
 171   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
C51 COMPILER V8.02   I2C                                                                   09/22/2008 11:37:52 PAGE 4   

   CODE SIZE        =    319    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   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 + -