This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

msp430 IO口模拟I2C 这两句代码是什么意思 ?



msp430 IO口模拟I2C 这两句代码是什么意思 ?

/*******************************************
函数名称:Write_NByte
功    能:向EEPROM中写入N个字节的数据
参    数:outbuf--指向写入数据存放首地址的指针
          n--数据个数,最大不能超过8,由页地址
             决定其最大长度
          dataaddress--数据写入的首地址
返回值  :写入结果:1--成功,0--失败
********************************************/
/*******************************************
函数名称:Read_1Byte_Randomaddress
功    能:从EEPROM的指定地址读取1个字节的数据
参    数:dataaddress--数据读取的地址
返回值  :读取的数据
********************************************/
  if(Write_NByte(wbuffer,8,0x08)) //从第1页的第0个字节起连续写8个数据
        flag = 3;
   
    _NOP();     //在此设置断点观察flag
   
    if(Read_NByte_Randomaddress(rbuffer,8,0x08))//从第1页的第0个字节起连续读8个数据
        flag = 4;
   
    _NOP();     //在此设置断点观察rbuffer的值



为什么0x08是从第零个字节?
如果想把rbuffer数组存到另外一个数组地址中,将0x08换成什么?  
 
 
这样写对吗 ? Write_NByte(wbuffer[n],8,table[n])
  • 好好看看c语言,会比别人跟你说的效果好,这是最基本的东西

  • 一般 EEPROM 都有页操作限制,即PAGE,一个PAGE一般是4,8,16字节大小. 在页面内写操作只需要一次写等待周期。

    楼上的代码中08位置是PAGE1的起始地址,0-07是PAGE0,8-15是PAGE1;

    关于EEPROM的PAGE操作需要注意的是,当跨页操作时,需要分两次写,否则会覆盖第一个页面的前面几个字节。

    例如如果要写05-09地址,需要分两次操作,先写05-07,然后在写08-09。在实际应用中,我们定义数据时尽量把同一个属性的数据定义到一个页面内。

    更多的关于EEPROM的页操作,请参见具体芯片的数据手册。

  • 这个和C语言一点关系都没有.

  • 楼主的函数看起来应该是EEPROM的page访问模式,但是估计写的不够严谨,存在操作局限;

    因此这个函数只能操作从page地址0开始写入的操作,最多可以写8Byte,也就是page大小;

    因为楼主在函数调用时参数中数据长度为8,所以开始地址必须为0,否则就循环覆盖了。