51单片机——单总线OneWrite、DS18B20温度传感器 C语言入门编程

发布者:九九归一74最新更新时间:2022-09-19 来源: csdn关键字:51单片机  单总线  DS18B20  温度传感器  编程 手机看文章 扫描二维码
随时随地手机看文章

单总线OneWrite:

(1)初始化时序:

单总线上的所有通信都是以初始化序列开始。主机输出低电平,保持低电平时间至少480us(该时间的时间范围可以从480到960微妙),以产生复位脉冲。接着主机释放总线,外部的上拉电阻将单总线拉高,延时15~60us,并进入接收模式。接着DS18B20拉低总线60~240us,以产生低电平应答脉冲,若为低电平,还要做延时,其延时的时间从外部上拉电阻将单总线拉高算起最少要480微妙。


(2)写时序:

写时序包括写0时序和写1时序。所有写时序至少需要60us,且在2次独立的写时序之间至少需要1us的恢复时间,两种写时序均起始于主机拉低总 线。写1时序:主机输出低电平,延时2us,然后释放总线,延时60us。写0时序:主机输出低电平,延时60us,然后释放总线,延时2us。(写完要置1)

(3)读时序:

单总线器件仅在主机发出读时序时,才向主机传输数据,所以,在主机发出读数据命令后,必须马上产生读时序,以便从机能够传输数据。所有读时序至少需要60us,且在2次独立的读时序之间至少需要1us的恢复时间。每个读时序都由主机发起,至少拉低总线1us。主机在读时序期间必须释放总线(置1),(拉低然后释放才能开始读)并且在时序起始后的15us之内采样总线状态。

DS18B20的典型温度读取过程为:复位→发SKIP ROM命令(跳过ROM)(0XCC)→发开始转换命令(0X44)→延时→复位→发送SKIP ROM命令(0XCC)→发读存储器命令(0XBE)→连续读出两个字节数据(即温度)→结束。


DS18B20:

DS18B20是由DALLAS半导体公司推出的一种的“一线总线(单总线)”接口的温度传感器。与传统的热敏电阻等测温元件相比,它是一种新型的体积小、 适用电压宽、与微处理器接口简单的数字化温度传感器。适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电。DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上, 实现组网多点测温。温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃。可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温。在9位分辨率时最多在 93.75ms内把温度转换为数字,12位分辨率时 最多在750ms内把温度值转换为数字,速度更快。电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。DS18B20温度传感器的内部存储器包括一个高速的暂存器RAM和一个非易 失性的可电擦除的EEPROM,后者存放高温度和低温度触发器TH、TL和配置寄存 器。(配置ROM请看手册)

 

 

1.DS18B20温度传感器:数码管显示当前温度

单总线OneWrite函数


#include

#include "intrins.h"

 

sbit OneWrite_IO=P3^7;

 

unsigned char i;

 

unsigned char OneWrite_Init(void)

{

    unsigned char ACK;

    OneWrite_IO=1;

    OneWrite_IO=0;//保持低电平至少480us

    i = 230;while (--i);//500us 执行一个函数名需要5ms,所以延时函数设置505us,删除函数名

    OneWrite_IO=1;//释放总线60us 并且进入读应答时间

    _nop_();i = 29;while (--i);//65us 70us

    ACK=OneWrite_IO;//读应答并结束初始化

    i = 230;while (--i);//500us 505us

    return ACK;

}

 

void OneWrite_WriteBit(unsigned char Bit)

{

    OneWrite_IO=0;//先拉低10us

    i = 4;while (--i);//10us 15us

    OneWrite_IO=Bit;//根据需要写入的位,输入Bit

    _nop_();i = 22;while (--i);//50us 55us

    OneWrite_IO=1;//总延时60us,释放总线

}

unsigned char OneWrite_ReceiveBit(void)

{

    unsigned char Bit;

    OneWrite_IO=0;//拉低总线

    i = 2;while (--i);//5us 10us

    OneWrite_IO=1;//发起读时序期间释放总线,并且不到采样时间

    i = 2;while (--i);//5us 10us

    Bit=OneWrite_IO;//采样 总延时60us

    _nop_();i = 22;while (--i);//50us 55us

    return Bit;

}

 

void OneWrite_WriteByte(unsigned char Byte)//单总线写一个字节

