新手入门,麻烦高手帮我解释下I2C总线程序不懂的地方好吗?

[复制链接]
3342|9
 楼主| wanwehua 发表于 2009-12-10 12:51 | 显示全部楼层 |阅读模式
本帖最后由 wanwehua 于 2009-12-10 16:11 编辑

AT24C02的芯片地址(0xa0为写,0xa1为读)
任一地址写入数据格式

Void write_add(uchar address,uchar info)
//指定地址写一个字节数据
{
start();
writebyte(0xa0);      里面的0XA0可以不吗???
respons();
writebyte(address);
respons();
writebyte(info);
respons();
stop();
}






任一地址读取数据格式
void init() //初始化
{
SCL=1;
delay();
SDA=1;
delay();
}


void start() //启动信号
{
SDA=1;
delay();
SCL=1;
delay();
SDA=0;
delay();
}


void stop() //停止信号
{
SDA=0;
delay();
SCL=1;
delay();
SDA=1;
delay();
}

void respons() //回应信号
{
uchar i=0;SCL=1;delay();
while((SDA==1)&&(i<255))i++;  (1)这行是先执行到I>255才转到下一行吗???????? 
SCL=0;
delay();
}


void writebyte(uchar date)// 写一个字节
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;  (2)也是先循环完才转到下一行吗SCL=0
SCL=0;     
delay();
SDA=CY;  (3)这行是不是先是SDA=0,当有益处SDA=1;是不是在SCL=1期间,起STOP的作用啊??
delay();
SCL=1;
delay();
}
SCL=0;  
delay();
SDA=1;  (4)这行为什么要赋值SDA=1啊,前面益处不就是1吗,
delay();
}


uchar readbyte()
//读一个字节
{
uchar i,j,k;
SCL=0; 
delay();
SDA=1;
for(i=0;i<8;i++)
{
SCL=1;(5)这行的SCL=1是不和下面的SCL=0配合的即在 时钟的下降沿期间??
delay();
if(SDA==1)
j=1;
else
j=0;
k=(k<<1)|j;(6)这行是起什么作用的啊?
SCL=0;
delay();
}
delay();
return k;
}


uchar read_add(uchar address)   
//指定地址读一个字节数据
{
uchar dd;
start();
writebyte(0xa0);
respons();
writebyte(address);
respons();
start();
writebyte(0xa1);
respons();
dd=readbyte();
stop();
return dd;   高手能帮我全部解释下最好了 尤其是读和写!!谢谢!!!!!!!!!
}        
 楼主| wanwehua 发表于 2009-12-10 12:52 | 显示全部楼层
第一次发贴不知道给20分什么意思!只有7分了我!先顶下!呵呵!!!!!!
 楼主| wanwehua 发表于 2009-12-10 14:28 | 显示全部楼层
咋这冷清啊!都没有个人来说下,!顶下也好啊!!
auzxj 发表于 2009-12-10 15:28 | 显示全部楼层
怎么连个层次都没有,看起来好费劲啊,纯帮顶了~~~
 楼主| wanwehua 发表于 2009-12-10 15:38 | 显示全部楼层
有的啊!!!仔细看下咯!!!!!
auzxj 发表于 2009-12-10 15:49 | 显示全部楼层
再编辑一下,该空格的地方空格
 楼主| wanwehua 发表于 2009-12-10 16:11 | 显示全部楼层
好了呢!!!
awmc_m 发表于 2009-12-10 16:41 | 显示全部楼层
(1)等待应答。且i=255后超时退出,这里最好还应该加个返回值以判断是否有应答
(2)temp左移一位,带标志左移
(3)将temp从高位开始从sda输出,即发送
(4)写操作完成,scl、sda给个状态,如果是标准51,则赋1位输入口
(5)将io口scl置高,与前面scl=0配合则产生上升沿,读取sda的值
(6)将读到的sda的值移入k
glodcity 发表于 2009-12-11 13:40 | 显示全部楼层
唉,看一下,I2C协义就知道是什么回事了
NE5532 发表于 2009-12-11 13:55 | 显示全部楼层
恩,可以看看Philips的i2c协议,MICROCHIP的24C系列存储器里讲I2C协议也讲得很好,建议去MICROCHIP下数据手册看看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

15

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部