at24c16中指定地址写入一个数据的疑问

2019-12-31 19:18发布

  1. //在AT24CXX指定地址写入一个数据
  2. //WriteAddr  :写入数据的目的地址   
  3. //DataToWrite:要写入的数据
  4. void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
  5. {                                                                                                                                                                                          
  6.         IIC_Start();  
  7.         IIC_Send_Byte(0XA0+((WriteAddr/256)<<1));   //发送器件地址0XA0,写数据          
  8.         IIC_Wait_Ack();          
  9.         IIC_Send_Byte(WriteAddr%256);   //发送低地址
  10.         IIC_Wait_Ack();                                                                                                              
  11.         IIC_Send_Byte(DataToWrite);     //发送字节                                                          
  12.         IIC_Wait_Ack();                                
  13.         IIC_Stop();//产生一个停止条件
  14.         delay_ms(10);         
  15. }
复制代码为什么这句代码后面里面addr为什么需要除以256然后这边移动一位IIC_Send_Byte(0XA0+((WriteAddr/256)<<1));   //发送器件地址0XA0,写数据

捕获.PNG (32.37 KB, 下载次数: 0) 下载附件 2013-3-8 10:46 上传



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
zhousm
1楼-- · 2019-12-31 21:00
(WriteAddr/256)<<1 是页地址里的P0吧
xyz2008
2楼-- · 2020-01-01 01:04
楼主能否把你的    IIC程序包 传上来参考一下
Rookie_huang
3楼-- · 2020-01-01 05:55
上海
4楼-- · 2020-01-01 09:11
除258取页地址前三位,左移一位,把最右边以为空出来用于表示对从器件是读还是写,分别|1,&0实现。
robincui
5楼-- · 2020-01-01 11:28
 精彩回答 2  元偷偷看……

一周热门 更多>