关于DS18B20读一个字节的问题。

Read_one_byte(void){uchari=0;uchardat=0;for(i=8;i>0;i++){DQ=0;dat>>=1;DQ=1;if(DQ)dat|... Read_one_byte(void)
{
uchar i=0;
uchar dat=0;
for(i=8;i>0;i++)
{
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
Delay(4);
}
return (dat);
}
在这个读一个字节的程序中,好像只有当DQ为高电平的时候才进行处理,那么我想知道这个程序是如何读低电平的?因为我现在通过硬件仿真发现8次循环之中都进了if函数,也就是读出来的数始终是0xff,这是为什么呢?还有就是为什么DQ拉低之后,dat要右移一位?
展开
 我来答
Cindere鞡
2013-09-25 · TA获得超过7254个赞
知道大有可为答主
回答量:1148
采纳率:84%
帮助的人:553万
展开全部
我想你是没注意到一个地方:dat>>1;这句在循环的一开始,也就是说,每一次读一位数据开始时,dat就右移一位,高位自动补0,所以只有当读到1时才为dat高位赋值为1,否则继续保持之前补上的数据0;其次,DQ=1,这是做输入用的,而硬件仿真时没有考虑进硬件,所以仿真结果只会是全1,而真正运行结果肯定是从硬件上读出数据来;右移的目的是让数据能正确拼装,因为读是先读最低位,最后读最高位,所以要右移以便在下一次能装入高一位的数据。
希望我的回答能帮助到你。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式