00xiaodong 发表于 2015-6-15 16:41:57

stm8 模拟i2c

我用stm8s105k4的IO模拟i2c协议,与MS9282通信。stm8是主机,MS9282是从机。
主机对从机读,能够从MS9282的寄存器读到数据,但是却不能对MS9282写数据,求大神指点。
另附代码:
void Write_16(ui addr,ui reg,ui data)
{
                                uc reg_h,reg_l,data_h,data_l;
      I2C_Start();
                               
      I2C_Write(addr);
      if(I2C_GetAck())
      {
                                        I2C_Stop();
      }
                               
                                reg_l=reg&0xff;
                                I2C_Write(reg_l);
                               if(I2C_GetAck())
      {
                                        I2C_Stop();
      }
                               
                                reg_h=reg>>8;
      I2C_Write(reg_h);
      if(I2C_GetAck())
      {
                                        I2C_Stop();
      }
                               
                                I2C_Start();
                               
                                I2C_Write(addr);
      if(I2C_GetAck())
      {
                                        I2C_Stop();
      }
                               
                                data_l=data&0xff;
                                I2C_Write(data_l);
      if(I2C_GetAck())
      {
                                        I2C_Stop();
      }
                               
                                data_h=data>>8;
                                I2C_Write(data_h);
      if(I2C_GetAck())
      {
                                        I2C_Stop();
      }
                               
      I2C_Stop();
}


ui Read_16(ui addr,ui reg)
{                               
                                ui dat;
                                uc reg_h,reg_l,data_h,data_l;
      I2C_Start();
      I2C_Write(addr);
      if(I2C_GetAck())
      {
                I2C_Stop();
      }
                                reg_l=reg&0xff;
                                I2C_Write(reg_l);
                               if(I2C_GetAck())
      {
                I2C_Stop();
      }
                                reg_h=reg>>8;
      I2C_Write(reg_h);

      if(I2C_GetAck())
      {
                I2C_Stop();
      }
                                I2C_Start();
                                I2C_Write(addr |=0x01);
      if(I2C_GetAck())
      {
                I2C_Stop();
      }
                                data_l=I2C_Read();
                                I2C_PutAck(0);
                                data_h=I2C_Read();
                                I2C_PutAck(1);
      I2C_Stop();
                                dat=(data_h<<8)|data_l;
                                return dat;
}

MCU之路 发表于 2015-6-16 11:41:27

没用过:)

alvin_ 发表于 2015-6-16 11:58:54

没用过,帮顶~不过,stm8自己没有I2C吗?

小蚂蚁快溜跑 发表于 2015-6-16 12:55:35

stm8有自己的I2C。。。不过写的应该没问题

ts2000 发表于 2015-6-16 14:00:24

能用模拟的。估计你写的时序不对。

00xiaodong 发表于 2015-6-16 17:43:08

回复各位:stm8有i2c,不过我板子上的单片机的i2c坏了,所以才采用模拟的。
我模拟的时序在同一块板子上能够对EEPROM进行读写(EEPROM是8位寄存器),而这个MS9282是16位寄存器,就是这点区别。

glacier 发表于 2017-8-7 16:35:40

那你可以上传一下9282的PDF我们才能看下你IIC是否正确
页: [1]
查看完整版本: stm8 模拟i2c