微波EDA网,见证研发工程师的成长!
首页 > 射频和无线通信 > 射频无线通信文库 > I2C串行总线组成及其工作原理

I2C串行总线组成及其工作原理

时间:01-10 来源:互联网 点击:

();

}

void respons()//应答信号

{

uchar i;

scl = 1;

delay();

while((sda ==1)&&(i<250))//等到第九个时钟周期的时候,还没有变为0,

//那么scl将自动的变为0,表示收到信号

{

i++;

}

scl = 0;

}

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++)//写8次

{

temp = temp<<1;//表示将temp左移1位,将最高位移入psw寄存器中的cy位,

//然后将最高位赋值给sda,送走数据

scl = 1;//数据稳定了

delay();

sda = CY;

delay();

scl = 0;//读走数据

delay();

}

sda = 1;//注意养成释放总线的习惯

delay();

}

uchar read_byte()

{

uchar i,j,k;

scl = 0;

delay();

sda = 1;//释放数据总线

delay();

for(i=0;i<8;i++)

{

scl = 1;

delay();

j = sda ;//读取数据

k =(k<<1)"j;

scl = 0;

delay();

}

return k;

}

uchar read_add(uchar address)

{

uchar date;

start();

write_byte(0xa0);//表示写入器件的地址

respons();

write_byte(address);

respons();

start();

write_byte(0xa1);

respons();

date=read_byte();

stop();

return date;

}

void write_add(uchar address,uchar date)

{

init();//初始化信号总线和地址总线

start();//启动信号

write_byte(0xa0);//表示写入器件的地址

respons();

write_byte(address);//表示往这个器件内部的第三个地址处写入地址

respons();

write_byte(date);//表示器件内部的数据

respons();

stop();

}

void delay1(uint z)

{

uint x,y;

for(x= z;x>0;x--)

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

}

void main()

{

init();

write_add(23,125);

delay1(100);

P1=read_add(23);

while(1);

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top