欢迎光临散文网 会员登陆 & 注册

单片机应用实践篇之单片机IO模拟I2C总线时序按页写24C02并显示在LC...

2023-07-26 19:25 作者:无数碎片寻你  | 我要投稿

问:if(addr&Page_bye==0) 看不懂这个, 如何判断出写了八个字节呢


答:这一行代码中的 if(addr&Page_bye==0) 是用来判断是否已经写入了8个字节。addr 是当前写入的地址,Page_bye 是一个宏变量,其值为 0x07。& 是按位与运算符,它将 addr 和 Page_bye 的二进制表示进行按位与运算。

由于 Page_bye 的值为 0x07,它的二进制表示为 00000111。当 addr 的二进制表示的最后三位都为0时,addr & Page_bye 的结果为0。这意味着 addr 是8的倍数,即已经写入了8个字节。

因此,当 addr & Page_bye == 0 时,意味着已经写入了8个字节,此时会退出内循环并开始写入下一页的数据。


问:那么 addr的初值, 是不是有限制了,

答:是的,addr 的初始值会影响这个函数的行为。addr 是函数的第二个参数,表示要写入数据的起始地址。如果 addr 的初始值不是8的倍数,那么第一次写入数据时不会写满8个字节。

例如,如果 addr 的初始值为3,那么第一次写入数据时只会写入5个字节(地址3、4、5、6和7),然后退出内循环并开始写入下一页的数据。这是因为当 addr 增加到8时,addr & Page_bye == 0 为真,导致退出内循环。

因此,如果您希望每次都写满8个字节,那么应该确保 addr 的初始值是8的倍数。


问:if(addr&Page_bye==0) 这样做, 是不是相当于 分页了, 因为这完全是把 256 分成 每页为 8个字节, 然后很巧妙的 , 按照这个去写入每页, 而不是 8 个必须凑成所谓的一页 , 而是根据256 这个进行写入

答:是的,这个函数会按照页大小(即8个字节)来写入数据。addr & Page_bye == 0 这个条件用来判断是否已经写满了一页。当这个条件为真时,意味着已经写满了一页,此时会退出内循环并开始写入下一页的数据。

这样做可以确保每次写入的数据都是按照页大小对齐的。这对于某些I2C设备来说是很重要的,因为它们要求写入数据时必须按照页大小对齐。

当然,这并不意味着每次都必须写满一页。如果要写入的数据不足一页,那么函数会正常写入数据并返回。只有当要写入的数据超过一页时,才会按照页大小对齐来写入数据。


单片机应用实践篇之单片机IO模拟I2C总线时序按页写24C02并显示在LC...的评论 (共 条)

分享到微博请遵守国家法律