搜索
您的当前位置:首页正文

单片机模拟I2C总线通信

2022-12-18 来源:字库网
用单片机模拟IIC总线通信协议

/*******************************************************************/

用单片机模拟IIC总线通信协议。在24C02C中的指定地址

(如:3)写入指定数据(如:0x0f)。然后再从24C02C中把刚才写入的数据读出来,送P1口的LED显示出来。 /**************************************************/

/*******************************************************************/

#include #define uchar unsigned char #define uint unsigned int sbit sda=P2^0;

sbit scl=P2^1; void delay() {;;}

void delay1(uint z )

{ uint x,y; for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void start() { sda=1; scl=1; delay(); sda=0; delay(); scl=0; } void stop() { sda=0; scl=1; delay(); sda=1; delay();

scl=0; } void ack() { uchar i=0; scl=1;

while((sda==1)&&(i<250))i++; scl=0; delay();

} void init() { sda=1; scl=1; }

void write_byte(uchar date) { uchar i,temp; temp=date; scl=0; delay(); for(i=0;i<8;i++)

{ temp=temp<<1; sda=CY; delay(); scl=1; delay(); scl=0; delay();

}

sda=1;

}

uchar read_byte() { uchar i,j; scl=0; delay(); sda=1; delay(); for(i=0;i<8;i++) { scl=1; delay();

j=(j<<1)|sda;

scl=0; delay();

}

return j;

}

void write_addr(uchar addr,uchar date) { start();

write_byte(0xa0);

ack();

write_byte(addr); ack();

write_byte(date); ack(); stop();

}

uchar read_addr(uchar addr) { uchar date;

start();

}

write_byte(0xa0); ack();

write_byte(addr); ack(); start();

write_byte(0xa1); ack();

date=read_byte(); stop(); return date;

void main() { } init();

write_addr(3,0x0f); delay1(100); P1=read_addr(3); while(1);

因篇幅问题不能全部显示,请点此查看更多更全内容

Top