}
        delay(45);    //延时500us
        flag = ~DQ;
    }
    DQ=1;
}                                                                      
               
图16 DS18B20初始化时序图
此初始化程序功能为:检测DS18B20是否存在,如存在,将位地址38H置1;如不存在,将位地址38H清零。
3.4.2 DS18B20写时序
单片机写DS18B20的时序如图17所示,当主机总线从高拉至低电平时就产生写时间隙,DS18B20在检测到下降沿后15μS时开始采样总线上的电平,所以15μS之内应将所需写的位送到总线上,DS18B20再15—60μS间对总线采样,每写一位总时间必须在60—120μS之间完成。若低电平写入的位是0,高电平写入的位是1,连续写时位间的间隙应大于1μS。程序如下所示:
void write_byte(uint8 val)
{
    uint8 i;
    for (i=0; i<8; i++)
    {
        DQ = 1;
        _nop_();
        DQ = 0;
        nops(); //4us
        DQ = val & 0x01;      //最低位移出
        delay(6);           //66us
        val >>= 1;          //右移一位
    }
    DQ = 1;
    delay(1);  
}
图17 单片机写DS18B20时序图
3.4.3 读时序
单片机读DS18B20的时序如图18所示,单片机主动产生一个下降沿的启动信号,并文持低电平大于1μS后释放总线,15μS后DS18B20占主动权,DS18B20会将数据按位放在总线上(低位在先,当读取两个字节的温度值时,低字节在先),这时单片机可读取信号,读取一位的时间应在60μS内完成。当需要读取下一位时再产生下降沿启动信号。
uint8 read_byte(void)
{   uint8 i, value=0;
    for (i=0; i<8; i++)
    {
        DQ=1;
        _nop_();
        value >>= 1;
        DQ = 0;
        nops();   //4us
        DQ = 1;
        nops();   //4us
        if (DQ)
        value|=0x80;
        delay(6);           //66us
    }
    DQ=1;
    return(value);
}
图18 单片机读DS18B20时序图
此程序功能为:读取DS18B20 A/D转换后的温度值,转换后的二进制存入36H、35H单元,默认为12位转换,低8位存入36H单元,高8位存入35H单元(35H单元的高5位均为符号位,所以判断符号只需判断低12位数据的最高位即可)。1表示为零度以下,0表示零度以上,实际有效位为11位。
上一篇:基于PLC的立体停车库控制系统设计+仿真图+梯形图
下一篇:PLC智能信息处理的扶梯节能控制系统设计与开发

单片机数字红外测距系统设计+电路图+程序

基于51单片机自动门智能控制系统设计

STC89C52单片机智能温度监测系统设计

STC89C52单片机盲人用时钟的设计+电路图+程序

粉料称重装置的单片机控...

STM32单片机的无刷直流电机控制系统设计

AT89S52单片机车内空气检测系统设计+源代码

辩护律师的作证义务和保...

浅谈新形势下妇产科护理...

拉力采集上位机软件开发任务书

《醉青春》导演作品阐述

国内外无刷直流电动机研究现状

高校网球场馆运营管理初探【1805字】

中国古代秘书擅权的发展和恶变

浅谈传统人文精神茬大學...

多元化刑事简易程序构建探讨【9365字】

谷度酒庄消费者回访调查问卷表