正点原子IIC例程讲解笔记(二)——myiic.c中函数理解

目录

一、IIC起始信号— IIC_Start(void):

二、IIC停止信号— IIC_Stop(void)

三、等待应答函数:u8 IIC_Wait_Ack(void)

四、应答函数:void IIC_Ack(void)、void IIC_NAck(void)

五、IIC发送一个字节函数:void IIC_Send_Byte(u8 txd)

六、IIC接收一个字节函数:u8 IIC_Read_Byte(unsigned char ack)


一、IIC起始信号— IIC_Start(void):

函数源码:

void IIC_Start(void)
{
	SDA_OUT();     //SDA线输出模式
	IIC_SDA=1;	  	  
	IIC_SCL=1;
	delay_us(4);
 	IIC_SDA=0;     //START: when CLK is high,DATA change form high to low 
	delay_us(4);
	IIC_SCL=0;     //钳住IIC总线,准备发送或接收数据
}

        首先设置数据线SDA端口为输出模式;由于空闲状态时数据线SDA和时钟线SCL都处于高电平状态,所以将IIC_SDA 和 IIC_SCL都设置为高电平。根据起始信号时序—当SCL处于高电平时,SDA由高向低进行跳变,所以将IIC_SDA设置为低电平,此时IIC起始信号已经模拟完成,最后将IIC_SCL设置为低电平,钳住IIC总线,准备发送或接收数据。

二、IIC停止信号— IIC_Stop(void)

函数源码:

void IIC_Stop(void)
{
	SDA_OUT();    //SDA端口设置为输出
	IIC_SCL=0;
	IIC_SDA=0;    //STOP: when CLK is high DATA change form low to high
 	delay_us(4);
	IIC_SCL=1; 
	IIC_SDA=1;    //发送IIC总线结束信号
	delay_us(4);							   	
}

        如上图,数据发送完成后数据线SDA和时钟线SCL应该处于低电平状态,所以先将IIC_SDA 和 IIC_SCL都设置为低电平;根据停止信号时序,先将时钟线SCL设置为高电平,后再将数据线SDA由低电平设置为高电平,此时IIC停止信号已经模拟完成,此时数据线SDA和时钟线SCL都为高电平,IIC处于空闲状态。

三、等待应答函数:u8 IIC_Wait_Ack(void)

函数源码&#

  • 17
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值