|
你问我答——用2553的IO模拟I2C时波形异常问题!
[复制链接]
最近要用到430g2303,想先用Launchpad把程序写好,然后移植过去。其中用到模拟I2C,虽然可以把I2C器件的数据正确读出来,但是I2C写命令时波形出现异常:
写第一个命令0x80时,波形正常。写第二个命令0xF3时,波形出现异常,在SCL第8个时钟周期结束时本应该是高电平的SDA突然降低了,不是完全变为0 。后面变为低电平是程序把SDA变低的。具体波形图片附上,不知道是什么原因?写命令程序如下,如果是程序原因,那为什么第1次写的时候,波形正常呢?
模拟I2C总线写函数:
uint8 WriteByte(uint8 byte)
{
uint8 i;
for(i=8;i>0;i--)
{
if( byte & 0x80 )
SDA_1;
else
SDA_0;
byte <<= 1;
delay(1);
SCL_1;
delay(3);
SCL_0;
delay(1);
}
delay(3);
SDA_0;
delay(3);
SCL_1;
i = 0;
SDA_IN;
//P2REN |= BIT1;
delay(3);
while((SDA==BIT1) && (i<255))
i++;
SDA_OUT;
//P2REN &= ~BIT1;
SDA_0;
SCL_0;
delay(3);
if(i<255)
return ACK;
else
return NACK;
}
[ 本帖最后由 编号洞洞拐 于 2013-11-20 18:22 编辑 ]
|
|