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

📄 wdi2c.lst

📁 温度与转速数据采集和控制
💻 LST
字号:
C51 COMPILER V7.06   WDI2C                                                                 12/23/2003 08:42:55 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE WDI2C
OBJECT MODULE PLACED IN .\wdi2c.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE .\wdi2c.c DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg52.h>
   2          
   3          #include<intrins.h>
   4          
   5          #define uint unsigned int
   6          #define uchar unsigned char
   7          
   8          
   9          sbit sda= P1^4;
  10          sbit scl= P1^5;
  11          
  12          sbit ac0=ACC^0;                 /*定义ACC的位,利用ACC操作速度最快*/
  13          sbit ac1=ACC^1;
  14          sbit ac2=ACC^2;
  15          sbit ac3=ACC^3;
  16          sbit ac4=ACC^4;
  17          sbit ac5=ACC^5;
  18          sbit ac6=ACC^6;
  19          sbit ac7=ACC^7;
  20          
  21          
  22          
  23          void delay();
  24          
  25          
  26          
  27          void i2c_start(void);    /*起始*/
  28          void i2c_stop(void);     /*停止*/
  29          bit wait_ack(void);     /*等待24c02应答*/
  30          void send_ack(void);     /*向24c02发送应答*/
  31          void sendnot_ack(void);    /*向24c02发送非应答*/
  32          void i2c_sendbyte(uchar ch);/*写发送移位*/
  33          uint i2c_readbyte(void);    /*读移位*/
  34          
  35          uint i2c_read(uchar address);
  36          bit i2c_write(uchar address,uint fb);
  37          
  38          
  39          
  40           void i2c_start(void)
  41          {
  42   1        
  43   1        sda=1;
  44   1        scl=1;
  45   1        delay();
  46   1        sda=0;
  47   1        delay();
  48   1        scl=0;
  49   1        delay();
  50   1        }
  51          
  52          
  53          
  54          void i2c_stop(void)
  55          {
C51 COMPILER V7.06   WDI2C                                                                 12/23/2003 08:42:55 PAGE 2   

  56   1         scl=0;
  57   1              _nop_();
  58   1              sda=0;
  59   1              delay();
  60   1              scl=1;
  61   1              delay();
  62   1              sda=1;
  63   1          
  64   1              }
  65          
  66          
  67          bit wait_ack(void)
  68          {
  69   1         uchar i;
  70   1              scl=0;
  71   1              _nop_();
  72   1              _nop_();
  73   1         sda=1;
  74   1              delay();
  75   1              scl=1;
  76   1              delay();
  77   1              while(sda)
  78   1                       {
  79   2                                        for(i=0;i<=5;i++)
  80   2                                                   {
  81   3                                                                          if(!sda)
  82   3                                                                                  {
  83   4                                                                                        scl=0;
  84   4                                                                                        return(0);
  85   4                                                                                        }
  86   3                                                                        }
  87   2                                        
  88   2                                        return(1);
  89   2                                        }
  90   1             scl=0;
  91   1                       return(0);
  92   1        }
  93          
  94          void send_ack(void)
  95          {
  96   1         sda=0;
  97   1              delay();
  98   1              scl=1;
  99   1              delay();
 100   1              scl=0;
 101   1       }
 102          
 103          
 104          void sendnot_ack(void)
 105          {
 106   1          sda=1;
 107   1               delay();
 108   1               scl=1;
 109   1               delay();
 110   1               scl=0;
 111   1      }
 112          
 113          
 114          void i2c_sendbyte(uchar ch)
 115          {
 116   1              ACC=ch;   
 117   1                              
C51 COMPILER V7.06   WDI2C                                                                 12/23/2003 08:42:55 PAGE 3   

 118   1                  sda=ac7;_nop_();scl=1;delay();scl=0;delay();
 119   1                  sda=ac6;_nop_();scl=1;delay();scl=0;delay();
 120   1                  sda=ac5;_nop_();scl=1;delay();scl=0;delay();
 121   1                  sda=ac4;_nop_();scl=1;delay();scl=0;delay();
 122   1              sda=ac3;_nop_();scl=1;delay();scl=0;delay();
 123   1              sda=ac2;_nop_();scl=1;delay();scl=0;delay();
 124   1                  sda=ac1;_nop_();scl=1;delay();scl=0;delay();
 125   1                  sda=ac0;_nop_();scl=1;delay();scl=0;delay();
 126   1      }
 127          
 128          
 129          uint i2c_readbyte(void)
 130          {
 131   1             uint sf;
 132   1              sda=1;_nop_();_nop_();
 133   1              scl=1;delay();ac7=sda;scl=0;delay();
 134   1              scl=1;delay();ac6=sda;scl=0;delay();
 135   1              scl=1;delay();ac5=sda;scl=0;delay();
 136   1              scl=1;delay();ac4=sda;scl=0;delay();
 137   1              scl=1;delay();ac3=sda;scl=0;delay();
 138   1              scl=1;delay();ac2=sda;scl=0;delay();
 139   1              scl=1;delay();ac1=sda;scl=0;delay();
 140   1              scl=1;delay();ac0=sda;scl=0;delay();
 141   1              sf=ACC;
 142   1              return(sf);
 143   1      }
 144          
 145          
 146          
 147          void delay()
 148          {
 149   1         _nop_();
 150   1              _nop_();
 151   1         _nop_();
 152   1         _nop_();
 153   1         _nop_();
 154   1         _nop_();
 155   1      
 156   1       
 157   1        
 158   1        
 159   1       
 160   1      }
 161          
 162          
 163          
 164          uint i2c_read(uchar address)
 165          {
 166   1           uchar dd=0xa0;
 167   1                uchar dc=0xa1;
 168   1                uint ae;
 169   1                uint ar;
 170   1           i2c_start();
 171   1                i2c_sendbyte(dd);
 172   1           if(wait_ack())
 173   1                    {
 174   2                     i2c_stop();
 175   2                   return(0);
 176   2                     }
 177   1                i2c_sendbyte(address);
 178   1                if(wait_ack())
 179   1                  {
C51 COMPILER V7.06   WDI2C                                                                 12/23/2003 08:42:55 PAGE 4   

 180   2                     i2c_stop();
 181   2                   return(0);
 182   2                     }
 183   1              i2c_stop();
 184   1                      delay();
 185   1            i2c_start();
 186   1                      i2c_sendbyte(dc);
 187   1            if(wait_ack())
 188   1                  {
 189   2                     i2c_stop();
 190   2                   return(0);
 191   2                     }
 192   1            ae=i2c_readbyte();
 193   1                      send_ack();
 194   1                ar=i2c_readbyte();
 195   1                      sendnot_ack();
 196   1                      i2c_stop();
 197   1                      ar=ar<<8;
 198   1            return(ar+ae);
 199   1       }
 200          
 201          
 202           bit i2c_write(uchar address,uint fb)
 203           {
 204   1            uchar dd=0xa0;
 205   1                uchar ae;
 206   1                uchar ar;
 207   1           ae=(uchar)fb;
 208   1           fb=(fb>>8);
 209   1           ar=(uchar)fb;
 210   1           i2c_start();
 211   1                i2c_sendbyte(dd);
 212   1           if(wait_ack())
 213   1                  {
 214   2                     i2c_stop();
 215   2                   return(0);
 216   2                     }
 217   1                i2c_sendbyte(address);
 218   1                if(wait_ack())
 219   1                  {
 220   2                     i2c_stop();
 221   2                   return(0);
 222   2                     }
 223   1            i2c_sendbyte(ae);
 224   1                if(wait_ack())
 225   1                   {
 226   2                     i2c_stop();
 227   2                   return(0);
 228   2                     }
 229   1            i2c_sendbyte(ar);
 230   1                if(wait_ack())
 231   1                  {
 232   2                     i2c_stop();
 233   2                   return(0);
 234   2                     }
 235   1            i2c_stop();
 236   1          return(1);
 237   1      }
 238          
 239          


C51 COMPILER V7.06   WDI2C                                                                 12/23/2003 08:42:55 PAGE 5   

MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    515    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      11
   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 + -