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

📄 iic-24c64.lst

📁 全数字高清电视数字调谐器
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.01  IIC_24C64                                                              08/17/2003 17:24:34 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE IIC_24C64
OBJECT MODULE PLACED IN .\Iic-24c64.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE .\Iic-24c64.c LARGE MODDP2 DEBUG OBJECTEXTEND

stmt level    source

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

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

 118          void i2c_sendbyte(unsigned char ch)
 119          {
 120   1      ACC=ch;                         
 121   1                  sda=ac7;_nop_();scl=1;delay0();scl=0;delay0();
 122   1                  sda=ac6;_nop_();scl=1;delay0();scl=0;delay0();
 123   1                  sda=ac5;_nop_();scl=1;delay0();scl=0;delay0();
 124   1                  sda=ac4;_nop_();scl=1;delay0();scl=0;delay0();
 125   1                 sda=ac3;_nop_();scl=1;delay0();scl=0;delay0();
 126   1                 sda=ac2;_nop_();scl=1;delay0();scl=0;delay0();
 127   1                  sda=ac1;_nop_();scl=1;delay0();scl=0;delay0();
 128   1                  sda=ac0;_nop_();scl=1;delay0();scl=0;delay0();
 129   1      }
 130          
 131          
 132          unsigned char i2c_readbyte(void)
 133          {
 134   1             unsigned char sf;
 135   1           sda=1;_nop_();_nop_();
 136   1      scl=1;delay0();ac7=sda;scl=0;delay0();
 137   1      scl=1;delay0();ac6=sda;scl=0;delay0();
 138   1      scl=1;delay0();ac5=sda;scl=0;delay0();
 139   1      scl=1;delay0();ac4=sda;scl=0;delay0();
 140   1      scl=1;delay0();ac3=sda;scl=0;delay0();
 141   1      scl=1;delay0();ac2=sda;scl=0;delay0();
 142   1      scl=1;delay0();ac1=sda;scl=0;delay0();
 143   1      scl=1;delay0();ac0=sda;scl=0;delay0();
 144   1      sf=ACC;
 145   1      return(sf);
 146   1      }
 147          
 148          
 149          
 150          
 151          bit i2c_read(unsigned int address,unsigned char fb[],unsigned char su)//多字节读
 152               {
 153   1            unsigned char i;
 154   1            unsigned char dd=0xa0;
 155   1            unsigned char dc=0xa1;        
 156   1            unsigned char s;
 157   1            unsigned char c;
 158   1                s=address;
 159   1                c=address>>8;
 160   1                delay1(2000);
 161   1                
 162   1           i2c_start();
 163   1                i2c_sendbyte(dd);
 164   1           if(wait_ack())
 165   1                    {
 166   2                     i2c_stop();
 167   2                   return(0);
 168   2                     }
 169   1                i2c_sendbyte(c);
 170   1                if(wait_ack())
 171   1                  {
 172   2                     i2c_stop();
 173   2                   return(0);
 174   2                     }
 175   1               i2c_sendbyte(s);
 176   1                if(wait_ack())
 177   1                  {
 178   2                     i2c_stop();
 179   2                   return(0);
C51 COMPILER V7.01  IIC_24C64                                                              08/17/2003 17:24:34 PAGE 4   

 180   2                     }
 181   1                i2c_stop();
 182   1                
 183   1                      delay1(300);
 184   1            i2c_start();
 185   1                      i2c_sendbyte(dc);
 186   1            if(wait_ack())
 187   1                  {
 188   2                     i2c_stop();
 189   2                   return(0);
 190   2                     }
 191   1      for(i=0;i<=su;i++)
 192   1          {
 193   2           fb[i]=i2c_readbyte();
 194   2                  send_ack();
 195   2                  }             
 196   1           fb[i]=i2c_readbyte();
 197   1                      sendnot_ack();
 198   1                      i2c_stop();      
 199   1            return(1);
 200   1       }
 201          
 202          
 203          
 204           bit i2c_write(unsigned int address,unsigned char fb[],unsigned char su)//多字节写
 205           {
 206   1            unsigned char i;

⌨️ 快捷键说明

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