//************向AT24C02寫入數(shù)據(jù)*******************// bit write_byte(uchar write_data) { uchar i; bit ack_bit; //定義應(yīng)答信號 for(i=0;i<8;i++) // 循環(huán)移入8個位 { SDA=(bit)(write_data & 0x80); _nop_(); SCL = 1; _nop_(); _nop_(); SCL = 0; write_data=write_data<<1; } SDA = 1; // 讀取應(yīng)答 _nop_(); _nop_(); SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); ack_bit=SDA; SCL = 0; return ack_bit; // 返回AT24Cxx應(yīng)答位 } 這是原函數(shù) 1、SDA=(bit)(write_data & 0x80);我的這行代碼有一些疑惑,不知道我的理解是否正確,我們寫入的數(shù)據(jù)比如說是1000 0000&1000 0000那么結(jié)果就是1000 0000只取最高位,是這樣嗎? 2、SDA = 1; // 讀取應(yīng)答 _nop_(); _nop_(); SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); ack_bit=SDA; SCL = 0; return ack_bit; // 返回AT24Cxx應(yīng)答位 主機和從機的SDA是同一根線吧?SDA=1是設(shè)置總線為空閑狀態(tài),SCL從1到0是為了傳輸傳輸信號。定義的應(yīng)答信號是從機的嗎?最后返回應(yīng)答位給主調(diào)函數(shù)。還是不太明白這個ack_bit存在的意義。 求解
|