单片机IIC总线,写一个字节
voidwrite_byte(uchardate)//完成IIC通信的一个字节的主写从的接口函数。{uchari,temp;temp=date;for(i=0;i<8;i...
void write_byte(uchar date) //完成IIC通信的一个字节的 主写从 的接口函数。
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1; 这个是数据左移;
scl=0;
delay();
sda=CY; 这步是不是只有当SCL=0期间才能将数据进行传输。
delay();
scl=1; 这个是不是数据传输完成后将SCL拉为高电平;
也就是终止数据传输;
delay();
}
scl=0; 循环外的这个是SCL=0是什么意思不懂 。
delay();
sda=1; SDA=1 这个是是释放总线
delay();
}
以上的 我可以这么理解吗,谢谢 展开
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1; 这个是数据左移;
scl=0;
delay();
sda=CY; 这步是不是只有当SCL=0期间才能将数据进行传输。
delay();
scl=1; 这个是不是数据传输完成后将SCL拉为高电平;
也就是终止数据传输;
delay();
}
scl=0; 循环外的这个是SCL=0是什么意思不懂 。
delay();
sda=1; SDA=1 这个是是释放总线
delay();
}
以上的 我可以这么理解吗,谢谢 展开
5个回答
展开全部
【1】temp=temp<<1; 这个是数据左移;CY就等于移出的最高位。
【2】sda=CY;每次循环,将自动取到temp的每一位,从高到低。
【3】scl=1;目的是scl线从0到1的跳变。具体可以看IIC通信协议的图形。
【4】scl=0; 循环外 。字节的所有位,共8位移出后。需要等到IIC从站设备的响应。
scl状态是协议约定的要求。sda=1表示,IO口做输入用。释放总线理解也是对的。
所有代码的目的都是围绕IIC通信协议中,关于“ 主写从一个字节”的要求。
【2】sda=CY;每次循环,将自动取到temp的每一位,从高到低。
【3】scl=1;目的是scl线从0到1的跳变。具体可以看IIC通信协议的图形。
【4】scl=0; 循环外 。字节的所有位,共8位移出后。需要等到IIC从站设备的响应。
scl状态是协议约定的要求。sda=1表示,IO口做输入用。释放总线理解也是对的。
所有代码的目的都是围绕IIC通信协议中,关于“ 主写从一个字节”的要求。
追问
你好我能问下 ,我的理解哪个地方有错误
追答
理解没有问题,我是补充一下。
1)SCL有点像D触发器的CLK。SDA相当于D输入。这样就可以一步一步锁存输出到从设备了。因此需要SCL从低到高的变化。在SCL上跳时,SDA端口需要给出稳定的被移动位信号。
2)你的理解是在没有看IIC通信协议要求的情况下的分析,需要学习一下该协议。
展开全部
导致电脑过热的原因主要有,室内温度太热
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我还是 不懂 为何循环外的这个是SCL=0? 求讲解
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |