打印

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

[复制链接]
2294|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 | 只看该作者
怎么连个层次都没有,看起来好费劲啊,纯帮顶了~~~

使用特权

评论回复
5
wanwehua|  楼主 | 2009-12-10 15:38 | 只看该作者
有的啊!!!仔细看下咯!!!!!

使用特权

评论回复
6
auzxj| | 2009-12-10 15:49 | 只看该作者
再编辑一下,该空格的地方空格

使用特权

评论回复
7
wanwehua|  楼主 | 2009-12-10 16:11 | 只看该作者
好了呢!!!

使用特权

评论回复
8
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

使用特权

评论回复
9
glodcity| | 2009-12-11 13:40 | 只看该作者
唉,看一下,I2C协义就知道是什么回事了

使用特权

评论回复
10
NE5532| | 2009-12-11 13:55 | 只看该作者
恩,可以看看Philips的i2c协议,MICROCHIP的24C系列存储器里讲I2C协议也讲得很好,建议去MICROCHIP下数据手册看看。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

15

帖子

0

粉丝