📄 ds18b20.txt
字号:
/*================================================================
* 函 数 名: uchar read_ds18b20(void )
* 参 数: 无
* 功能描述: 读ds18b20 读一个字节操作
* 返 回 值: 无
================================================================*/
uchar read_ds18b20(void )
{
idata uchar i,j,k;
j=0;
for(i=0;i<8;i++)
{
j=j>>1;
ds_1820=0;
k=1;
k=1;
k=1;
k=1;
ds_1820=1;
k=1;
k=1;
k=1;
k=1;
if(ds_1820)
{
j=j | 0x80;
}
time(2); //100US
}
return j;
}
/*================================================================
* 函 数 名:void write_ds18b20(uchar wdata)
* 参 数: wdata
* 功能描述: 写ds1820
* 返 回 值:无
================================================================*/
void write_ds18b20(uchar wdata)
{
idata uchar i,k;
for(i=0;i<8;i++)
{
ds_1820=0;
k=1;
k=1;
k=1;
k=wdata & 1; //低位在前
if(k==1)
{
ds_1820=1;
}
else
{
ds_1820=0;
}
wdata=wdata>>1;
time(1); //50US
ds_1820=1;
}
}
/*================================================================
* 函 数 名:void reset_ds18b20(void )
* 参 数: 无
* 功能描述: 复位DS18B20
* 返 回 值:无
================================================================*/
void reset_ds18b20(void )
{
ds_1820=0;
time(10); //复位脉冲至少480US
ds_1820=1;
time(5); //从设备发送应答脉冲60-240US
}
/*================================================================
* 函 数 名:read_wendu()
* 参 数: 无
* 功能描述: 读取温度值
* 返 回 值:无
================================================================*/
void read_wendu(void )
{
reset_ds18b20(); //初始化,所有通信都以初始化序列开始
write_ds18b20(0xcc); //直访ROM,发送功能命令前,必须送出合适的ROM命令
write_ds18b20(0x44); //温度转换
reset_ds18b20(); //初始化
write_ds18b20(0xcc); //直访ROM
write_ds18b20(0xbe); //读取便栈寄存器,发出读数据命令后必须马上产生读时隙
templ=read_ds18b20(); //读温度低位字节
temph=read_ds18b20(); //读温度高位字节
temp=temph*256+templ; //temp是int型
temperature=temp;
if(temperature>0x8000) //零下
{
polar=0;
temperature=~temperature+1; //补码转换为原码
}
else
{
polar=1;//零上
}
temperature=(temperature*5)/8; //转换为十进制数据并放大十倍,先乘5再除8保证温度的精度
if(temperature>999) //使用默认分辨率12位,0.0625
{
temperature=999; //DS1820温度范围是-55-----125
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -