历史上的今天

今天是:2024年08月26日(星期一)

正在发生

2018年08月26日 | STC89C52MCU -- DS18B20温度传感器

发布者:数字冲浪 来源: eefocus关键字:STC89C52  MCU  DS18B20  温度传感器 手机看文章 扫描二维码
随时随地手机看文章

DS18B20温度传感器采用“单总线”串行传输方式

目前单片机数据传输的串行总线主要由Inter IC Bus, SPI和SCI。其中IIC总线以同步串行二线方式进行通信(一条数据线、一条时钟线),SPI总线则是以同步串行三线方式进行通信(一条时钟线,一条数据输入线,一条数据输出线),而SCI总线是以异步方式进行通信(一条输入线,一条输出线)。DS18B20采用单条信号线,既可以传输时钟又可以传输数据,而且数据是双向传输,因而这种总线技术具有线路简单,硬件开销少、陈本低廉,便于总线扩展等优点。单总线适用于单主机系统,能够控制一个或者多个从机设备。

设备(主机或者从机)通过一个漏极开路或三态端口连接至数据线,以允许设备在不发送数据时能够释放总线,而让求他设备使用总线。单总线通常要求外接一个约为5Kohm的上拉电阻

工作原理


64位光刻ROM各位定义
8位CRC码48位序列号8位产品类型标号


首先是DS18B20的控制命令

1. 33H - 读ROM。读取DS18B20温度传感器ROM中的编码(64位地址)

2. 55H- 匹配ROM。发出此命令后,接着发出64位ROM码,访问单总线上相对应的DS18B20并使之作出响应,为下一步对该模块读写做准备;

3. F0H- 搜索ROM。用于确定挂载在同一总线上DS18B20的个数,识别64位ROM地址,位操作和期间做准备。

4. CCH - 跳过ROM。忽略64位ROM地址,直接向18B20发温度变换指令,适用于一个从几工作形式

5. ECH - 告警搜索命令。执行后只有温度超多设定值上限或者下线的时候芯片才做出响应。


64位光刻ROM中的序号是粗长前就被可好的,他可以看作该模块的地址序列号。光刻ROM的作用就是使每个DS18B20都具有不一样的序列号,这样就可以实现在一条总线上挂载多个DS18B20的目的。

常见模式:当主机需要与众多在线DS18B20中某一个连接时,首先将主机逐个与DS18B20挂载,读出器序列号,然后再将所有的DS18B20挂载到总线上,单片机发出匹配ROM命令(55H),紧接着主机提供64位序列号之后的操作就只针对此DS18B20。

如果主机只与一个DS18B20进行操作,就不需要读取ROM编码,以及匹配编码,只要用跳过ROM指令,就可以进行如下的温度转化和读取操作。

1. 44H -- 温度转换。启动DS18B20进行温度转换,12转换时间长度为750ms(9位时长93.75ms)。结果存入内部RAM中。

2. BEH -- 读暂存器。读内部RAM中的9字节的温度数据 

3. 4EH -- 写暂存器;发出向内部RAM的第2,3字节写上、下限数温度数据命令,紧跟该命令之后,是传输两字节数据。

4. 48H-- 复制暂存器;将RAM中的第2、3字节内容复制到EEPROM中。

5.B8H -- 重调EEPROM。将EEPROM的内容复制到RAM中的第3、4字节。

6. B4H -- 读取供电方式。读DS18B20的供电模式,寄生供电时,DS18B20发送0;外接电源供电时,DS18B20发送1;

高速暂存RAM


高速暂存RAM
寄存器内容字节地址
温度值低位(LSB)0
温度值高位(MSB)1
高温限制(TH)2
低温限制(LH)3
配置寄存器4
保留5
保留6
CRC校验8

少了一个保留至在第七位

温度数据在高速暂存寄存器的第0、1字节中存储格式


温度数据存储格式
D7D6D5D4D3D2D1D0








