|
I2C對(duì)應(yīng)的時(shí)序?qū)懘a:
延時(shí)函數(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ù)時(shí)序圖,覺(jué)得SDA這里應(yīng)該加I2CDelay() ?
- if ((mask & dat) == 0)
- {
- I2C_SDA = 0;
- }
- else
- {
- I2C_SDA = 1;
- }
- I2CDelay();
- I2C_SCL = 1;
- I2CDelay();
- I2C_SCL = 0;
- }
- 2.時(shí)序圖這里也沒(méi)有說(shuō)I2C_SDA是高電平?不知道是干嘛的?
- I2C_SDA = 1;
- I2CDelay();
- I2C_SCL = 1;
- ack = I2C_SDA;
- I2CDelay();
- I2C_SCL = 0;
- return ack;
- }
復(fù)制代碼 個(gè)人對(duì)I2C時(shí)序的總結(jié):
寫(xiě)過(guò)程::SCL電平主導(dǎo)了SDA的變化,SCL為高電平的時(shí)候,單片機(jī)讀取SDA信號(hào),SCL為低電平的時(shí)候,SDA變化。
開(kāi)始過(guò)程::SDA影響SCL變化。
|
|