您的位置:首页 > 其它

I2C总线的连续读和连续写

2012-07-04 14:12 369 查看
想写个在给地址后能一直读或写的程序,因为郭天祥的教程里只有单个字节读写示例。可在网上找了好久没找到合适的示例,只好自己看着手册,慢慢摸索。皇天不负苦心人呀,终于出来了。

写完程序的同时也学会了怎样看手册的时序图。

还有此代码只实现了同时写读两个字节,至于在未达到芯片页面通信量的最大值的范围内都可以用FOR循环实现。下面就是代码:

#include<reg52.h>

#include<string.h>

#define uchar unsigned char

sbit sda = P2^0;

sbit scl = P2^1;

delay()

{;;}

init()

{

// sda = 1;

// delay();

// scl = 1;

// delay();

}

start()

{

sda = 1;

// delay();

scl = 1;

delay();

sda = 0;

delay();

}

stop()

{

sda = 0;

// delay();

scl = 1;

delay();

sda = 1;

delay();

}

respons_i2c()

{

uchar i;

scl = 1;

delay();

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

scl = 0;

delay();

}

void write_byte_i2c(uchar date)

{

uchar i;

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

{

date = date<<1;

scl = 0;

delay();

sda = CY;

delay();

scl = 1;

delay();

}

scl = 0;

delay();

sda = 1; //释放总线以收应答信号

delay();

}

void write_i2c(uchar maddr,uchar addr,uchar length,uchar date[])

{

uchar i;

start();

write_byte_i2c(maddr);

respons_i2c();

write_byte_i2c(addr);

respons_i2c();

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

{

write_byte_i2c(date[i]);

respons_i2c();

}

stop();

}

void delay1(uchar x)

{

uchar a,b;

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

for(b=200;b>0;b--);

}

uchar read_byte_i2c()

{

uchar i,date;

scl = 0;

delay();

sda = 1; //释放总线

delay();

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

{

scl = 1;

delay();

date = (date<<1)|sda;

scl = 0;

delay();

}

return date;

}

uchar *read_i2c(uchar maddr,uchar addr,uchar length)

{

uchar i =0;

uchar date[2];

start();

write_byte_i2c(maddr&0xfe);

respons_i2c();

write_byte_i2c(addr);

respons_i2c();

start();

write_byte_i2c(maddr);

respons_i2c();

date[0] = read_byte_i2c();

// for(i = 1; i<length; i++)

scl = 0;

delay();

sda = 0;

delay();

scl = 1;

delay();

date[1] = read_byte_i2c();

stop();

return date;

}

main()

{

uchar code a[]={0x55,0xaa};

uchar b[2];

init();

write_i2c(0xa0,0x0a,2,a);

delay1(100);

strcpy(b, read_i2c(0xa1,0x0a,1));

while(1)

{

P1 = 0xff;

P1 = b[1];

delay1(255);

P1 = 0xff;

P1 = b[0];

delay1(255);

}

}

【注释】此代码在TX-1C中通过
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: