|
I2C對應(yīng)的時序?qū)懘a:
延時函數(shù):I2CDelay() {_nop_();_nop_();_nop_();_nop_();}
1.stop函數(shù)
void I2CStop()
{
I2C_SCL = 0;
I2C_SDA = 0;
I2CDelay();
I2C_SCL = 1;
I2CDelay();
I2C_SDA = 1;
I2CDelay();
}
SCL和SDA都是高電平了,不理解最后一行還使用I2CDelay()的原因 ?
2.wrtie函數(shù)
- bit I2CWrite(unsigned char dat)
- {
- bit ack = 0;
- unsigned char mask ;
- for (mask = 0x80; mask != 0; mask >>= 1)
- {
- 1.根據(jù)時序圖,覺得SDA這里應(yīng)該加I2CDelay() ?
- if ((mask & dat) == 0)
- {
- I2C_SDA = 0;
- }
- else
- {
- I2C_SDA = 1;
- }
- I2CDelay();
- I2C_SCL = 1;
- I2CDelay();
- I2C_SCL = 0;
- }
- 2.時序圖這里也沒有說I2C_SDA是高電平?不知道是干嘛的?
- I2C_SDA = 1;
- I2CDelay();
- I2C_SCL = 1;
- ack = I2C_SDA;
- I2CDelay();
- I2C_SCL = 0;
- return ack;
- }
復(fù)制代碼 個人對I2C時序的總結(jié):
寫過程::SCL電平主導(dǎo)了SDA的變化,SCL為高電平的時候,單片機讀取SDA信號,SCL為低電平的時候,SDA變化。
開始過程::SDA影響SCL變化。
|
|