我要发布
仪器网/ 仪器社区/ 温度传感器/ 温度传感器

温度传感器

焙S巴瘸的Gk    2013-11-26    温度传感器    浏览 345 次

voidWrite18B20(unsignedchardat)//向DS18B20写入一个字节数据{unsignedcharmask;for(mask=0x01;mask!=0;mask<<=1)//低位在先,依次移出8个bit{IO_18B20=0;//产生2us低电平脉冲_nop_(... void Write18B20(unsigned char dat) //向DS18B20写入一个字节数据

{

unsigned char mask;

for (mask=0x01; mask!=0; mask<<=1) //低位在先,依次移出8个bit

{

IO_18B20 = 0; //产生2us低电平脉冲

_nop_();

_nop_();

if ((mask&dat) == 0) //输出该bit值 //这个干吗要和dat与啊

IO_18B20 =
0;

else

IO_18B20 =
1;

DelayX10us(6); //延时60us

IO_18B20 = 1; //拉高通信引脚

}

EA = 1; //重新使能总中断

}
往里面写0和写1怎么是这么写呢, max=0x01.这个<<1我知道是循环8次,但是不知道里面什么意思;还有下面读程序也是也不知道什么意思

unsigned char Read18B20(void) //从DS18B20读取一个字节数据
{
unsigned char dat;
unsigned char mask;

EA = 0; //禁止总中断
for (mask=0x01; mask!=0; mask<<=1) //低位在先,依次采集8个bit
{
IO_18B20 = 0; //产生2us低电平脉冲
_nop_();
_nop_();
IO_18B20 = 1; //结束低电平脉冲,等待18B20输出数据
_nop_(); //延时2us
_nop_();
if (!IO_18B20) //读取通信引脚上的值
dat &= ~mask;
else
dat |= mask;
DelayX10us(6); //再延时60us
}
EA = 1; //重新使能总中断

return dat;
}
谁能大概的讲解下,程序里面的意思。

精彩问答
新乐小男人year 发布日期:2013-11-27
先说明这里的<<是左移,后面的数字为左移多少位,00000001,左移一位便是00000010,右移道理相同。所以对于你上面说的为什么要和dat与是取dat的某一位是高或者低。(原因:DS18B20是oneline通信,只能一个一个的高低电平发)。其他的就是协议本事的约定,有了约定才能知道对方发的是什么意思,具体你去看协议。DelayX10us(6);为延时程序。其他配置你可以看芯片的对应配置方法。希望对你有帮助并采纳,祝你成功!慢慢学,不要急
最新主题
相关版块
我要评论
X您尚未登录
账号登录
X您尚未登录
手机动态密码登录
X您尚未登录
扫码登录
官方微信

仪器网微信服务号

扫码获取最新信息


仪器网官方订阅号

扫码获取最新信息

在线客服

咨询客服

在线客服
工作日:  9:00-18:00
联系客服 企业专属客服
电话客服:  400-822-6768
工作日:  9:00-18:00
订阅商机

仪采招微信公众号

采购信息一键获取海量商机轻松掌控