可以用逻辑分析仪或示波器对比一下波形有何区别 
软件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;
 - }
 
  复制代码
  
 
 |