本帖最后由 zhuyihua001 于 2014-10-18 17:02 编辑
未命名.JPG (132.44 KB, 下载次数: 0)
下载附件
2014-10-18 16:44 上传
u8 IICReceiveData( void )
{
int j=0;
int tmp=0;
TP_SET_I2C_DATA_HIGH;
for(j=0;j<200;j++);
///////////////////
TP_SET_I2C_CLK_LOW;
for(j=0;j<200;j++);
TP_SET_I2C_CLK_HIGH;
for(j=0;j<200;j++);
if (TP_GET_I2C_DATA_BIT) tmp |= 0x80; //第1脉冲
///////////////////
TP_SET_I2C_CLK_LOW;
for(j=0;j<200;j++);
TP_SET_I2C_CLK_HIGH;
for(j=0;j<200;j++);
if (TP_GET_I2C_DATA_BIT) tmp |= 0x40; //第2脉冲
///////////////////
TP_SET_I2C_CLK_LOW;
for(j=0;j<200;j++);
TP_SET_I2C_CLK_HIGH;
for(j=0;j<200;j++);
if (TP_GET_I2C_DATA_BIT) tmp |= 0x20; //第3脉冲
///////////////////
TP_SET_I2C_CLK_LOW;
for(j=0;j<200;j++);
TP_SET_I2C_CLK_HIGH;
for(j=0;j<200;j++);
if (TP_GET_I2C_DATA_BIT) tmp |= 0x10; //第4脉冲
///////////////////
TP_SET_I2C_CLK_LOW;
for(j=0;j<200;j++);
TP_SET_I2C_CLK_HIGH;
for(j=0;j<200;j++);
if (TP_GET_I2C_DATA_BIT) tmp |= 0x08; //第5脉冲
///////////////////
TP_SET_I2C_CLK_LOW;
for(j=0;j<200;j++);
TP_SET_I2C_CLK_HIGH;
for(j=0;j<200;j++);
if (TP_GET_I2C_DATA_BIT) tmp |= 0x04; //第6脉冲
///////////////////
TP_SET_I2C_CLK_LOW;
for(j=0;j<200;j++);
TP_SET_I2C_CLK_HIGH;
for(j=0;j<200;j++);
if (TP_GET_I2C_DATA_BIT) tmp |= 0x02 ; //第7脉冲
///////////////////
TP_SET_I2C_CLK_LOW;
for(j=0;j<200;j++);
TP_SET_I2C_CLK_HIGH;
for(j=0;j<200;j++);
if (TP_GET_I2C_DATA_BIT) tmp |= 0x01; //第8脉冲
///////////////////
TP_SET_I2C_CLK_LOW;
I2C_delay();
return tmp;
}
i2c读取触摸屏,调试很久,用了逻辑分析仪才发现问题,
第一个数据脉冲丢失了一个脉冲,导致后面的时序错误.
读取数据是调用 IICReceiveData();理论每个数据时钟应该是一样的,
现在现象是第一个数据丢失了脉冲.
我特意把8个读取循环独立书写,仍然丢失一个脉冲.
一周热门 更多>