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

📄 i2c_c51.c

📁 RA8806底层驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
**
**----------------------------------------------------------------------------------------------------
** 作 者  : 严俊生
** 日 期  : 2007-07-15
**----------------------------------------------------------------------------------------------------
** 修改人  :
** 日 期  :					
******************************************************************************************************/
#if ISendByte_EN
 bit ISendByte(uchar sla,uchar c)
 {
   Start_I2c();               //启动总线
   SendByte(sla);             //发送器件地址
   if(ack==0)return(0);
   SendByte(c);               //发送数据
   if(ack==0)return(0);
   Stop_I2c();                //结束总线 
   return(1);
 }
#endif  
/*****************************************************************************************************
**                    向有子地址器件发送多字节数据函数               
** 函数原型: bit  ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);  
** 功    能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件地址sla,子地址suba,发送内容
             是s指向的内容,发送no个字节。如果返回1表示操作成功,否则操作有误。
** 入口参数:sla  器件从地址
             suba 器件子地址
			 s    要发送的数据的首地址
			 no   要发送的数据的长度 
** 返回参数:操作成功与否标志
** 注    意:使用前必须已结束总线。	
**
**----------------------------------------------------------------------------------------------------
** 作 者  : 严俊生
** 日 期  : 2007-07-15
**----------------------------------------------------------------------------------------------------
** 修改人  :
** 日 期  :					
******************************************************************************************************/
#if ISendStr_EN
 bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
 {  uchar i;
   Start_I2c();               //启动总线
   SendByte(sla);             //发送器件地址
   if(ack==0)return(0);
   SendByte(suba);            //发送器件子地址
   if(ack==0)return(0);	
   for(i=0;i<no;i++)
   {   
     SendByte(*s);            //发送数据
     if(ack==0)return(0);
     s++;
   } 
   Stop_I2c();                //结束总线
   return(1);
 }
#endif

/*********************************************************************************************************
**                    向无子地址器件发送多字节数据函数               
** 函数原型: bit  ISendStrExt(uchar sla,ucahr *s,uchar no);  
** 功    能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件地址sla,发送内容是s指向的内容,
             发送no个字节。如果返回1表示操作成功,否则操作有误。
** 入口参数:sla  器件从地址
			 s    要发送的数据的首地址
			 no   要发送的数据的长度 
** 返回参数:操作成功与否标志
** 注    意:使用前必须已结束总线。
**
**----------------------------------------------------------------------------------------------------
** 作 者  : 严俊生
** 日 期  : 2007-07-15
**----------------------------------------------------------------------------------------------------
** 修改人  :
** 日 期  :					
*********************************************************************************************************/
#if ISendStrExt_EN
 bit ISendStrExt(uchar sla,uchar *s,uchar no)
 {
   uchar i;

   Start_I2c();               //启动总线 
   SendByte(sla);             //发送器件地址 
   if(ack==0)return(0);

   for(i=0;i<no;i++)
   {   
     SendByte(*s);            //发送数据 
     if(ack==0)return(0);
     s++;
   } 
   Stop_I2c();                //结束总线  
   return(1);
 }
#endif
    /**=================== 以下为读程序 ======================**/

/*********************************************************************************************************
**                    向无子地址器件读字节数据函数               
** 函数原型: bit  IRcvByte(uchar sla,ucahr *c);  
** 功    能: 从启动总线到发送地址,读数据,结束总线的全过程,从器件地址sla,返回值在c.
             如果返回1表示操作成功,否则操作有误。
** 入口参数:sla 器件从地址
             c   需要向器件中要接受的字节数据
** 返回参数:操作成功与否标志
** 注    意:使用前必须已结束总线。
**
**----------------------------------------------------------------------------------------------------
** 作 者  : 严俊生
** 日 期  : 2007-07-15
**----------------------------------------------------------------------------------------------------
** 修改人  :
** 日 期  :					
**********************************************************************************************************/
#if IRcvByte_EN
 bit IRcvByte(uchar sla,uchar *c)
 {
   Start_I2c();                //启动总线 
   SendByte(sla+1);            //发送器件地址 
   if(ack==0)return(0);
   *c=RcvByte();               //读取数据 
   Ack_I2c(1);                 //发送非就答位 
   Stop_I2c();                 //结束总线  
   return(1);
 }
#endif
/********************************************************************************************************
**                    向有子地址器件读取多字节数据函数               
** 函数原型: bit  ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);  
** 功    能: 从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件地址sla,子地址suba,读出的内容
             放入s指向的存储区,读no个字节。如果返回1表示操作成功,否则操作有误。
** 入口参数:sla  器件从地址
             suba 器件子地址
			 s    从I2C总线上读取后存放数据区的首地址
			 no   要读取数据的长度 
** 返回参数:操作成功与否标志
** 注    意:使用前必须已结束总线。
**
**----------------------------------------------------------------------------------------------------
** 作 者  : 严俊生
** 日 期  : 2007-07-15
**----------------------------------------------------------------------------------------------------
** 修改人  :
** 日 期  :					
*********************************************************************************************************/
#if IRcvStr_EN 
 bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)
 {
   uchar i;

   Start_I2c();                  //启动总线
   SendByte(sla);                //发送器件地址
   if(ack==0)return(0);
   SendByte(suba);               //发送器件子地址
   if(ack==0)return(0);

   Start_I2c();			         //重新启动总线
   SendByte(sla+1);
   if(ack==0)return(0);
   for(i=0;i<no-1;i++)
   {   
     *s=RcvByte();               //发送数据 
      Ack_I2c(0);                //*发送就答位   
     s++;
   } 
   *s=RcvByte();
   Ack_I2c(1);                   //发送非应位 
   Stop_I2c();                   //结束总线  
   return(1);
 }
#endif

/*********************************************************************************************************
**                    向无子地址器件读取多字节数据函数               
** 函数原型: bit  ISendStrExt(uchar sla,ucahr *s,uchar no);  
** 功    能: 从启动总线到发送地址,读数据,结束总线的全过程.从器件地址sla,读出的内容放入s指向的存储区,
             读no个字节。如果返回1表示操作成功,否则操作有误。
** 入口参数:sla  器件从地址
             suba 器件子地址
			 s    从I2C总线上读取后存放数据区的首地址
			 no   要读取数据的长度 
** 返回参数:操作成功与否标志
** 注意:    使用前必须已结束总线。 
**
**----------------------------------------------------------------------------------------------------
** 作 者  : 严俊生
** 日 期  : 2007-07-15
**----------------------------------------------------------------------------------------------------
** 修改人  :
** 日 期  :					
**********************************************************************************************************/
#if IRcvStrExt_EN
 bit IRcvStrExt(uchar sla,uchar *s,uchar no)
 {
   uchar i;

   Start_I2c();
   SendByte(sla+1);
   if(ack==0)return(0);

   for(i=0;i<no-1;i++)
   {   
      *s=RcvByte();               /*发送数据*/
      Ack_I2c(0);                 /*发送就答位*/  
      s++;
   } 
   *s=RcvByte();
   Ack_I2c(1);                    /*发送非应位*/
   Stop_I2c();                    /*结束总线*/ 
   return(1);
 }
#endif

⌨️ 快捷键说明

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