#include
#define uchar unsigned char
sbit scl=P2^1;
sbit sda=P2^0;
uchar ack_sign; //应答标志 应答为1,不应答为0
void delay()
{
uchar i=1;
while(i--);
}
void start() //开始信号 在scl为1时sda一个下降沿
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
scl=0; //记住这句一定要加,
delay();
}
void stop() //终止信号 在scl为1是sda一个上升沿
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
scl=0; //始终搞不懂这里为什么要加这个
delay();
}
void write(uchar Data) //写一个字节
{
uchar i;
for(i=0;i<8;i++) //传送一个字节
{
Data<<=1;
delay();
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();
}
scl=0;
delay();
sda=1; //释放总线,以便应答,记住这里
delay();
scl=1;
delay();
if(sda==1)
ack_sign=0;
else
ack_sign=1;
}
void main()
{
a: while(1)
{
start();
write(0x90);
if(ack_sign==0) //为0表示没应答,数据传输出错,无效,重新开始
goto a;
write(0x40);
if(ack_sign==0)
goto a;
write(0xff);
if(ack_sign==0)
goto a;
stop();
}
}
那个加黑的部分为什么要加,什么作用,不加为什么就得不到正确结果