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

📄 iic.lst

📁 自己写的测试程序,调试已通过,可以直接使用, 而且有的还有详细的注释.红外采集器软件
💻 LST
字号:
C51 COMPILER V7.08   IIC                                                                   06/13/2007 16:48:12 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE IIC
OBJECT MODULE PLACED IN iic.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE iic.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          #include<w78e58b.h>
   3          #include<intrins.h>
   4          
   5          sbit sdata=P1^7;
   6          sbit sclock=P1^6;
   7           
   8          /********************* iic delay time function ************************/
   9          void delay_iic(void)
  10          {
  11   1          int i;
  12   1       for(i=0;i<400;i++)
  13   1        {;}
  14   1       }
  15          /********************* iic wait function  *******************************/
  16          void iic_wait(void)
  17          {
  18   1        _nop_();
  19   1        _nop_();
  20   1        _nop_();
  21   1        _nop_();
  22   1        _nop_();
  23   1        _nop_();
  24   1        _nop_();
  25   1        _nop_();
  26   1        _nop_();
  27   1        _nop_();
  28   1        _nop_();
  29   1        _nop_();
  30   1        _nop_();
  31   1        _nop_();
  32   1        _nop_();
  33   1        _nop_();
  34   1        _nop_();
  35   1        _nop_();
  36   1        _nop_();
  37   1        _nop_();
  38   1        _nop_();
  39   1        _nop_();
  40   1        _nop_();
  41   1        _nop_();
  42   1       }
  43          /***************   iic start function   ******************************/
  44          void iic_start(void)
  45           {
  46   1        sdata=1;
  47   1        sclock=1;
  48   1        iic_wait();
  49   1        sdata=0;
  50   1        iic_wait();
  51   1        sclock=0;
  52   1        }
  53          /****************  iic stop function  ********************************/
  54          void iic_stop(void)
  55          {
C51 COMPILER V7.08   IIC                                                                   06/13/2007 16:48:12 PAGE 2   

  56   1       sdata=0;
  57   1       sclock=0;
  58   1        iic_wait();
  59   1       sclock=1;
  60   1        iic_wait();
  61   1        sdata=1;
  62   1       }
  63          /****************  send ask  ****************************************/
  64          void iic_ask(void)
  65           {
  66   1       sdata=0;
  67   1       iic_wait();
  68   1       sclock=1;
  69   1       iic_wait();
  70   1        sclock=0;
  71   1       }
  72          /***************  send no ask ******************************************/
  73          void iic_no_ask(void)
  74          {
  75   1       sdata=1;
  76   1       iic_wait();
  77   1       sclock=1;
  78   1       iic_wait();
  79   1       sclock=0;
  80   1       }
  81          /*************** iic wait ack *****************************************/
  82          bit iic_wait_ask(void)
  83           {
  84   1         unsigned char error_times=250;
  85   1         sdata=1;
  86   1         iic_wait();
  87   1         sclock=1;
  88   1         iic_wait();
  89   1         while(sdata)
  90   1         {
  91   2           error_times--;
  92   2           if(!error_times)
  93   2             return(0);
  94   2           }
  95   1         sclock=0;
  96   1         return(1);
  97   1       }
  98          /*****************  iic send byte *******************************************/
  99          void iic_send_byte(unsigned char sbyte)
 100          {
 101   1       unsigned char i=8;
 102   1       while(i--)
 103   1         {
 104   2           sclock=0;
 105   2           _nop_();
 106   2           sdata=(bit)(sbyte&0x80);
 107   2           sbyte<<=1;
 108   2           iic_wait();
 109   2           sclock=1;
 110   2           iic_wait();
 111   2           }
 112   1       sclock=0;
 113   1        }
 114          /******************* iic receive byte ********************************/
 115          unsigned char iic_receive_byte(void)
 116          {
 117   1       unsigned char i=8;
C51 COMPILER V7.08   IIC                                                                   06/13/2007 16:48:12 PAGE 3   

 118   1       unsigned char ddata=0;
 119   1       sdata=1;
 120   1      while(i--)
 121   1        {
 122   2          ddata<<=1;
 123   2          sclock=0;
 124   2          iic_wait();
 125   2          sclock=1;
 126   2          iic_wait();
 127   2          sclock=1;
 128   2          iic_wait();
 129   2          ddata|=sdata;
 130   2         }
 131   1         sclock=0;
 132   1        return(ddata); 
 133   1       }
 134          /*******************  write iic data(n byte) to address ************************/
 135          void write_iic_data(unsigned char iic_page,unsigned char write_data[],unsigned char address,unsigned char 
             -num)
 136          {
 137   1       unsigned char n;
 138   1        iic_start();
 139   1        iic_send_byte(0xa0);
 140   1        iic_wait_ask();
 141   1        iic_send_byte(iic_page);               // 24c64 address 12 bit
 142   1        iic_wait_ask();
 143   1        iic_send_byte(address);
 144   1        iic_wait_ask();
 145   1        for(n=0;n<num;n++)
 146   1        {
 147   2         iic_send_byte(write_data[n]);
 148   2         iic_wait_ask();
 149   2         }
 150   1       iic_stop();
 151   1       }
 152          /********************* read iic data(n byte) to address **********************/
 153          void read_iic_data(unsigned char iic_page,unsigned char read_data[],unsigned char address,unsigned char nu
             -m)
 154          {
 155   1       unsigned char n;
 156   1       unsigned char *p;
 157   1       p=read_data;
 158   1       iic_start();
 159   1       iic_send_byte(0xa0);
 160   1       iic_wait_ask();
 161   1       iic_send_byte(iic_page);
 162   1       iic_wait_ask();
 163   1       iic_send_byte(address);
 164   1       iic_wait_ask();
 165   1       iic_start();
 166   1       iic_send_byte(0xa1);
 167   1       iic_wait_ask();
 168   1       for(n=0;n<num;n++)
 169   1       { 
 170   2         *p=iic_receive_byte();
 171   2         p++;
 172   2         if(n!=(num-1))
 173   2         {
 174   3          iic_ask();
 175   3         }
 176   2        }
 177   1       iic_no_ask();
C51 COMPILER V7.08   IIC                                                                   06/13/2007 16:48:12 PAGE 4   

 178   1       iic_stop();
 179   1      
 180   1       }
 181          
 182               
 183           


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