模拟IIC通讯协议,IIC通讯,普通I/O模拟IIC

本文档详细介绍了如何使用普通I/O模拟IIC通讯协议,包括起始信号、停止信号的产生,等待应答和产生应答、非应答的处理,以及发送和接收字节的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.IIC起始与停止信号
在这里插入图片描述
起始信号:在SCL为高电平期间,SDA由高电平到低电平转变
void IIC_Start(void)
{
SDA_OUT; //SDA数据线配置为输出
SCL_H; //SCL数据线拉高
dlyus(5);
SDA_H; //SDA数据线拉高
dlyus(5);
SDA_L; //SCL为高,SDA由高变低,为开始信号
dlyus(5);
SCL_L; //将SCL拉低,准备发送数据
dlyus(5);
}
停止信号:在SCL为高电平期间,SDA由低电平到高电平转变
void IIC_Stop(void)
{
SDA_OUT; //SDA数据线配置为输出
SCL_L; //SCL数据线拉低
dlyus(5);
SDA_L; //SDA数据线拉低
dlyus(5);
SCL_H; //SCL为高
dlyus(5);
SDA_H; //SCL为高电平,SDA由低变高,为停止信号
dlyus(5);
}
等待应答信号:在SCL为高电平期间,SDA为低电平为应答,SDA为高电平为非应答
void IIC_WaitACK(void)
{
unsigned char ACK_ERROR = 0;
unsigned char error = 1;
unsigned char ACK_OK = 0;
SDA_IN;
SDA_H; //主动非ACK
dlyus(2);
SCL_H;
dlyus(2);
while(READ_SDA)
{
ACK_ERROR ++;
if(ACK_ERROR >= 200)
{

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值