可以用逻辑分析仪或示波器对比一下波形有何区别
软件I2C程序:
- void I2C_Delay(void)
- {
- u16 dly;
- dly = 8; //取1对应SCL H为0.5us,L为1.5us,读写仍正常.为了可靠,取8
- while(--dly) ;
- }
-
- void I2C_Start(void) //start the I2C, SDA High-to-low when SCL is high
- {
- P_I2C_SDA = 1; //SDA = 1;
- I2C_Delay();
- P_I2C_SCL = 1; //SCL = 1;
- I2C_Delay();
- I2C_Delay();
- I2C_Delay();
- I2C_Delay();
- P_I2C_SDA = 0; //SDA = 0;
- I2C_Delay();
- I2C_Delay();
- I2C_Delay();
- P_I2C_SCL = 0; //SCL = 0;
- I2C_Delay();
- }
-
-
- void I2C_Stop(void) //STOP the I2C, SDA Low-to-high when SCL is high
- {
- P_I2C_SCL = 0; //SCL = 0;
- I2C_Delay();
- P_I2C_SDA = 0; //SDA = 0;
- I2C_Delay();
- P_I2C_SCL = 1; //SCL = 1;
- I2C_Delay();
- I2C_Delay();
- I2C_Delay();
- P_I2C_SDA = 1; //SDA = 1;
- I2C_Delay();
- }
-
- u8 I2C_Check_ACK(void) //Check ACK, If status=0: right, if status=1: error
- {
- u8 status;
- P_I2C_SDA = 1; //SDA = 1;
- I2C_Delay();
- P_I2C_SCL = 1; //SCL = 1;
- I2C_Delay();
- status = 0;
- if(P_I2C_SDA)
- status = 1;
- P_I2C_SCL = 0; //SCL = 0;
- I2C_Delay();
- return status;
- }
复制代码
|