51单片机关于I2C总线的应答信号的疑问,求大神帮忙
是不是接收器(从机)一般都是有I2C协议的?这些硬件器件是不是会在scl=1高电平期间自动送一个sda=0的信号给主机(单片机)?这个是从机的应答信号。那么主机的应答信号...
是不是接收器(从机)一般都是有I2C协议的?这些硬件器件是不是会在scl=1高电平期间自动送一个sda=0的信号给主机(单片机)?这个是从机的应答信号。那么主机的应答信号,单片机不是不具有I2C协议,需要自己软件模拟么,也就是说单片机不会自动发sda=0这个信号吧,那么我想问单片机在读取数据的时候应答信号怎么产生啊,就是读取一个数据应答一下再读取一个数据再应答一下…………………………应答函数如下:
大神看看在 scl=1;
delay();
while((sda==1)&&(i<250))i++;
scl=0;
这个语句期间如果是接收器,是不是会自动产生一个sda=0的信号啊?
如果是单片机,不会自动产生,那么应答 这个sda=0怎么办,怎么来的呢,因为如果没有sda=0这个应答,时间就会自动跑完 i跑完250次就跳出循环了,跳出循环还没有sda=0这个信号的话,不就是sda=1了么,那不就是没有应答了么
void respons() //应答信号
{
uchar i;
i=0;
scl=1;
delay();
while((sda==1)&&(i<250))i++;
scl=0;
delay();
} 展开
大神看看在 scl=1;
delay();
while((sda==1)&&(i<250))i++;
scl=0;
这个语句期间如果是接收器,是不是会自动产生一个sda=0的信号啊?
如果是单片机,不会自动产生,那么应答 这个sda=0怎么办,怎么来的呢,因为如果没有sda=0这个应答,时间就会自动跑完 i跑完250次就跳出循环了,跳出循环还没有sda=0这个信号的话,不就是sda=1了么,那不就是没有应答了么
void respons() //应答信号
{
uchar i;
i=0;
scl=1;
delay();
while((sda==1)&&(i<250))i++;
scl=0;
delay();
} 展开
1个回答
展开全部
是不是接收器(从机)一般都是有I2C协议的?
肯定有,不然怎么通信。
SCL:时钟线
SDA:数据线
你的理解,个人感觉就是没仔细看过IIC协议,建议在文库里看看IIC协议。
IIC协议从程序上讲包含:初始化总线,启动总线,停止总线,总线读一个字节,总线写一个字节,总线应答。只要一个一个搞清楚了,就能操作IIC总线。
肯定有,不然怎么通信。
SCL:时钟线
SDA:数据线
你的理解,个人感觉就是没仔细看过IIC协议,建议在文库里看看IIC协议。
IIC协议从程序上讲包含:初始化总线,启动总线,停止总线,总线读一个字节,总线写一个字节,总线应答。只要一个一个搞清楚了,就能操作IIC总线。
更多追问追答
追问
对啊,不是说读或写一个字节要应答一次然后才能读或写下一个字节么,如果是单片机读数据,应答信号应该是由单片机发出的,写一个字节的时候应答信号由I2C硬件发生,网上都说I2C硬件会自动发出应答信号,那不就是说会自动发出sda=0么?那么单片机本身没有I2C协议,应该是不会自动发出sda=0的应答的吧
追答
单片机是主, IIC器件是从。(就你的问题而言)
主 访问 从, 主等待从的应答(从给主应答),不是“单片机读数据,应答信号应该是由单片机发出.......”
访问包含:R/W;
有时间再仔细琢磨琢磨IIC通信协议,你将彻底高清楚怎么回事。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询