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;
发送一个字节的数据实现
接收一个字节的数据实现
驱动外设
这三个下篇在写 今天太晚了