//************向AT24C02写入数据*******************//
bit write_byte(uchar write_data)
{
uchar i;
bit ack_bit; //定义应答信号
for(i=0;i<8;i++) // 循环移入8个位
{
SDA=(bit)(write_data & 0x80);
_nop_();
SCL = 1;
_nop_();
_nop_();
SCL = 0;
write_data=write_data<<1;
}
SDA = 1; // 读取应答
_nop_();
_nop_();
SCL = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ack_bit=SDA;
SCL = 0;
return ack_bit; // 返回AT24Cxx应答位
}
这是原函数
1、SDA=(bit)(write_data & 0x80);我的这行代码有一些疑惑,不知道我的理解是否正确,我们写入的数据比如说是1000 0000&1000 0000那么结果就是1000 0000只取最高位,是这样吗?
2、SDA = 1; // 读取应答
_nop_();
_nop_();
SCL = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ack_bit=SDA;
SCL = 0;
return ack_bit; // 返回AT24Cxx应答位
主机和从机的SDA是同一根线吧?SDA=1是设置总线为空闲状态,SCL从1到0是为了传输传输信号。定义的应答信号是从机的吗?最后返回应答位给主调函数。还是不太明白这个ack_bit存在的意义。
求解