这是C51单片机DS18B20读数据的一个函数,请问dat变量在这里面是什么意思

/**************************DS18B20读操作*****************************/ucharDS18B20_readb... /**************************DS18B20读操作*****************************/
uchar DS18B20_readbyte() //dat的意思是:
{
uchar i,dat=0;
DQ=1;
_nop_(); //稍微延时1us
_nop_(); //稍微延时1us
for(i=0;i<8;i++)
{
DQ=0;
_nop_(); //延时6us
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
dat>>=1;
DQ=1; //延时4us
_nop_();
_nop_();
_nop_();
_nop_();
if(DQ)dat=dat|0x80; // |=是按位或的 简写 这行的意思是只区一位?
else
dat=dat|0x00; //DO不为1则不进行读数据
/****下面的延时时间一定要搞仔细了,时间太短会闪烁,估计是每两个读之间必须得隔离相当长的时间*****/
delay102us();
delay102us();
delay102us();
delay102us();
DQ=1; //数据线拉高
}
return dat;
展开
 我来答
张哥小技术
2016-10-20 · TA获得超过324个赞
知道小有建树答主
回答量:178
采纳率:87%
帮助的人:97.1万
展开全部

在上面提供的程序中,dat是一个8位元(8bit)的临时变量。它的作用就像一个装东西的容器,不但能装东西,还能顺序排列和移动里面装的东西。

下面截图展示了每次执行for循环语句dat变量里面存储的bit变化情况:

显然,dat完成了装载8位DQ值的任务(每一位DQ的值不是0就是1),也就是读取了一个完整的uchar字节。

追问
谢谢,还有一点不确定。if(DQ) dat=dat|0x80;的意思是不是:当DQ为0时,由于每次移位左边会自动补0,所以不用人为补0。而DQ为1时,由于移位不会在左边自动补1,所以要用这个语句来给dat左边补1?
追答
是的,就是这个意思。
匿名用户
2016-10-20
展开全部
18b20读写都是通过一根线传输的。当接受到输出命令时,温度传感器会输出温度数据:这个数据也只能通过这根数据线进行传输,也就是高电压(1)和低电压(0),即输出的是二进制数据,并且是一位、一位的输出的,也就是你程序里的DQ。然后使用dat把DQ一位、一位输出的0、1收集起来。
if(DQ)dat=dat|0x80; // |=是按位或的 简写 这行的意思是只区一位?
else
dat=dat|0x00; //DO不为1则不进行读数据
上面这三句就是收集的过程,同时直接把温度数据转化为十六进制了。
如还有疑问,可以提出共同学习
追问
谢谢你。。。。。。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tony_sgt
2016-10-20 · TA获得超过8425个赞
知道大有可为答主
回答量:5330
采纳率:66%
帮助的人:1299万
展开全部
dat是储存DS18B02温度的地方
追问
谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式