初级会员

- 积分
- 85
- 金钱
- 85
- 注册时间
- 2015-4-17
- 在线时间
- 5 小时
|
1金钱
//产生ACK应答
void IIC_Ack(void)
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=0;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
}
//不产生ACK应答
void IIC_NAck(void)
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=1;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
}
//IIC发送一个字节
//返回从机有无应答
//1,有应答
//0,无应答
关于原子哥,在第27章 IIC实验中加上的这2段代码一直不是很理解,而且其用处只用到如下函数
//读1个字节,ack=1时,发送ACK,ack=0,发送nACK
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;
}
关键后来发现,该函数的ack只传递的读取EEPROM的地址, ack的取值跟是否应答觉得应该没什么关系。请大神解答,原子哥IIC_Ack和IIC_NAck这2个函数的真正用意。
|
最佳答案
查看完整内容[请看2#楼]
ACK就是产生一个应答信号,NACK是不产生应答信号,没有你说的传递什么地址说法,把IIC通信再细细研究一下你就明白了!
|