钻石会员
  
主题
帖子
积分11063
阅读权限50
注册时间2009-12-25
最后登录1970-1-1
在线时间 小时
|
本帖最后由 狗狗百里游 于 2011-5-18 18:22 编辑
/*
//温度分辨率调整
void ds18b20_setup_bit( unsigned char RES, unsigned char TH, unsigned char TL , unsigned char write, ds18b20_typedef * _ds18b20_) //res 分别等于 0x1f, 0x3f, 0x5f, 0x7f 温度读数分辨率分别对应
// 0.5, 0.25, 0.125 ,0.0625(12Bit)
// Config :0x1F:9位, 0x3F:10位 ,0x5F:11位 ,0x7F:12位
// 所需时间: 93.75ms 187.75ms 375ms 750ms
//ds18b20_setup_bit(0x7F,0x00,0x00,0x01,&ds18b20_n1);//12位转化温度分辨率,不报警,保存设置到EPPROM
{
if (read_power_supply(_ds18b20_) != 2)//判断ds18b20是否存在,顺便获取供电方式
{
RESET_18b20(_ds18b20_); //复位
write_18b20( 0xcc, _ds18b20_ ); //跳过Rom
write_18b20( 0x4e , _ds18b20_); //写暂存器
write_18b20( TH , _ds18b20_); //写TH,报警上限
write_18b20( TL , _ds18b20_); //写TL,报警下限
write_18b20( RES , _ds18b20_); //写结构寄存器
if (write == 1)
{
RESET_18b20(_ds18b20_); //复位
write_18b20( 0xcc, _ds18b20_ ); //跳过Rom
write_18b20( 0x48, _ds18b20_ ); //把暂存器内容写到EPPROM中
if (_ds18b20_->ds18b20_power == 0) //如果不是1-wire总线寄生供电,就不使用,强上拉,减少损坏电路可能
{
SET_18B20_IO_qiang_vcc; //强上拉_高电平_输出状态
}
delay_ms_18b20(20); //写EPRam需要10ms,的供电,如果是寄生电源供电,就需要强上拉10ms
RESET_18b20(_ds18b20_); //复位
write_18b20( 0xcc, _ds18b20_ ); //跳过Rom
write_18b20 (0xb8, _ds18b20_); //回调设定值
}
}
}
很久没修改18b20的代码了,我翻了一下,我估计设置了分辨率,报警上下限,是立刻生效的,不用把暂存器内容写到EPPROM中,18b20断电重启重新读取EPPROM的,我估计的啊!,你也可以单片机上电的时候读取EPPROM,发现分辨率不对就写入一次。
我上传有一个中文翻译的说明书,你看中文翻译的第七页,你对比官方说明书看看。
DS18B20.pdf
(218.99 KB, 下载次数: 335)
DS18B20 单总线数字温度计.pdf
(432.15 KB, 下载次数: 428)
|
|