关于I2C的读写问题

2019-07-15 11:23发布

下面两个程序都是关于I2C的写数据程序,为什么第二个程序就不行呢??


第一个程序:void Write_A_Byte(uchar b) //向 24C16 中写一字节数据
{
uchar i;
for(i=0;i<8;i++)
{
b<<=1;
SDA=CY;
_nop_();
SCL=1;
NOP4();
SCL=0;
}
Read_ACK();
}        

第二个程序:void  Write_A_Byte(uchar dat) //写一个字节
{
  uchar i;
  uchar temp;
  temp=dat;
  SCL=0;   //释放时钟信号  让数据总线变化
  for(i=0;i<8;i++)
  {
    if(temp&0x80)
      SDA=1;
    else
      SDA=0;  
    //SCL=1;
    temp<<=1;
        NOP4();
    SCL=1;
        NOP4();
  }  
  SDA = 1;
  NOP4();
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
人中狼
1楼-- · 2019-07-15 12:29
用第一段程序代替这段能成功吗,sda和slk引脚有接上拉电阻吗,现在这段程序应该可以了,另外在末尾有加Read_ACK();吗,加了的话,应该和第一段程序没什么区别了 最佳答案
人中狼
2楼-- · 2019-07-15 14:24
第二个程序在发送完一位数据后,scl没置0,却置了1,手误吧。
米高-佐敦
3楼-- · 2019-07-15 19:09
 精彩回答 2  元偷偷看……
米高-佐敦
4楼-- · 2019-07-15 22:15
顶一个………………
人中狼
5楼-- · 2019-07-15 22:50
if(temp&0x80)
      SDA=1;
    else
      SDA=0;  
在这加一个NOP4();试试
    SCL=1;
    temp<<=1;
        NOP4();
    SCL=0;
        NOP4();
另外你如何判断写入是否成功呢
米高-佐敦
6楼-- · 2019-07-15 22:56
人中狼 发表于 2017-4-11 10:44
if(temp&0x80)
      SDA=1;
    else

还是不行,我是用24c04在仿真软件上仿真的

一周热门 更多>