I2C接收数据

123BMW666 2011-01-09 07:05:46
/*******************************************************************
ADC读字节数据函数
*******************************************************************/
unsigned char IRcvByte(unsigned char sla)
{ unsigned char c;

Start_I2c(); //启动总线
SendByte(sla+1); //发送器件地址
if(ack==0)return(0);
c=RcvByte(); //读取数据0

Ack_I2c(1); //发送非就答位
Stop_I2c(); //结束总线
return(c);
}
上面代码中sla代表是的我要读数据器件的地址
但是程序中却是SendByte(sla+1); //发送器件地址(查了网上都是这么写的)
后面为什么要加1啊?请懂的朋友给小弟解释下,感谢!!
...全文
181 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cokeliu 2011-01-10
  • 打赏
  • 举报
回复
LS正解, 读和写时候,最后一个位不一样
123BMW666 2011-01-10
  • 打赏
  • 举报
回复
谢谢各位,明白了。
lbing7 2011-01-10
  • 打赏
  • 举报
回复
读操作,通常需要先写入地址

虽然,整个操作是读,但是,地址却是先写进去的

所以。。。

具体的,可能看芯片手册中相应关于专属改动协议相关的内容
stratosphere607 2011-01-10
  • 打赏
  • 举报
回复
地址中的前七位是器件地址,最后一位是读写标志位。
zyzhang365 2011-01-09
  • 打赏
  • 举报
回复
读取操作指示位。slave addrress+R/~W, 读取时,从设备地址最后一位为‘1’;写时为‘0’.

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