完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
//I2C读取一个字节
u8 I2C_Read_Byte(u8 ack) { u8 i=0,receive=0; I2C_SDA_IN(); for(i=0;i<8;i++) { I2C_SCL_L; delay_us(2); I2C_SCL_H; receive<<=1; if(GPIO_ReadInputDataBit(GPIO_I2C,I2C_SDA)) receive++; delay_us(1); } if(ack==0) I2C_NAck(); else I2C_Ack(); return receive; } |
|
相关推荐
8个回答
|
|
|
正好刚用过iic。
1.移位是必须的,因为数据是一位一位发的,至于左移还是右移完全取决于发送时候的字节是高位在前还是低位在前。 2.我看到的iic协议里应答也是必须的,像你这样接收数据,发数据的设备如果是采取的iic协议的话那么数据位后面一定跟着一个应答位,如果不接受应答,那么这一位可能会当成数据位接收,那么数据肯定是不对的。
最佳答案
|
|
|
|
|
|
这个要根据IIC的协议来操作
|
|
|
|
|
|
一次接受一个位,你想用一个字节的话那肯定要左移一次接受一次,+1其实就是 | 0x01.应答是IIC的通讯协议,你也可以选择不应答
|
|
|
|
|
|
先好好看看I2C协议吧,看一句对一句代码,很好理解的。
|
|
|
|
|
zhxing001 发表于 2016-5-31 14:58 能否给说一下,为什么要根据I2C_SDA使receive++ |
|
|
|
|
|
不是很懂你的问题? 大概是根据sda的电平去决定RECEIVE的取值? 因为SDA是数据位,所以理应如此。 |
|
|
|
|
|
谢谢。。。。。 |
|
|
|
|
|
谢谢。。。。。 |
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
919 浏览 0 评论
797 浏览 0 评论
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
4560 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
3369 浏览 1 评论
stm32用fsmc读取ad7606采集数据,数据不变,只有开发版复位才更新数据
2672 浏览 0 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-10 19:48 , Processed in 0.841562 second(s), Total 87, Slave 70 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
4113