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

📄 i2ceeprom.lst

📁 基于 PLC935单片机的三相漏电检测系统
💻 LST
字号:
C51 COMPILER V8.05a   I2CEEPROM                                                            11/26/2007 12:48:20 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE I2CEEPROM
OBJECT MODULE PLACED IN I2CEEPROM.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE I2CEEPROM.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include"Reg935.h"
   2          #include"UserDef.h"
   3          
   4          /*******************************************************************
   5          *                  申请总线
   6          * 功能: 进行I2C总线的初始化----包括时钟选择,
   7                           I2C使能,发送起始信号等等。
   8          *        I2EN为1,设置为主机;
   9                           CRSEL位为0,使用内部SCL发生器
  10          *******************************************************************/
  11          
  12          void GetBus()
  13          { 
  14   1              I2SCLH = 15;                                // 设置SCL高电平的PCLK周期数
  15   1              I2SCLL = 15;                            //设置SCL低电平的PCLK周期数,6MHz 时为100Kbit/S 
  16   1                      
  17   1          //申请成为主机,起动总线。使用内部SCL发生器,I2EN 和AA 置位
  18   1              I2CON = RELEASE_BUS_STA;                //I2CON = 0110 0100B = 0x64
  19   1              while( SI==0 );                         // 等待起始位的发送
  20   1      }
  21          
  22          
  23          /*******************************************************************
  24          *                    发送数据函数
  25          * 功能:用于向总线发送数据 
  26          * 入口参数:C   待发送的数据                   
  27          *******************************************************************/
  28          
  29          void SendByte(uchar c)
  30          { 
  31   1              I2DAT = c;
  32   1              I2CON = RELEASE_BUS_ACK;                        //I2CON = 0100 0100B = 0x44 ,清除SI位等等
  33   1              while( SI==0 );                                         // 等待数据的发送
  34   1      }
  35          
  36          
  37          /*******************************************************************
  38          *                    向有子地址器件发送多字节数据函数                 
  39          * 功能:从启动总线到发送地址,子地址,数据,结束总线的全过程。
  40          * 入口参数:    slvAddr--  从器件地址
  41          *              subAddr--  子地址(从器件装载数据的地址)
  42          *              s  --      发送内容的指针
  43          *              num--      发送字节数
  44          * 出口参数:   返回1 表示操作成功,否则操作有误。
  45          ********************************************************************/
  46          
  47          bit ISendStr(uchar slvAddr, uint subAddr, uchar *s, uchar num)
  48          { 
  49   1              uchar i;
  50   1              uchar subAddrH, subAddrL;
  51   1      
  52   1              subAddrL = (subAddr & 0x00FF);
  53   1              subAddrH = (subAddr & 0xFF00)>>8;
  54   1      
  55   1              GetBus();                                               //启动总线  
C51 COMPILER V8.05a   I2CEEPROM                                                            11/26/2007 12:48:20 PAGE 2   

  56   1              
  57   1              SendByte(slvAddr & WRITE_DATA_COM);     //发送器件地址,WRITE_DATA_COM = 0 写控制
  58   1      
  59   1              if( I2STAT!=0x18 )                                      //已发送器件地址和写信号,并已接收应答信号
  60   1              { 
  61   2                      I2CON = GENERATE_STOP;
  62   2              return(0);
  63   2              }
  64   1      
  65   1              SendByte(subAddrH);                         //发送器件子地址高位
  66   1              if( I2STAT!=0x28 )                                      //已发送数据,并已接收应答信号
  67   1              { 
  68   2                      I2CON = GENERATE_STOP;                          //I2CON = 0101 0100B = 0x54 ,产生停止信号
  69   2              return(0);
  70   2              }
  71   1      
  72   1              SendByte(subAddrL);                         //发送器件子地址低位
  73   1              if( I2STAT!=0x28 )                                      //已发送数据,并已接收应答信号
  74   1              { 
  75   2                      I2CON = GENERATE_STOP;                          //I2CON = 0101 0100B = 0x54 ,产生停止信号
  76   2              return(0);
  77   2              }
  78   1              
  79   1              for(i=0; i<num; i++)
  80   1              { 
  81   2                      SendByte(*s);                                   //发送数据
  82   2              if(I2STAT!=0x28)                        //已发送数据,并已接收应答信号
  83   2                      { 
  84   3                              I2CON = GENERATE_STOP;                  //I2CON = 0101 0100B = 0x54 ,产生停止信号
  85   3                              return(0);
  86   3                      }
  87   2              s++;
  88   2              } 
  89   1      
  90   1              I2CON = GENERATE_STOP;                          // 结束总线     
  91   1              return(1);
  92   1      }
  93          
  94          
  95          /*******************************************************************
  96          *                    向有子地址器件读取多字节数据函数                
  97          *功能:从启动总线到发送地址,子地址,读数据,结束总线的全过程。
  98          *入口参数:slvAddr--从器件地址
  99          *          subAddr--子地址(从器件装载数据的地址)
 100          *                  s    --  读出的内容存储区的指针
 101          *          num--        读num个字节。
 102          *出口参数:函数返回1表示操作成功,否则操作有误。
 103          ********************************************************************/
 104          
 105          bit IRcvStr(uchar slvAddr, uint subAddr, uchar *s, uchar num)
 106          { 
 107   1              uchar i;
 108   1              uchar subAddrH, subAddrL;
 109   1      
 110   1              subAddrL = (subAddr & 0x00FF);
 111   1              subAddrH = (subAddr & 0xFF00)>>8;
 112   1      
 113   1              GetBus();                                               //启动总线              
 114   1              
 115   1              SendByte(slvAddr & WRITE_DATA_COM);     //发送器件地址
 116   1              if( I2STAT!=0X18)                                           //已发送器件地址和写信号,并已接收应答信号
 117   1              { 
C51 COMPILER V8.05a   I2CEEPROM                                                            11/26/2007 12:48:20 PAGE 3   

 118   2                      I2CON = GENERATE_STOP;                      //I2CON = 0101 0100B = 0x54 ,产生停止信号
 119   2              return(0);
 120   2              }
 121   1              
 122   1              SendByte(subAddrH);                             //发送器件子地址高位    
 123   1              if( I2STAT!=0X28 )                                          //已发送数据,并已接收应答信号
 124   1              { 
 125   2                      I2CON = GENERATE_STOP;                          //I2CON = 0101 0100B = 0x54 ,产生停止信号
 126   2              return(0);
 127   2              }
 128   1      
 129   1              SendByte(subAddrL);                             //发送器件子地址低位    
 130   1              if( I2STAT!=0X28 )                                          //已发送数据,并已接收应答信号
 131   1              { 
 132   2                      I2CON = GENERATE_STOP;                          //I2CON = 0101 0100B = 0x54 ,产生停止信号
 133   2              return(0);
 134   2              }
 135   1      
 136   1              I2CON = RELEASE_BUS_STA;                            //I2CON = 0110 0100B = 0x64 ,重新启动总线   
 137   1              while( SI==0 );
 138   1              
 139   1              SendByte(slvAddr | READ_DATA_COM);              //发送读数据信号
 140   1              
 141   1              if( I2STAT!=0X40 )                                          //已发送器件地址和读信号,并已接收应答信号
 142   1              { 
 143   2                      I2CON = GENERATE_STOP;                          //I2CON = 0101 0100B = 0x54 ,产生停止信号
 144   2              return(0);
 145   2              } 
 146   1         
 147   1              for(i=0; i<num-1; i++)
 148   1              { 
 149   2                      I2CON = RELEASE_BUS_ACK;                    //I2CON = 0100 0100B = 0x44 ,接收一字节数据并发送应答位
 150   2              while( SI==0 );                             //等待接收数据
 151   2                                                              
 152   2              if( I2STAT!=0X50 )                                  //已接收数据字节,已返回应答信号
 153   2                      {       
 154   3                              I2CON = GENERATE_STOP;              //I2CON = 0101 0100B = 0x54 ,产生停止信号
 155   3                              return(0);
 156   3                      }
 157   2              *s = I2DAT;                                 //读取数据
 158   2              } 
 159   1              
 160   1          s++;
 161   1              I2CON = RELEASE_BUS_NOACK;                  //I2CON = 0100 0000B = 0x40 ,接收最后一字节数据并发送非应答位
 162   1              while( SI==0 );  
 163   1              *s = I2DAT;
 164   1              I2CON = GENERATE_STOP;                              //结束总线                  
 165   1              return(1);
 166   1              
 167   1      }
 168          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    235    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      16
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.

C51 COMPILER V8.05a   I2CEEPROM                                                            11/26/2007 12:48:20 PAGE 4   


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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