
这是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; 展开
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; 展开
3个回答
2016-10-20
展开全部
18b20读写都是通过一根线传输的。当接受到输出命令时,温度传感器会输出温度数据:这个数据也只能通过这根数据线进行传输,也就是高电压(1)和低电压(0),即输出的是二进制数据,并且是一位、一位的输出的,也就是你程序里的DQ。然后使用dat把DQ一位、一位输出的0、1收集起来。
if(DQ)dat=dat|0x80; // |=是按位或的 简写 这行的意思是只区一位?
else
dat=dat|0x00; //DO不为1则不进行读数据
上面这三句就是收集的过程,同时直接把温度数据转化为十六进制了。
如还有疑问,可以提出共同学习
if(DQ)dat=dat|0x80; // |=是按位或的 简写 这行的意思是只区一位?
else
dat=dat|0x00; //DO不为1则不进行读数据
上面这三句就是收集的过程,同时直接把温度数据转化为十六进制了。
如还有疑问,可以提出共同学习
追问
谢谢你。。。。。。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
dat是储存DS18B02温度的地方
追问
谢谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询