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

📄 i2c.lst

📁 c8051学习机实验程序
💻 LST
字号:
C51 COMPILER V7.01  I2C                                                                    02/28/2005 12:11:49 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN I2C.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE I2C.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <io.h>
   2          
   3          #define uchar   unsigned char
   4          
   5          //extern void delay(unsigned int n);
   6          
   7           //extern void delay(uchar t_ms);
   8          ///-------------------------------------------------------------------------  I2C 底层函数
   9          //-------------------------------------------------------------------------------------
  10          
  11           void SomeNOP()
  12           {
  13   1       uchar i;
  14   1        for(i=0;i<=100;i++){;}
  15   1       }
  16          
  17          void I2CStart(void)
  18           {
  19   1       EA=0;
  20   1       SDA=1; SCL=1; SomeNOP();
  21   1       SDA=0; SomeNOP();              //START
  22   1       SCL=0;
  23   1       }
  24          
  25           void I2CStop(void)
  26           {
  27   1       SCL=0; SDA=0; SomeNOP();
  28   1       SCL=1; SomeNOP(); SDA=1;             //STOP
  29   1       EA=1;
  30   1       }
  31          
  32          bit WaitAck(void)
  33           {
  34   1       uchar errtime=255;                      //因故障接收方无ACK,超时值为255。
  35   1       SDA=1;SomeNOP();
  36   1       SCL=1;SomeNOP();
  37   1          while(SDA)
  38   1              {
  39   2               errtime--;
  40   2          SomeNOP();  //add
  41   2                     if (!errtime)
  42   2                     {   I2CStop();
  43   3                             return 0;   }
  44   2              }
  45   1         SCL=0;
  46   1         return 1;
  47   1       }
  48          
  49           void SendAck(void)
  50           {
  51   1       SDA=0; SomeNOP();
  52   1       SCL=1; SomeNOP();
  53   1       SCL=0;
  54   1       }
  55          
C51 COMPILER V7.01  I2C                                                                    02/28/2005 12:11:49 PAGE 2   

  56           void SendNotAck(void)
  57           {
  58   1       SDA=1; SomeNOP();
  59   1       SCL=1; SomeNOP();
  60   1       SCL=0;
  61   1       }
  62          
  63           void I2CSendByte(uchar ch)
  64           {
  65   1       uchar i=8;
  66   1          while (i--)
  67   1              {
  68   2               SCL=0;
  69   2               SDA=(bit)(ch&0x80); ch<<=1; SomeNOP();
  70   2               SCL=1; SomeNOP();
  71   2               }
  72   1       SCL=0;
  73   1       }
  74           
  75            uchar I2CReceiveByte(void)
  76           {
  77   1       uchar i=8;
  78   1       uchar rdata=0;
  79   1       SDA=1;
  80   1               while (i--)
  81   1              {
  82   2              rdata<<=1;
  83   2              SCL=0;SomeNOP();
  84   2              SCL=1;SomeNOP();
  85   2              rdata|=SDA;
  86   2       }
  87   1       SCL=0;
  88   1       return rdata;
  89   1       }
  90           
  91            /*
  92           void SetVoltageRef(uchar VoltageData)
  93           {
  94             I2CStart();
  95             I2CSendByte(0x58);
  96             WaitAck();
  97             I2CSendByte(0x00);
  98             WaitAck();
  99             I2CSendByte(VoltageData);
 100             WaitAck();
 101             I2CStop();
 102           }
 103          
 104          void SetCurrentRef(uchar CurrentData)
 105           {
 106             I2CStart();
 107             I2CSendByte(0x58);
 108             WaitAck();
 109             I2CSendByte(0x01);
 110             WaitAck();
 111             I2CSendByte(CurrentData);
 112             WaitAck();
 113             I2CStop();
 114           }
 115              */
 116          
 117          
C51 COMPILER V7.01  I2C                                                                    02/28/2005 12:11:49 PAGE 3   

 118            void AT24C02_write(uchar excur_addr,uchar wr_data)
 119          {    
 120   1              I2CStart();
 121   1              I2CSendByte(0xA0);
 122   1                     WaitAck();
 123   1              I2CSendByte(excur_addr);
 124   1                     WaitAck();
 125   1              I2CSendByte(wr_data);
 126   1                     WaitAck();
 127   1              I2CStop();
 128   1            // delay(20);             /////??????
 129   1      }
 130          
 131          uchar AT24C02_read(uchar excur_addr)
 132          {   
 133   1          uchar rd_data;
 134   1          
 135   1          I2CStart();
 136   1          I2CSendByte(0xA0);
 137   1              WaitAck();
 138   1          I2CSendByte(excur_addr);
 139   1              WaitAck();
 140   1          I2CStart();
 141   1          I2CSendByte(0xA1);
 142   1              WaitAck();
 143   1          rd_data=I2CReceiveByte();
 144   1              SendNotAck();
 145   1          I2CStop();
 146   1           //delay(10);
 147   1          return rd_data;
 148   1      
 149   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    212    ----
   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 + -