{

    unsigned char i;

    for(i=0;i<8;i++)

    {

        OneWrite_WriteBit(Byte&(0x01<    }

}

 

unsigned char OneWrite_ReceiveByte(void)//单总线接收一个字节

{

    unsigned char i;

    unsigned char Byte=0x00;

    for(i=0;i<8;i++)

    {

        if(OneWrite_ReceiveBit()){Byte|=(0x01<    } 

    return Byte;

}


         DS18B20函数


#include

#include "OneWrite.h"

 

void DS18B20_CT(void)//温度转换

{

    OneWrite_Init();//初始化

    OneWrite_WriteByte(0xcc);//跳过ROM

    OneWrite_WriteByte(0x44);//开始转换命令

}

 

float DS18B20_ReadT(void)//读取温度

{

    unsigned char H,L;

    unsigned int Temp;

    float T;

    OneWrite_Init();//初始化

    OneWrite_WriteByte(0xcc);//跳过ROM

    OneWrite_WriteByte(0xbe);//读存储器命令

    L=OneWrite_ReceiveByte();//发出读数据命令后,马上读时序

    H=OneWrite_ReceiveByte();

    Temp=(H<<8)|L;//两个八位数据合并为一个十六位数据

    T=Temp/16.0;//转变为浮点数

    return T;

}


        主函数


#include

#include "DS18B20.h"

#include "shumaguan.h"

 

void main()

{

    float T;

    while(1)

    {

        DS18B20_CT();

        T=DS18B20_ReadT();

        shumaguan(3,T/10);

        shumaguan(4,(unsigned int)T%10);

        shumaguan(5,(unsigned int)(T*10)%10);

        shumaguan(6,(unsigned int)(T*100)%10);

    }

}

关键字:51单片机  单总线  DS18B20  温度传感器  编程 引用地址:51单片机——单总线OneWrite、DS18B20温度传感器 C语言入门编程

上一篇:51单片机——SPI、DS1302时钟 C语言入门编程
下一篇:51单片机——IIC、EEPROM数据存储 C语言入门编程

推荐阅读最新更新时间:2024-10-31 16:36

ADI发布高度可编程超级时序控制器
要使计算机有条不紊地工作,对各种操作信号的产生时间、稳定时间、撤销时间及相互之间的关系都有严格的要求。对操作信号施加时间上的控制,称为时序控制。只有严格的时序控制,才能保证各功能部件组合有机的计算机系统。 计算机的时间控制称为 时序 。指令系统中每条 指令 的操作均由一个 微操作 序列完成,这些微操作是在微操作控制信号控制下执行的。即指令的执行过程是按时间顺序进行的,也即计算机的工作过程都是按时间顺序进行的。时序系统的功能是为指令的执行提供各种操作定时信号。 Analog Devices, Inc. (ADI) 宣布推出Power by Linear™ ADM1266 Super Sequencer® 超级时序控制器
[电源管理]
ADI发布高度可<font color='red'>编程</font>超级时序控制器
45-基于51单片机的甲醛浓度检测报警系统
具体实现功能 系统由STC89C52单片机+ZE08-CH2O甲醛传感器+LCD1602液晶显示屏+按键+蜂鸣器+指示灯+电源构成。 具体功能: 1、甲醛传感器测得甲醛数据后经过单片机处理,由LCD1602实时显示; 2、可通过按键设置甲醛报警阈值; 3、测得的甲醛浓度超过报警阈值时,开始声光报警。 设计背景 如今自动化、信息化程度越来越高,随着社会的发展、科技的进步以及人们生活水平的逐步提高,各种方便于生活的自动控制系统开始进入了人们的生活,同时也标志了自动控制领域成为了数字化时代的一员。以单片机为核心的自动门系统就是其中之一。它实用性强,功能齐全,技术先进,使人们相信这是科技进步的成果。它更让人类懂得,数字
[单片机]
45-基于<font color='red'>51单片机</font>的甲醛浓度检测报警系统
LM35温度传感器特性及应用
LM35是一种得到广泛使用的温度传感器。由于它采用内部补偿,所以输出可以从0℃开始。该器件采用塑料封装TO992,工作电压4~30V,所以乍一看来,它似乎是无需校准的LM335。    在上述电压范围以内,芯片从电源吸收的电流几乎是不变的(约50μA),所以芯片自身几乎没有散热的问题。这么小的电流也使得该芯片在某些应用中特别适合,比如在电池供电的场合中,输出可以由第三个引脚取出,根本无需校准。    目前,已有两种型号的LM35可以提供使用。LM35DZ输出为0℃~100℃,而LM35CZ输出可覆盖-40℃~110℃,且精度更高,两种芯片的精度都比LM335高,不过价格也稍高。    在最简单的应用中,LM35可以按图1那样连接,
[嵌入式]
51单片机AD转换的程序
void Read_init (unsigned char CHA){ unsigned char AD_FIN=0; //存储A/D转换标志 CHA = 0x07; //选择ADC的8个接口中的一个(0000 0111 清0高5位) ADC_CONTR = 0x40; //ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置) _nop_(); ADC_CONTR |= CHA; //选择A/D当前通道 _nop_(); ADC_CONTR |= 0x80; //启动A/D电源 DELAY_MS(1)
[单片机]
<font color='red'>51单片机</font>AD转换的程序
51单片机+ULN2003驱动5V减速步进电机程序
51单片机 步进电机 /******************************************************* ULN2003驱动5V减速步进电机程序 Target:STC89C52RC-40C Crystal:12MHz Author:战神单片机工作室 Platform:51&avr单片机最小系统板+ULN2003步进电机驱动套件 ******************************************************* 接线方式: IN1 ---- P00 IN2 ---- P01 IN3 ---- P02 IN4 ---- P03 + ---- +5V - ---- GN
[单片机]
基于MPC555的发动机电控系统的嵌入式编程接口库设计
  本文介绍的柴油机电控系统嵌入式软件平台就是面向汽车电子,遵循OSEK标准,应用于汽车动力总成控制的系统平台。 软件平台由微型系统内核和应用编程接口库组成。嵌入式操作系统内核负责任务调度及事件处理等,编程接口库负责将开发常用的算法和MPC555底层硬件的驱动函数进行控件级封装,供用户调用。在嵌入式系统中,开发人员通过调用编程接口库中已有的API函数,就可以实现常用运算功能以及常规硬件操作。    图1 发动机电控系统层次图   整个电控系统包括硬件平台、底层驱动、嵌入式软件平台和上层用户四个层次。各个层次关系,如图1所示。    硬件平台简介   发动机电控系统硬件平台主控CPU为MPC555,它是一款高
[嵌入式]
51单片机-单片机简介
1.单片机了解 单片机是一块集成电路的控制芯片,我们熟知的家电例如洗衣机的定时控制和滚筒运作,电饭煲的保温功能和鸣叫提醒,电冰箱,空调等等这些电器大部分由单片机根据程序运作进行控制。当然,单片机的用途不只这些,还包括智能仪器,工业控制,汽车电子,航空航天等领域。 2.就业与比赛 目前单片机在大部分电子通信专业的就业领域还是占有一席之地的,毕竟单片机功能强大,用途广泛,相关资料已经成熟,就业门栏相对于有基础实践经验的同学来说并不难。 而单片机的初学者中,大学生占主要部分,此时他们已掌握一定的常识和数学基础,也有宽裕的时间和学校实验室平台的支持。大部分学生学习单片机除了做点电子DIY外,最主要还是为了参加全国电子设计竞赛等技术性的
[单片机]
51单片机入门 - SPI协议与应用实验
简介: 串行外围设备接口 全双工三线同步,可以同时发出和接收串行数据 采用主从(Master Slave)架构,支持多Slave模式应用,一般仅支持单Slave 时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后 目前应用中可以达到几Mbps的水平 优点:与普通的串行设备相比,可以按位传输,甚至可以暂停。当没有时钟跳变时,从设备不采集和传送数据。不需要寻址操作。全双工通信。 缺点:没有应答机制确认。 特点: 提供频率可编程时钟 发送结束、中断标志;写冲突保护 总线竞争保护 SPI总线工作的4种工作方式中,使用最广泛的是SPI0和SPI3方式 - - - - - - - - - -
[单片机]
<font color='red'>51单片机</font>入门 - SPI协议与应用实验
热门资源推荐
热门放大器推荐
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved