最近刚接触IIC协议,这是个模拟协议,我在网上看了个程序段,有点不太明白。iic协议说主器件发送
第一个字节后,要等待从器件应答,然后再进行第二个字节数据发送,但是这个程序段里面看不出来,
为什么不查询呢?
。
。
。
/**************************************
接收应答信号
**************************************/
bit AT24C04_RecvACK()
{
SCL = 1; //拉高时钟线
Delay5us(); //延时
CY = SDA; //读应答信号
SCL = 0; //拉低时钟线
Delay5us(); //延时
return CY; //
此处返回值到cy,可以明白。但是返回的值怎么判别从器件应答了呢?
}
/**************************************
向IIC总线发送一个字节数据
**************************************/
void AT24C04_SendByte(BYTE dat) //dat=0xa0=1010 0000
{
BYTE i;
for (i=0; i<8; i++) //8位计数器
{
dat <<= 1; //移出数据的最高位
SDA = CY; //送数据口 CY为进位标志,0X0A左移时,产生进位CY=1,不产生进位CY为0
SCL = 1; //拉高时钟线
Delay5us(); //延时
SCL = 0; //拉低时钟线
Delay5us(); //延时
}
AT24C04_RecvACK();
}
。
。
。
此帖出自
小平头技术问答
{
scl=0;
sda=1;
scl=1;
delay();
F0=sda;
scl=0;
if(F0) return 0;
else return 1;
}
这样是否明白,数据线被拉低表示正常应答
bit AT24C04_RecvACK()
{
SCL = 1; //拉高时钟线
Delay5us(); //延时
CY = SDA; //读应答信号
SCL = 0; //拉低时钟线
Delay5us(); //延时
return CY; //此处返回值到cy,可以明白。但是返回的值怎么判别从器件应答了呢?
}
他的问题是“返回的值怎么判别从器件应答了呢?”
我的回答是“数据线被拉低表示正常应答”
我觉得我的表述没有问题啊。。。。
一周热门 更多>