📄 i2c_c51.c
字号:
**
**----------------------------------------------------------------------------------------------------
** 作 者 : 严俊生
** 日 期 : 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 + -