当前位置:编程学习 > 网站相关 >>

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       
}                                            //
补充:综合编程 , 其他综合 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,