OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11407|回复: 4

I2C总线中是如何实现读一个字节的?

[复制链接]

12

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-8-19
在线时间
0 小时
发表于 2013-8-24 21:29:16 | 显示全部楼层 |阅读模式
I2C总线中是如何实现读一个字节的?
例如mcu要从某器件中读一个字节 
如下一段程序
uchar readbyte()
{
    uchar i,k;
    scl=0;
    delay();
    sda=1;
    for(i=0;i<8;i++)
{    
    scl=1;
    delay();
    k=(k<<1)|sda;
    scl=0;
    delay();
  }
   delay();
   return k;
 }
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2013-8-24 23:55:18 | 显示全部楼层
这样写确实有点难看懂,通过读sda、、、
uchar readbyte()
{
    uchar i,k;
    scl=0;
    delay();
    sda=1;
    for(i=0;i<8;i++)
{    
    scl=1;
    delay();
    k<<=1;
   if(sda==1){
    k |=1;
}
    scl=0;
    delay();
  }
  delay();
   return k;
 }
这样写懂了么?
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

12

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-8-19
在线时间
0 小时
 楼主| 发表于 2013-8-25 12:15:37 | 显示全部楼层
回复【2楼】xiaoyan:
---------------------------------
谢谢您! 有一点小问题  k的初始默认值是0x00吗?
回复 支持 反对

使用道具 举报

12

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-8-19
在线时间
0 小时
 楼主| 发表于 2013-8-25 12:27:56 | 显示全部楼层
回复【2楼】xiaoyan:
---------------------------------
还有 sda上的数据是如何实现一位一位的赋给k的呢?我开始自学 这里想不太清楚 还希望您能说的细一些。不胜感激
回复 支持 反对

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2013-8-25 19:52:12 | 显示全部楼层
回复【4楼】abcyyjjkk:
---------------------------------
1、k的初始默认值是0x00。
2、通过判断sda的高低电平。
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-14 16:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表