OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4336|回复: 1

IIC通信时序问题请教

[复制链接]

6

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-3-21
在线时间
0 小时
发表于 2014-3-26 15:09:19 | 显示全部楼层 |阅读模式
void IIC_Send_Byte(u8 txd)
{                       
    u8 t;  
 SDA_OUT();     
    IIC_SCL=0;//拉低时钟开始数据传输
    for(t=0;t<8;t++)
    {             
        //IIC_SDA=(txd&0x80)>>7;
  if((txd&0x80)>>7)
   IIC_SDA=1;
  else
   IIC_SDA=0;
  txd<<=1;   
  delay_us(2);   //对TEA5767这三个延时都是必须的
  IIC_SCL=1;
  delay_us(2);
  IIC_SCL=0; 
  delay_us(2);
    } 
}

u8 IIC_Read_Byte(unsigned char ack)
{
 unsigned char i,receive=0;
 SDA_IN();//SDA设置为输入
    for(i=0;i<8;i++ )
 {
        IIC_SCL=0;
        delay_us(2);
  IIC_SCL=1;
        receive<<=1;
        if(READ_SDA)receive++;  
  delay_us(1);
    }     
    if (!ack)
        IIC_NAck();//发送nACK
    else
        IIC_Ack(); //发送ACK  
    return receive;
}
说几点请大家帮我指正下 先谢谢了
1 IIC是不是从拉低时钟线开始传输数据,释放时钟线表示传输完成?那在发送函数中   
  IIC_SCL=1;
  delay_us(2);
  IIC_SCL=0; 
  delay_us(2);
为什么发送完 释放时钟线后 延时一下 还要拉低呢?
2在读取函中
if(READ_SDA)receive++    receive++是什么意思?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

69

主题

475

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1334
金钱
1334
注册时间
2013-12-28
在线时间
197 小时
发表于 2014-3-26 16:16:38 | 显示全部楼层
回复【楼主位】abcddcba:
---------------------------------
1.仔细研究时序图,不一定非得按照原子哥的代码来,可以自己根据时序图写。延迟是根据你需要通讯的芯片来定,一般放延迟后通用性好点。
2.读取总线的状态,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-13 03:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表