D15D14D13D12D11D10D9D8








DS18B20在出厂默认设置是12位精度,其中最高位为符号位,即温度值共11位,单片机在读取数据时,一次会读取两字节共16位,读完后将低11位的二进制数转化为十进制数后,再乘以0..625便为所测量的实际温度。另外需要判断温度的正负值、前五位数字为符号位,着5位同时变化。同时为1时候,读取的温度为负值,且测量到的温度需要取反加一再乘以0.0625才可以得到正确温度值,前五位为0时,读取温度为正值,直接乘以0.0625即可。

DS18B20编程例子

sbit ds = P2^2;

//DS18B20复位操作, 信号线由低电平到高电平启动DS18B20,高低电平时间需要满足时间

void dsreset()

{

uint i;

ds =0;

i =103;

while(i)

i--;

ds =1;

i=4;

while(i)

i--;

}


//读取1位数据函数(1->0->1)

bit tempreadbit(void)

{

uint i;

bit dat;

ds = 0;

i++;

ds = 1;

i++; i++;

dat = da;

i = 8;

while(i>0)

i--;

return dat;

}


//读取一个字节函数

uchar tempream(void)

{

uchar i,j,dat;

dat =0;

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

{

j = tempreadbit();

dat = (j<<7)|(dat>>1);

}

return dat;

}


//向DS18B20写一个字节

void tempwritebyte(uchar dat)

{

uint i;

uchar j;

bit testb;

for(j=1;j<=8;j++)

{

testb = dat &0x01;

dat = dat<<1;

if(testb)

{

ds = 0;

i++;i++;

ds =1;

i =8;while(i) i--;

}

else

{

ds =0;

i =8;while(i) i--;

ds =1;

i++;i++;

}

}

}

//获取温度并转换

void tempchange()

{

dsreset();

delay(1);

tempwritebyte(0xcc);//跳过ROM指令

tempwritebyte(0x44);//写温度转换指令

}

//读取寄存器中存储的温度数据

uint_temp()

{

uchar a,b;

dsreset();

delay(1);

tempwritebyte(0xcc);

tempwritebyte(0xbe);

a = tempread();//低88位

b = tempread();//高8位

temp = b;

temp <<=8;

temp = temp | a ;

f_temp = temp * 0.0625;//温度在寄存器中为12位

temp = f_temp * 10+ 0.5;//乘以10表示小数点后面只去一位,加上0.5是四舍五入

f_temp =  f_temp + 0.05;

return temp;

}


关键字:STC89C52  MCU  DS18B20  温度传感器 引用地址:STC89C52MCU -- DS18B20温度传感器

上一篇:STC89C52MCU -- 双机通信及多机通信
下一篇:STC89C52MCU --内部EEPROM的应用和内部扩展RAM的应用

推荐阅读

索尼公司前天宣布其的bo机器狗正在抵达美国。 此次发行的新Aibo机器狗比以前发行的机器狗更时尚。售前服务从9月份开始,10月14日会在美国曼哈顿的索尼广场向美国公众展出。 该产品使用先进的相机和技术来感知房间环境,因此它可以自由活动并轻松的找到充电的地方自行充电。所以公司称,该产品的的独特识别设备可以识别100多个面孔,并成功记住与人类的...
一、串口的配置1)首先打开你的工程,在STM32Cube里面找到USART1,此时串口默认是Disanle的,我们要使能它,选择Asynchronous.2)然后点击Configuration,就会有一个串口的配置图框,点进去配置串口,如果需要用到中断,选择NVIC进去进行相关配置。串口配置:串口中断使能:点击NVIC选项,设置优先级和分组二、查看串口内的函数APIKeil工程内选择{ }Functi...
程序一:#include<pic.h>__CONFIG(WDTDIS);#define delay_i 4#define delay_j 10000void delays(){int i=0;int j=0;for(i=0;i<=delay_i;i++){for(j=0;j<=delay_j;j++);}}void main(void){int i=0;char NUM[]={0b00111111,0b00000110,0b01011011,0b01001111,0b01100110,0b01101101,0b01011111,0b00000111,0b01111111,0b01101111};TRISC=0;while(1...
概述飞思卡尔半导体是全球最大的半导体公司之一。飞思卡尔是车用半导体微控制器(MCU)领域排名第一的供应商。飞思卡尔在业内提供最高质量的Flash存储器。飞思卡尔的微控制器按CPU字长分为8位、16位和32位。飞思卡尔微控制器飞思卡尔8位微控制器MC9S08DZ60它在一个单芯片上提供了更多的存储器和组件。S08DZ系列是S08D系列中的旗舰号,提供了飞思卡尔最低成...

