//************向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存在的意义。 求解
|