OpenEdv-开源电子网

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

IIC 关于发送低地址的问题

[复制链接]

12

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
237
金钱
237
注册时间
2016-6-26
在线时间
29 小时
发表于 2016-8-21 16:53:23 | 显示全部楼层 |阅读模式
5金钱
说明:  开发板:战舰V3

IIC_Send_Byte(ReadAddr%256);   //发送低地址
为什么发送低地址,要用求余啊!!!想不明白。

能给简单说一下吗,谢谢。


补充说明:
后面在调用这个函数的时候,ReadAddr==0。这个我能理解,但是当ReadAddr!=0 时,这里的地址岂不是很复杂。
360反馈意见截图16390410569484.jpg
360反馈意见截图16331204777792.jpg
360反馈意见截图16511006393630.jpg

最佳答案

查看完整内容[请看2#楼]

100%256为什么是390625? 数学怎么算的??? 100除以256得:商0,余数100; 所以100%256=100.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-8-21 16:53:24 | 显示全部楼层
zzsj1990 发表于 2016-8-22 15:51
http://wenku.baidu.com/link?url=qYvrbZfNIVvGGZwLX4hE1qw6V01fJU4zSgpS-PGnyFTsk25CAN_CAGl5Y6B-xyRVmT ...

100%256为什么是390625?

数学怎么算的???

100除以256得:商0,余数100;
所以100%256=100.
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-8-22 07:13:32 | 显示全部楼层
原子的这个代码支持AT24C01到AT24C256全系列的芯片,你要是想看懂这代码首先得把这些芯片的手册都看一遍,他们的寻址是有差异的。
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2016-8-22 09:25:57 | 显示全部楼层
对256求余,不知道为什么这么实现。
我想和 & 0xFF 是一个意思。就是取低8位。
小小蜗牛
回复

使用道具 举报

12

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
237
金钱
237
注册时间
2016-6-26
在线时间
29 小时
 楼主| 发表于 2016-8-22 12:32:39 | 显示全部楼层
xkwy 发表于 2016-8-22 07:13
原子的这个代码支持AT24C01到AT24C256全系列的芯片,你要是想看懂这代码首先得把这些芯片的手册都看一遍, ...

找了很多关于EEprom的资料,他们用的代码基本上都是正点原子这种形式,几乎没有差别。

而且也看到了24c01到24c256他们地址和存储空间上的不同。
可是,对兼容性的判断,不是在前面的判断语句中解决了吗???

还是不太理解,能告诉我查找那些资料吗?已经看了四天了,这一章内容仍旧有两个地方看不懂。
360反馈意见截图16591016586887.jpg
回复

使用道具 举报

12

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
237
金钱
237
注册时间
2016-6-26
在线时间
29 小时
 楼主| 发表于 2016-8-22 12:36:10 | 显示全部楼层
jiutianshenjian 发表于 2016-8-22 09:25
对256求余,不知道为什么这么实现。
我想和 & 0xFF 是一个意思。就是取低8位。

通过位运算,达到想要的结果,这个我能理解,

但是这里通过求余运算,达到实现发送低地址(从后面的代码感觉更像一系列地址中最开头的那个地址,)的目的,我还是不能理解其本质。

能说的详细一点吗?
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2016-8-22 14:19:00 | 显示全部楼层
本帖最后由 jiutianshenjian 于 2016-8-22 14:43 编辑

我英文不好,大概看了下手册,按照手册写出来的程序应该就是那样吧。
16K以下都是8位地址,那最大区分256个,而4K就需要512个。应该是分成2个256字节的页,前面的处理就是区分用的哪个页吧.对256取余应该就是拿出这个页内的地址。
大于16K都是16位地址,那可以表示65536个地址,那512K以下都够用了。用不着前面来区分了吧。
你有中文手册吗?上传一个。
小小蜗牛
回复

使用道具 举报

12

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
237
金钱
237
注册时间
2016-6-26
在线时间
29 小时
 楼主| 发表于 2016-8-22 15:51:44 | 显示全部楼层
jiutianshenjian 发表于 2016-8-22 14:19
我英文不好,大概看了下手册,按照手册写出来的程序应该就是那样吧。
16K以下都是8位地址,那最大区分256 ...

http://wenku.baidu.com/link?url= ... yS4wvKVCjRXzoSOQccu

这里应该存储器结构。

我虽然也是做控制的,但是搞得是内模控制这种纯理论。开始真正碰C语言和计算机才刚刚四个月(本科期间为了应付考试,不算)
真看不懂手册上说的什么。

补充说明:
我这里的型号是24c02 容量2k
如果我想从eeprom中的第100个地址开始读取数据,那么我的ReadAddr应该填写什么值!
如果填写100的话,100%256=390625,这个能是我想读的地址吗???

只帮我看看24c02的运作机理就行,十分感谢!!!
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2016-8-22 16:18:58 | 显示全部楼层
看不懂
回复

使用道具 举报

12

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
237
金钱
237
注册时间
2016-6-26
在线时间
29 小时
 楼主| 发表于 2016-8-22 17:00:10 | 显示全部楼层



还是谢谢你。

暂时我也不指望能看懂这个知识点了,超过我现在的知识水平。先放放。

回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-8-23 04:14:40 | 显示全部楼层
zzsj1990 发表于 2016-8-22 12:36
通过位运算,达到想要的结果,这个我能理解,

但是这里通过求余运算,达到实现发送低地址(从后面的代 ...

原来你的疑惑点在这啊,这是C语言数值运算的基本功啊。

(var/256)与(var>>8)这两个表达式无条件等价。
(var%256)与(var&0xFF)也是无条件等价的。

你如果想不通的话就试试(var%16)与(var>>4),多找些测试数,对比一下两者计算结果为什么相同。
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

12

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
237
金钱
237
注册时间
2016-6-26
在线时间
29 小时
 楼主| 发表于 2016-8-23 15:11:40 | 显示全部楼层
xkwy 发表于 2016-8-23 04:14
原来你的疑惑点在这啊,这是C语言数值运算的基本功啊。

(var/256)与(var>>8)这两个表达式无条件等价。 ...

厉害,一语点醒

谢谢。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-30 13:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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