单片机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();
}
以上的 我可以这么理解吗,谢谢
展开
 我来答
seuzhouww
推荐于2016-04-22 · TA获得超过1386个赞
知道小有建树答主
回答量:658
采纳率:0%
帮助的人:299万
展开全部
【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通信协议中,关于“ 主写从一个字节”的要求。
追问
你好我能问下 ,我的理解哪个地方有错误
追答
理解没有问题,我是补充一下。
1)SCL有点像D触发器的CLK。SDA相当于D输入。这样就可以一步一步锁存输出到从设备了。因此需要SCL从低到高的变化。在SCL上跳时,SDA端口需要给出稳定的被移动位信号。
2)你的理解是在没有看IIC通信协议要求的情况下的分析,需要学习一下该协议。
止箫笛Hc
2016-04-20
知道答主
回答量:1
采纳率:0%
帮助的人:1118
展开全部
导致电脑过热的原因主要有,室内温度太热
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
为梦想而航行
2015-11-10
知道答主
回答量:10
采纳率:100%
帮助的人:2.7万
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大海aaa888
2016-04-12
知道答主
回答量:3
采纳率:0%
帮助的人:2464
展开全部
df6324827ry
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Gqian0821
2012-11-24
知道答主
回答量:32
采纳率:0%
帮助的人:5.1万
展开全部
我还是 不懂 为何循环外的这个是SCL=0? 求讲解
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式