单片机学习小组
直播中

张昂笙

7年用户 1001经验值
私信 关注

请教大神单片机18B20驱动代码的步骤有哪些

请教大神单片机18B20驱动代码的步骤有哪些?有哪些注意事项?

回帖(1)

杨丽

2022-2-23 13:52:58
18B20驱动代码步骤:


18B20驱动代码步骤:
***it DQ=P1^4;//数据输入输出脚 单总线接口
#include"intrins.h"
1、初始化
2、温度读取
3、读取18B20数据
4、写18B20数据
1、18B20初始化:
/18B20初始化*/
void dsinit()
{
DQ=0; //总线拉低初始化
Delay500us();
DQ=1; //拉高
Delay500us();
}
时序图:

2、写18B20数据:
void write(uchar dat)
{
uchar i;
for(i=0;i<8;i++)//八位数据写入
{
DQ=0; //总线拉低,开始写入数据
DQ=dat&0x01; // 0000 0000 &0000 0001= 0000 0001
Delay100us();
DQ=1; //总线拉高,结束数据写操作
dat>>=1;//数据右移动一位。
}
}
3、读取18B20数据:

/温度数据读取*/
uchar read()
{
uchar i;
uchar dat;
for (i=0;i<8;i++)
{
DQ=0; //总线拉低
dat=dat>>1; //数据移位
nop(); //大约延时15us
DQ=1; //总线拉高
if(DQ==1)//如果写完了数据,开始移位
{
dat |= 0x80;//1000 0000
}
Delay100us();
}
return dat; //返回值
}
4、温度读取:
uchar temget()
{
uchar temp;
uchar low,high;

  dsinit();//18b20初始化
  write(0xcc);  //跳过ROM指令
  write(0x44);  //开始温度变换
  Delay500us();
  Delay500us();

        dsinit();    //18b20初始化
        write(0xcc); //跳过ROM指令
        write(0xbe);//读暂存存储器和 CRC 字节 ,读数据直到 9 字节
        low=read();  //获取温度下限
        high=read();//获取温度上限

temp=high<<4;    //
temp |=(low>>4); //
return temp;//返回数据,刷新

}

其中,温度读取函数uchar temget()可以直接返回到主程序之中运行, 即为:
uchar wendu;
wendu=temget();
liu=wendu/100;
qi=wendu%100/10;
ba=wendu%10;

相关的延时:
void Delay500us() //@11.0592MHz
{
unsigned char i, j;

_nop_();
_nop_();
i = 6;
j = 93;
do
{
        while (--j);
} while (--i);

}
/18B20延时函数****/
void Delay100us() //@11.0592MHz
{
unsigned char i, j;
nop();
nop();
i = 2;
j = 15;
do
{
while (–j);
} while (–i);
}

注意!!:使用官网给出的驱动的延时需要扩大8-10倍
写温度获取函数的步骤:
1、初始化
2、忽略ROM操作(ROM指令)【CCH】
3、DS18B20功能指令(读写)

忽略ROM指令:0xCC
发送温度转换指令:0x44
读取暂存器指令:0xbe
举报

更多回帖

发帖
×
20
完善资料,
赚取积分