uchar IIC_read_byte()
{
uchar i,k;
scl=0;
_nop_();
sda=1;
for(i=0;i<8;i++)
{
scl=1;
_nop_();
k=(k<<1)|sda;
scl=0;
_nop_();
}
_nop_();
return k;
}
按照协议写的 可是就是读出的不是对的???
还有换了个写法(其实是一样的)
unsigned char Read(void)
{
unsigned char temp=0;
unsigned char temp1=0;
unsigned char BitCounter=8;
Sda=1;
do
{
Scl=0;
_nop_();
Scl=1;
_nop_();
if(Sda)
temp=temp|0x01;
else
temp=temp&0xfe;
if(BitCounter-1)
{
temp1=temp<<1;
temp=temp1;
}
BitCounter--;
}
while(BitCounter);
return(temp);
}
就好啦,但把do{...}里面的第一行Scl=0 放到do{....}里面最后一行(都是满足协议的)就出现第一个程序的结果 很不解 |