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

📄 wdi2c.lst

📁 温度采集显示与PID控制
💻 LST
字号:
C51 COMPILER V7.01  WDI2C                                                                  05/09/2003 11:49:39 PAGE 1   


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

stmt level    source

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

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

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

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

 242   2                     i2c_stop();
 243   2                   return(0);
 244   2                     }
 245   1            i2c_stop();
 246   1          return(1);
 247   1      }
 248          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    581    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----      12
   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 + -