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