IIC协议最详细的讲解

       IIC一些的硬件知识和一些基本的定义就不一一赘述了 这部分随便看一篇文章就可以理解  本文主要是记录一下IIC软件的实现部分  最近学习到了IIC  跟着历程也做出来了  但是个人感觉只是移植 自己也是一知半解 所以今天系统的学习记录一下  如果你是一个跟我一样的小白  希望看完这篇文章对你有点帮助

   直接进入主题  IIC的信号主要是三种 起始信号  停止信号  应答信号  ,在SCL为高电平的时候SDA才是有效的  空闲状态下为高电平   记住这几点 就可以了 接下来就分别解释一下每一个状态的实现

1.起始信号:当SCL 为高电平的的时候  SDA从高电平跳变到低电平 这是时候就定义为IIC的起始信号

SCL=1;
SDA=1;
delay;
SDA=0;
delay;
SCL=0;
delay;

2.停止信号:当SCL 为高电平的的时候  SDA从低电平跳变到高电平 这是时候就定义为IIC的停止信号

SCL=1;
delay;
SDA=0;
delay;
SDA=1;
delay;

3.应答信号:IIC一次出传输1Byte个数据 即8位 所以在第九个SCL的高电平的时候 看SDA的状态 如果是SDA=1 则为nack  SDA=0 位nck

 

//等待 ACK
SDA=1;//释放总线 让从机可以控制SDA 因为如果不让SDA=1 就不能确定返回的应答是1
还是0 
delay;
SCL=1;//scl为高电平的时候sda才有效
delay;
if(read_SDA){  //如果读到的SDA是高电平 则停止  SDA为低电平的时候才是ack应答
iic_stop;
return 1;
}
SCL=0;
delay
return 0


//发送应答信号

SCL=0
SDA=0;
delay;
SCL=1;
delay;

//发送非应答信号
SCL=0
SDA=1;
delay;
SCL=1;
delay;

   发送一个字节的数据实现

   接收一个字节的数据实现

   驱动外设

这三个下篇在写 今天太晚了  

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硬件菜鸟007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值