DS18B20温度读取笔记1-复位函数
DS18B20主要性质:全数字输入/输出单总线通信结构 (只占用一个IO口,而且在这个IO口上能挂接多个DS18B20)
内部温度为12bit分辨率,精度为正负0.5℃ (注意不要将精度和分辨率混为一谈)
12位分辨率的时候转换工作周期最长为750ms (算是比较慢的外设了,设计时要考虑多任务工作的要求)
可以使用寄生电源模式(可以再省掉VCC的线,这种模式下总共只要2根线就能工作,但是对IO口有特别要求)
工作温度范围为:-55℃至+125℃(理论值,实际工作温度小于此值)
内置唯一产品序列号,方便都器件联机工作(内部序列号还可以做他用,例如:用作加密的密钥)
封装:
TO-92封装为最常用(其他我没用过- -!)
引脚位为器件扁平面朝上,引脚朝向自己,左起依次为 GND - DQ - VCC
驱动步骤模块:
1. 复位:每次对DS18B20操作都要进行复位。复位操作为MCU将DS18B20单总线拉低至少480us,拉低后MCU应当释放单总线(拉高)然后置单总线引脚为输入状态。当DS18B20收到复位信号并且MCU释放了单总线后,延迟15至60uS后会回发一个回复信号(会拉低总线60至240uS)。具体时序图见下图:
Reset函数伪代码:
DQ为单总线引脚
DQ_INPUT为单总线引脚设置为输入模式
DQ_OUTPUT为单总线引脚设置为输出模式
DQ_READ为读单总线引脚状态
DQ_L为单总线引脚输出低
DQ_H为单总线引脚输出高
delay_us(n):微秒延迟函数,n等于几就延迟多少微秒
uint32 count;循环计数器,用以等待回复信号,无符号32位整形变量。
uint8 Reset18b20(void)
{
uint8 read; //DQ引脚状态暂存
uint8 err; //err出错计数器
DQ_L; //拉低总线
delay_us(520); //延迟520微秒,时序上最低延迟480us就可以了,但是考虑到延迟可能有偏差所以稍稍
//延长延时用以确保可靠复位,只要保证能可靠复位此处延迟秒数可以自定(大于480)
DQ_H; //拉高释放总线并改为输入模式
DQ_INPUT;
delay(60); //延迟60微秒
for (count = 0; count < 65535; count++) //count计数防止复位失败出错,如果MCU速度太快可以使用
{ //更大的计数量
if (DQ_READ == 0) //读引脚状态,如果拉低了则复位成功
{
read = 1; //复位成功,成功标志置1
break; //退出循环
}
}
DQ_OUTPUT; //设置引脚为输出并置高
DQ_H;
if (read == 0) //如果复位不成功了则出错变量增1
{
err += 1;
}
return err; //返回出错变量,外部判断如果为0则成功,不是0
} //
补充:综合编程 , 其他综合 ,