史海拾趣

问答坊 | AI 解惑

WTV系列芯片在电表上的应用

WTV系列芯片在电表上的应用         安全生产是每个工厂的第一任务。在各种电力柜设备当中,最怕的就是误操作,它带来的损失是很大的,比如造成机器故障、产品报废。如何让每位操作人员在任何时候不出错呢?我们可以从增强操 ...…

查看全部问答∨

触摸ic

触摸ic TCH10适合于家用电器产品,增加产品的美观和使用方便性,提升产品价值。 特点:有效防止溅水,水淹3mm能正常工作。       采用高精度测量芯片,感应灵敏度高,采用科学的测试算法,保证可靠性。      ...…

查看全部问答∨

干燥箱与试验箱有什么de区别呢?

1/使用不同的 电热鼓风干燥箱,主要用于项目,盐雾腐蚀试验箱。除了高温干燥箱商会功能,而且还主要用于电器,电子和其他非易燃易爆高温性能的材料试验,环境试验室。 2/主要技术指标的不同 烤箱温度均匀不大于最大工作温度的± 2.5 % ,低温 ...…

查看全部问答∨

用超级终端通过串口线与MC55进行at指令通信所出现的问题

向大家请教一个问题,用超级终端通过串口线与MC55进行at指令通信,以下是我写入的指令,返回值都是“ok”,at^sics=0,conType,GPRS0 at^sics=0,passwd,gprs at^sics=0,user,cm at^sics=0,apn,cmnet at^siss=1,srvType,socket at^siss=1,conId, ...…

查看全部问答∨

问个小问题,ARM板配触摸屏~

买来的板子是3.5寸液晶触摸屏,咨询了下卖家说还提供7寸的,我如果想配更大尺寸的,可以吗? 从市面上直接买一个触摸屏,要连上使用,需要做什么工作? 要实现这个复杂吗? 请指点!谢谢!! …

查看全部问答∨

EVC 下如何显示png图片?

   WinCE5.0平台,EVC 下如何显示png图片?…

查看全部问答∨

J2ME 一定要有JAVA基础吗

我想考嵌入式系统分析师,先学习J2ME  可以不 望各位提出建议  谢谢…

查看全部问答∨

使用SD卡刷新image

不知道有没有人做过ce5.0下面的可以使用SD卡刷image的bootload?最好能提供一份源码.我的邮箱tiandi.zhu@gmail.com…

查看全部问答∨

免费申请LM3S8962 评估套件

呵呵,版主这么快就回复了,工作真尽职阿,应版主要求,俺写的详细一点, 项目需要,想申请一套 [ 本帖最后由 zhangjifei 于 2010-10-18 11:00 编辑 ]…

查看全部问答∨

怎么用STVP来修改STM8L152C6的IO口对应的外设啊?

因为STM8S103可以用STVP读取OPTION_BYTE,然后可以更改对应管脚的资源嘛,好比,把串口挪到别的IO口上去。 今天用STVP读取STM8L152C6的OPTION_BYTE。在STVP中选择好STM8L152X6后,STVP更新了下,结果对应的OPTION_BYTE中的内容没有可以修改管 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

更多每日新闻

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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