手把手教你使用数字温度传感器DS18B20
第3讲 如何使用DS18B20温度传感器
第讲如何使用DS18B20温度传感器教学方法:讲授法授课时数:2学时教学目的:1、掌握DS18B20的硬件结构2、掌握DS18B20的操作时序3、初步DS18B20的使用编程方法教学重点:DS18B20的使用编程方法教学难点:DS18B20的使用编程方法教学环节:组织教学:检查学生人数,强调作业要求。
新授课:DS18B20的使用编程方法教学目的:1、……..2、……. 教学重点作业一、DS18B20的硬件结构1、……2、……3、……..二、DS18B20的操作时序1、…….2、…….3、……... 三、DS18B20的使用编程方法1、…….2、…….参考资料:DALLAS 达拉斯公司的相应产品资料;《数字温度传感器DS1820(DS18B20)的应用》Skyle整理----skyle@-----有不对之处请来信指正一、DS18B20的硬件结构每只D51820都可以设置成两种供电方式即数据总线供电方式和外部供电方式采取数据总线供电方式可以节省一根导线但完成温度测量的时间较长采取外部供电方式则多用一根导线但测量速度较快DSl820中还有用于贮存测得的温度值的两个8位存贮器RAM编号为0号和1号1号存贮器存放温度值的符号如果温度为负()则1号存贮器8位全为1否则全为00号存贮器用于存放温度值的补码LSB(最低位)的1表示0.5将存贮器中的二进制数求补再转换成十进制数并除以2就得到被测温度值(-550-125)温度计算1、Ds1820用9位存贮温值度最高位为符号位下图为18b20的温度存储方式负温度S=1正温度S=0如00AAH为+85,0032H为25FF92H为552、Ds18b20用12位存贮温值度最高位为符号位下图为18b20的温度存储方式负温度S=1正温度S=0如0550H为+850191H为25.0625,FC90H为-55二、DS18B20的操作时序DSl820工作过程及时序DSl820工作过程中的协议如下初始化、ROM操作命令、存储器操作命令、处理数据1、初始化单总线上的所有处理均从初始化开始2、ROM操作品令总线主机检测到DSl820的存在便可以发出ROM操作命令之一这些命令如指令代码Read ROM(读ROM) [33H]Match ROM(匹配ROM) [55H]Skip ROM(跳过ROM] [CCH]Search ROM(搜索ROM) [F0H]Alarm search(告警搜索) [ECH]3、存储器操作命令指令代码Write Scratchpad(写暂存存储器) [4EH]Read Scratchpad(读暂存存储器) [BEH]Copy Scratchpad(复制暂存存储器) [48H]Convert Temperature(温度变换) [44H]Recall EPROM(重新调出) [B8H]Read Power supply(读电源) [B4H]4、时序主机使用时间隙(time slots)来读写DSl820的数据位和写命令字的位(1)、初始化时序见图2.25-2主机总线to时刻发送一复位脉冲(最短为480us的低电平信号)接着在tl 时刻释放总线并进入接收状态DSl820在检测到总线的上升沿之后等待15-60us接着DS1820在t2时刻发出存在脉冲(低电平持续60-240 us)如图中虚线所示以下子程序在MCS51仿真机上通过其晶振为12M.初始化子程序RESETPUSH B ;保存B寄存器PUSH A 保存A寄存器MOV A,#4 ;设置循环次数CLR P1.0 ;发出复位脉冲MOV B,#250 ;计数250次DJNZ B,$ ;保持低电平500usSETB Pl.0 ;释放总线MOV B,#6 ;设置时间常数CLR C ;清存在信号标志WAITL: JB Pl.0,WH ;若总线释放跳出循环DJNZ B,W AITL ;总线低等待DJNZ ACC,W AITL;释放总线等待一段时间SJMP SHORTWH: MOV B,#111WH1: ORL C,P1.0DJNZ B,WH1 ;存在时间等待SHORT: POP APOP BRET(2)写时间隙当主机总线t o时刻从高拉至低电平时就产生写时间隙见图2253图2254从to时刻开始15us 之内应将所需写的位送到总线上DSl820在t后15-60us间对总线采样若低电平写入的位是0见图2253若高电平写入的位是1见图2254连续写2位间的间隙应大于1us写位子程序(待写位的内容在C中)WRBIT:PUSH B ;保存BMOV B,#28 ;设置时间常数CLR P1.0 ;写开始NOP ;1usNOP ;1usNOP ;1usNOP ;1usN0P ;1usMOVPl.0,C ;C内容到总线WDLT: DJNZ B,WDLT;等待56UsPOP BSETB Pl.0 ;释放总线RET ;返回写字节子程序(待写内容在A中):WRBYTB:PUSH B :保存BMOV B#8H ;设置写位个数WLOP: RRC A ;把写的位放到CACALL WRBIT ;调写1位子程序DJNZ BWLOP ;8位全写完?POP BRET(3)读时间隙见图2255主机总线to时刻从高拉至低电平时总线只须保持低电平l 7ts之后在t1时刻将总线拉高产生读时间隙读时间隙在t1时刻后t 2时刻前有效t z距to为15捍s也就是说t z时刻前主机必须完成读位并在t o后的60尸s一120 fzs内释放总线读位子程序(读得的位到C中)RDBIT:PUSH B ;保存BPUSH A ;保存AMOV B,#23 ;设置时间常数CLR P1.0 ;读开始图2255的t0时刻NOP ;1usNOP ;1usNOP ;1usNOP ;1usSETB Pl.0 ;释放总线MOV A,P1 ;P1口读到AMOV C,EOH ;P1.0内容CNOP ;1usNOP ;1usNOP ;1usNOP ;1usRDDLT: DJNZ B,RDDLT ;等待46usSETB P1.0POP APOP BRET读字节子程序(读到内容放到A中)RDBYTE:PUSH B ;保存BRLOP MOV B,#8H ;设置读位数ACALL RDBIT ;调读1位子程序RRC A ;把读到位在C中并依次送给ADJNZ B,RLOP ;8位读完?POP B ;恢复BRET三、DS18B20的使用编程方法温度转换和读取;|----------------------------------------------------------------------------------------------| ;| 获取单个ds1820转化的温度值的应用程序,P1.6接ds1820 |;|----------------------------------------------------------------------------------------------| ORG 0000HAJMP MAINORG 0020HMAIN:MOV SP,#60HLCALL GET_TEMPSJMP $GET_TEMP:CLR PSW.4SETB PSW.3 ;设置工作寄存器当前所在的区域CLR EA ;使用ds1820一定要禁止任何中断产生LCALL INT ;调用初使化子程序MOV A,#0CCHLCALL WRITE ;送入跳过ROM命令MOV A, #44HLCALL WRITE ;送入温度转换命令LCALL INT ;温度转换完全,再次初使化ds1820MOV A,#0CCHLCALL WRITE ;送入跳过ROM命令MOV A,#0BEHLCALL WRITE ;送入读温度暂存器命令LCALL READMOV R7,A ;读出温度值低字节存入R7LCALL READMOV R6,A ;读出谩度值高字节存入R6SETB EARETINT: ;初始化ds1820子程序CLR EAL0:CLR P1.6 ;ds1820总线为低复位电平MOV R2,#200L1:CLR P1.6DJNZ R2,L1 ;总线复位电平保持400usSETB P1.6 ;释放ds1820总线MOV R2,#30L4:DJNZ R2,L4 ;释放ds1820总线保持60usCLR C ;清存在信号ORL C,P1.6JC L0 ;存在吗?不存在则重新来MOV R6,#80L5:ORL C,P1.6JC L3DJNZ R6,L5SJMP L0L3:MOV R2,#240L2:DJNZ R2,L2RETWRITE: ;向ds1820写操作命令子程序CLR EAMOV R3,#8 ;写入ds1820的bit数,一个字节8个bit WR1:SETB P1.6MOV R4,#8RRC A ;把一个字节data(A)分成8个bit环移给CCLR P1.6 ;开始写入ds1820总线要处于复位(低)状态WR2:DJNZ R4,WR2 ;ds1820总线复位保持16usMOV P1.6,C ;写入一个bitMOV R4,#20WR3:DJNZ R4,WR3 ;等待40usDJNZ R3,WR1 ;写入下一个bitSETB P1.6 ;重新释放ds1820总线RETREAD:CLR EAMOV R6,#8 ;连续读8个bitRE1:CLR P1.6 ;读前总线保持为低MOV R4,#4NOPSETB P1.6 ;开始读总线释放RE2:DJNZ R4,RE2 ;持续8usMOV C,P1.6 ;从ds1820总线读得一个bitRRC A ;把读得的位值环移给AMOV R5,#30RE3:DJNZ R5,RE3 ;持续60usDJNZ R6,RE1 ;读下一个bitSETB P1.6 ;重新释放ds1820总线RETEND。
DS1820数字温度计的使用
35.DS18B20数字温度计使用1.DS18B20基本知识DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。
因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。
1、DS18B20产品的特点(1)、只要求一个端口即可实现通信。
(2)、在DS18B20中的每个器件上都有独一无二的序列号。
(3)、实际应用中不需要外部任何元器件即可实现测温。
(4)、测量温度范围在-55。
C到+125。
C之间。
(5)、数字温度计的分辨率用户可以从9位到12位选择。
(6)、内部有温度上、下限告警设置。
2、DS18B20的引脚介绍TO-92封装的DS18B20的引脚排列见图1,其引脚功能描述见表1。
(底视图)图1表1DS18B20详细引脚功能描述序号名称引脚功能描述1 GND 地信号2 DQ 数据输入/输出引脚。
开漏单总线接口引脚。
当被用着在寄生电源下,也可以向器件提供电源。
3 VDD 可选择的VDD引脚。
当工作于寄生电源时,此引脚必须接地。
3.DS18B20的使用方法由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。
由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。
DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。
该协议定义了几种信号的时序:初始化时序、读时序、写时序。
所有时序都是将主机作为主设备,单总线器件作为从设备。
而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。
数据和命令的传输都是低位在先。
DS18B20的复位时序DS18B20的读时序对于DS18B20的读时序分为读0时序和读1时序两个过程。
使用DS18B20温度传感器测温
248第11章 使用DS18B20温度传感器测温11.1 概述现实生产生活中,小到测量体温的温度计,大到航天飞机的温控系统,处处都离不开温度测量。
工业生产中的三大指标(流量、压力、温度)之一就是温度,温度测量可以说是无处不在,遍布了我们生活生产的方方面面。
DS18B20温度传感器是美国DALLAS 半导体公司生产的数字化温度传感器,它与以往模拟量温度传感器不同,数字化是其一大特点,它能将被测环境温度直接转化为数字量,并以串行数据流的形式,传输给单片机等微处理器去处理。
DS18B20温度传感器的另一个主要特点是它是单总线的,即它与单片机等微处理器连接时,只需占用一个I/O 管脚,并且不再需要其它任何外部元器件,这大大简化了它与单片机之间的接口电路。
11.2 DS18B20温度传感器介绍目前,使用最普遍的DS18B20温度传感器是三脚TO-92直插式封装这一种,这种封装的DS18B20实物如图11-1所示。
可以看到它体积很小,只有三只管脚,外形与一般的三极管极其相似。
图11-2是DS18B20三脚TO-92直插式封装图,表11-1列出了DS18B20各个引脚的定义。
图11-1 DS18B20实物图 图11-2 DS18B20引脚图表11-1 DS18B20引脚定义。
11.2.1 DS18B20温度传感器特性简介◆独特的单总线(一条线)接口,与微处理器通信只需一个I/O 管脚,且硬件连接无需其它外部元件;◆测量结果直接输出数字量,可直接与微处理器通信;◆供电电压范围3.0V~5.5V ;在寄生电源方式下可由数据线供电;◆测温范围-55℃~+125℃;在-10℃~+85℃范围内,测量精度可达±0.5℃;◆可编程的9~12位测温分辨率,对应的可分辨温度值分别为0.5℃,0.25℃,0.125℃,0.0625℃;12位分辨率时的温度测量转换最长时间(上限)只有750ms ;◆每一片DS18B20都有自己独一无二的芯片号码;多片DS18B20可以并联在一条数据总线上,实现不同地点的多点组网;◆应用范围包括温度调控,工业现场测温,消费类产品,温度计及热敏系统等。
DS18B20实用教程
//显示单元数
/*************************11us 延时函数*****************************/ // void delay(unsigned int t) {
for (;t>0;t); } //
/*****************************延时 882us****************************/
读操作
n 当单片机将总线t0时刻从高拉至低电平时,总线只须 保持低电平4us之后,在t1时刻将总线拉高,产生读 时间隙,读时间在t1时刻后t2时刻前有效,t2距t0为 15us,也就是说,t2时刻前主机必须完成读位 并在t0 后的60us~120us内释放总线。
启动温度转换
n 三个步骤: n 1、复位DS18B20
P17=0; delay882us(); P22=1; P23=0; P1=l[xx[3]]; delay882us(); P23=1;
}
/********************************主函数*****************************/
void main()
{
ቤተ መጻሕፍቲ ባይዱ
P0=0xff;
n 2、发出Skip ROM命令(CCH)
n 3、发出Convert T命令(44H)
n 其中Skip ROM命令仅适用于总线上只有一个DS18B20时的情况。
读取温度
n 五个步骤: n 1、复位DS18B20 n 2、发出Skip ROM命令(CCH) n 3、发出Read命令(BEH) n 4、读两字节的温度 n 5、温度格式转换
void delay882us(void)
stm32--温度传感器DS18B20使用
void Delay_us(u32 Nus)
{
SysTick->LOAD=Nus*9;
//时间加载
SysTick->CTRL|=0x01;
//开始倒数
while(!(SysTick->CTRL&(1<<16))); //等待时间到达
SysTick->CTRL=0X00000000;
//关闭计数器
SysTick->VAL=0X00000000;
//清空计数器
}
unsigned char ResetDS18B20(void) { unsigned char resport; SetDQ(); Delay_us(50);
ResetDQ(); Delay_us(500); //500us (该时间的时间范围可以从480到960微秒) SetDQ(); Delay_us(40); //40us //resport = GetDQ(); while(GetDQ()); Delay_us(500); //500us SetDQ(); return resport; }
void DS18B20WriteByte(unsigned char Dat) { unsigned char i; for(i=8;i>0;i--) {
ResetDQ(); //在15u内送数到数据线上,DS18B20在15-60u读数 Delay_us(5); //5us if(Dat & 0x01) SetDQ(); else ResetDQ(); Delay_us(65); //65us SetDQ(); Delay_us(2); //连续两位间应大于1us Dat >>= 1; } }
DS18B20温度传感器的使用方法
DS18B20温度传感器的使用方法;这是关于DS18B20的读写程序,数据脚P2.2,晶振11.0592mhz;温度传感器18B20汇编程序,采用器件默认的12位转化,最大转化时间750微秒;可以将检测到的温度直接显示到AT89C51的两个数码管上;显示温度00到99度,很准确无需校正!ORG 0000H;单片机内存分配申明!TEMPER_L EQU 29H;用于保存读出温度的低8位TEMPER_H EQU 28H;用于保存读出温度的高8位FLAG1 EQU 38H;是否检测到DS18B20标志位a_bit equ 20h ;数码管个位数存放内存位置b_bit equ 21h ;数码管十位数存放内存位置MAIN:LCALL GET_TEMPER;调用读温度子程序;进行温度显示,这里我们考虑用网站提供的两位数码管来显示温度;显示范围00到99度,显示精度为1度;因为12位转化时每一位的精度为0.0625度,我们不要求显示小数所以可以抛弃29H的低4位;将28H中的低4位移入29H中的高4位,这样获得一个新字节,这个字节就是实际测量获得的温度;这个转化温度的方法可是我想出来的哦~~非常简洁无需乘于0.0625系数MOV A,29HMOV C,40H;将28H中的最低位移入CRRC AMOV C,41HRRC AMOV C,42HRRC AMOV C,43HRRC AMOV 29H,ALCALL DISPLAY;调用数码管显示子程序CPL P1.0AJMP MAIN; 这是DS18B20复位初始化子程序INIT_1820:SETB P2.2NOPCLR P2.2;主机发出延时537微秒的复位低脉冲MOV R1,#3TSR1:MOV R0,#107DJNZ R0,$DJNZ R1,TSR1SETB P2.2;然后拉高数据线NOPNOPNOPMOV R0,#25HTSR2:JNB P2.2,TSR3;等待DS18B20回应DJNZ R0,TSR2LJMP TSR4 ; 延时TSR3:SETB FLAG1 ; 置标志位,表示DS1820存在CLR P1.7;检查到DS18B20就点亮P1.7LEDLJMP TSR5TSR4:CLR FLAG1 ; 清标志位,表示DS1820不存在CLR P1.1LJMP TSR7TSR5:MOV R0,#117TSR6:DJNZ R0,TSR6 ; 时序要求延时一段时间TSR7:SETB P2.2RET; 读出转换后的温度值GET_TEMPER:SETB P2.2LCALL INIT_1820;先复位DS18B20JB FLAG1,TSS2CLR P1.2RET ; 判断DS1820是否存在?若DS18B20不存在则返回TSS2:CLR P1.3;DS18B20已经被检测到!!!!!!!!!!!!!!!!!!MOV A,#0CCH ; 跳过ROM匹配LCALL WRITE_1820MOV A,#44H ; 发出温度转换命令LCALL WRITE_1820;这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒LCALL DISPLAYLCALL INIT_1820;准备读温度前先复位MOV A,#0CCH ; 跳过ROM匹配LCALL WRITE_1820MOV A,#0BEH ; 发出读温度命令LCALL WRITE_1820LCALL READ_18200; 将读出的温度数据保存到35H/36HCLR P1.4RET;写DS18B20的子程序(有具体的时序要求)WRITE_1820:MOV R2,#8;一共8位数据CLR CWR1:CLR P2.2MOV R3,#5DJNZ R3,$RRC AMOV P2.2,CMOV R3,#21DJNZ R3,$SETB P2.2NOPDJNZ R2,WR1SETB P2.2RETREAD_18200: ; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据MOV R4,#2 ; 将温度高位和低位从DS18B20中读出MOV R1,#29H ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)RE00:MOV R2,#8;数据一共有8位RE01:CLR CSETB P2.2NOPNOPCLR P2.2NOPNOPNOPSETB P2.2MOV R3,#8RE10:DJNZ R3,RE10MOV C,P2.2MOV R3,#21RE20:DJNZ R3,RE20RRC ADJNZ R2,RE01MOV @R1,ADEC R1DJNZ R4,RE00RET;显示子程序display: mov a,29H;将29H中的十六进制数转换成10进制mov b,#10 ;10进制/10=10进制div abmov b_bit,a ;十位在amov a_bit,b ;个位在bmov dptr,#numtab ;指定查表启始地址mov r0,#4dpl1: mov r1,#250 ;显示1000次dplop: mov a,a_bit ;取个位数MOVC A,@A+DPTR ;查个位数的7段代码mov p0,a ;送出个位的7段代码clr p2.7 ;开个位显示acall d1ms ;显示1mssetb p2.7mov a,b_bit ;取十位数MOVC A,@A+DPTR ;查十位数的7段代码mov p0,a ;送出十位的7段代码clr p2.6 ;开十位显示acall d1ms ;显示1mssetb p2.6djnz r1,dplop ;100次没完循环djnz r0,dpl1 ;4个100次没完循环ret;1MS延时D1MS: MOV R7,#80DJNZ R7,$RET;实验板上的7段数码管0~9数字的共阴显示代码numtab: DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH END。
DS18b20详细的使用方法
1.DS18B20概述DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。
因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。
2、DS18B20产品的特点(1).只要求一个端口即可实现通信。
(2).在DS18B20中的每个器件上都有独一无二的序列号。
(3).实际应用中不需要外部任何元器件即可实现测温。
(4).测量温度范围在-55。
C到+125。
C之间。
(5).数字温度计的分辨率用户可以从9位到12位选择。
(6).内部有温度上、下限告警设置。
3、DS18B20引脚图及引脚功能介绍TO-92封装的DS18B20的引脚排列见图1,其引脚功能描述见表1。
(底视图)图1表1DS18B20详细引脚功能描述4.DS18B20的使用方法由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。
由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。
DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。
该协议定义了几种信号的时序:初始化时序、读时序、写时序。
所有时序都是将主机作为主设备,单总线器件作为从设备。
而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。
数据和命令的传输都是低位在先。
DS18B20的复位时序DS18B20的读时序对于DS18B20的读时序分为读0时序和读1时序两个过程。
对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。
DS18B20在完成一个读时序过程,至少需要60us才能完成。
Ds18b20温度传感器使用手册
Ds18b20温度传感器使用手册一、传感器实物图二、引脚说明(1)1 VCC 3.0~5.5V/DC 3 GND42 DQ 数字信号输入/输出端(2)1 5 GND2 63 VCC 3.0~5.5V/DC 74 DQ 数字信号输入/输出8端三、软件设计功能说明:ds18b20采集温度并显示在1602液晶上#include <reg52.h>#include <stdio.h>#define uchar unsigned char#define uint unsigned intsbit ds=P2^4; //温度传感器信号线uint temp;float f_temp;sbit rs=P1^0; //sbit lcden=P1^2; // 液晶sbit wr=P1^1; //void delay(uint z)//延时函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}/***********液晶**************/void write_com(uchar com){//写液晶命令函数rs=0;lcden=0;P0=com;delay(3);lcden=1;delay(3);lcden=0;}void write_date(uchar date){//写液晶数据函数rs=1;lcden=0;P0=date;delay(3);lcden=1;delay(3);lcden=0;}void init() //液晶初始化{lcden=0;write_com(0x38);write_com(0x0e);write_com(0x06);write_com(0x01);}/***********ds18b20**********/void dsreset(void) //18B20复位,初始化函数{uint i;ds=0;i=103;while(i>0)i--;ds=1;i=4;while(i>0)i--;}bit tempreadbit(void) //读1位函数{uint i;bit dat;ds=0;i++; //i++ 起延时作用ds=1;i++;i++;dat=ds;i=8;while(i>0)i--;return (dat);}uchar tempread(void) //读1个字节{uchar i,j,dat;dat=0;for(i=1;i<=8;i++){j=tempreadbit();dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里}return(dat);}void tempwritebyte(uchar dat) //向18B20写一个字节数据{uint i;uchar j;bit testb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb) //写1{ds=0;i++;i++;ds=1;i=8;while(i>0)i--;}else{ds=0; //写0i=8;while(i>0)i--;ds=1;i++;i++;}}}void tempchange(void) //DS18B20 开始获取温度并转换{dsreset();delay(1);tempwritebyte(0xcc); // 写跳过读ROM指令tempwritebyte(0x44); // 写温度转换指令}uint get_temp() //读取寄存器中存储的温度数据{uchar a,b;dsreset();delay(1);tempwritebyte(0xcc);tempwritebyte(0xbe);a=tempread(); //读低8位b=tempread(); //读高8位temp=b;temp<<=8; //两个字节组合为1个字temp=temp|a;f_temp=temp*0.0625; //温度在寄存器中为12位分辨率位0.0625°temp=f_temp*10+0.5; //乘以10表示小数点后面只取1位,加0.5是四舍五入f_temp=f_temp+0.05;return temp; //temp是整型}uchar change(uchar a) //将数字转换为字符{uchar b;if(a==0) b='0';if(a==1) b='1';if(a==2) b='2';if(a==3) b='3';if(a==4) b='4';if(a==5) b='5';if(a==6) b='6';if(a==7) b='7';if(a==8) b='8';if(a==9) b='9';return b;}void dis_temp(uint t) //显示程序{uchar a,b;write_com(0x80+0x40);a=t/100;b=change(a);write_date(b); //十位数delay(5);a=t%100/10;b=change(a); //个位数write_date(b);delay(5);write_date(0x2e); //小数点delay(5);a=t%100%10;b=change(a); //十分位write_date(b);delay(5);write_date(0xdf); //摄氏度的符号delay(5);write_date(0x43);delay(5);}void main(){wr=0;init();while(1){write_com(0x01);tempchange();dis_temp(get_temp());delay(500);}}。
DS18B20温度传感器使用简介
DS18B20温度传感器使⽤简介DS18xx系列温度传感器是数字式温度传感器,相对于传统温度传感器精度⾼、稳定性好、电路简单、控制⽅便,在这⾥以DS18B20为例做简单应⽤介绍。
详细资料请参阅芯⽚⼿册。
⼀、特性:(1)应⽤中不需要外部任何元器件即可实现测温电路。
(2)测温范围-55~+125℃,最⼤精度0.0625℃。
(3)只通过⼀条数据线即可实现通信。
(4)每个DS1820器件上都有独⼀⽆⼆的序列号,所以⼀条数据线上可以挂接很多该传感器。
(5)内部有温度上、下限告警功能。
⼆、操作简介DS18B20⼯作时需要接收特定的指令来完成相应功能(指令,可以简单的理解为可以被识别并有相应意义的⼀系列⾼低电平信号),它的指令可分为ROM指令和RAM指令;ROM指令主要对其内部的ROM进⾏操作,如查所使⽤DS18B20的序列号等,如果只使⽤⼀个DS18B20,ROM操作⼀般就可以直接跳过了;RAM指令主要是完成对其内RAM中的数据进⾏操作,如让其开始进⾏数据采集、读数据等。
DS18B20数字温度传感器是单总线器件,数据的读写只通过⼀条数据线进⾏并且这⼀条线上允许挂很多该传感器;这样对器件进⾏读写指令时就会⿇烦⼀些,必须应⽤特定时序来识别⾼低电平信号(如写⾼电平1,并不是把数据线直接拉⾼,⽽是⽤有⼀定时序关系的⾼低电平来代表写1),所以指令表中的0、1在写给DS18B20时就得变成代表0、1电平的时序段序列。
同样,从DS18B20读数据时,也是由特定的时序来完成数据读取。
对DS18B20进⾏读写的时序图如下:硬件连接⽅式有两种,⼀种是由单独电源供电(3~5V);第⼆种是由数据线为DS18B20供电(⼯作速度相对较慢)。
单独电源供电⽅式数据线为DS1820供电⽅式三、DS1820的⼯作过程:1. 复位操作2. 执⾏ROM操作的5条指令之⼀:1)读ROM,2)匹配ROM,3)搜索ROM,4)跳过ROM,5)报警搜索。
DS18B20温度传感器的控制方法
DS18B20温度传感器的控制方法DS18B20的初始化:(1)先将数据线置高电平“1”。
(2)延时(该时间要求的不是很严格,但是尽可能的短一点)(3)数据线拉到低电平“0”。
(4)延时750微秒(该时间的时间范围可以从480到960微秒)。
(5)数据线拉到高电平“1”。
(6)延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由DS18B20所返回的低电平“0”。
据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。
(7)若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。
(8)将数据线再次拉高到高电平“1”后结束。
DS18B20的写操作:(1)数据线先置低电平“0”。
(2)延时确定的时间为15微秒。
(3)按从低位到高位的顺序发送字节(一次只发送一位)。
(4)延时时间为45微秒。
(5)将数据线拉到高电平。
(6)重复上(1)到(6)的操作直到所有的字节全部发送完为止。
(7)最后将数据线拉高。
DS18B20的读操作:(1)将数据线拉高“1”。
(2)延时2微秒。
(3)将数据线拉低“0”。
(4)延时15微秒。
(5)将数据线拉高“1”。
(6)延时15微秒。
(7)读数据线的状态得到1个状态位,并进行数据处理。
(8)延时30微秒。
根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。
表2 ROM指令表指令约定代码功能读ROM 33H 读DS1820温度传感器ROM中的编码(即64位地址)符合ROM 55H 发出此命令之后,接着发出64 位ROM 编码,访问单总线上与该编码相对应的DS1820 使之作出响应,为下一步对该DS1820 的读写作准备。
温度18b20使用说明
一、18B20简介DS18B20是一个数字温度采集组件,它可以将周围温度直接转换成温度值。
其引脚只有3根,只需一根线DQ与MCU相连,就能实现数据通信。
传感器DS18B20DS18B20数字温度计使用1.DS18B20基本知识DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。
因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。
1、DS18B20产品的特点(1)、只要求一个端口即可实现通信。
(2)、在DS18B20中的每个器件上都有独一无二的序列号。
(3)、实际应用中不需要外部任何元器件即可实现测温。
(4)、测量温度范围在-55。
C到+125。
C之间。
(5)、数字温度计的分辨率用户可以从9位到12位选择。
(6)、内部有温度上、下限告警设置。
2、DS18B20的引脚介绍TO-92封装的DS18B20的引脚排列见图1,其引脚功能描述见表1。
(底视图)图1表1 DS18B20详细引脚功能描述序号名称引脚功能描述1GND地信号2DQ数据输入/输出引脚。
开漏单总线接口引脚。
当被用着在寄生电源下,也可以向器件提供电源。
3VDD可选择的VDD引脚。
当工作于寄生电源时,此引脚必须接地。
寄生电源:器件直接由串行接口(1-Wire)供电鼠标器、键盘内部芯片的供电就是用的寄生电源3.DS18B20的使用方法由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。
由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。
DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。
该协议定义了几种信号的时序:初始化时序、读时序、写时序。
ds18b20程序设计傻瓜式讲解
ds18b20程序设计傻瓜式讲解
DS18B20 是一款数字温度传感器,可以直接读出被测温度,并采用 9 位数字量串行输出。
下面是一个简单的 DS18B20 程序设计讲解:
1. 初始化
在 DS18B20 通信过程中,首先需要初始化数据线,即将其置为高电平。
在初始化时,需要持续至少 480 微秒的高电平。
2. 跳过 ROM
在 DS18B20 中,每个传感器都有一个唯一的 ROM 序列号,可以通过跳过ROM 操作来避免对 ROM 进行操作。
具体操作是先发出一个低电平,然后持续至少 60 微秒的高电平。
3. 发送命令
在跳过 ROM 后,需要向传感器发送命令。
常用的命令有温度转换命令和读取温度命令。
温度转换命令是 0x44,读取温度命令是 0xBE。
4. 读取数据
在发送命令后,需要等待传感器响应。
传感器响应的标志是数据线上的低电平。
在低电平持续约 60-240 微秒后,数据线将变为高电平,此时可以开始读取数据。
每次读取一位数据后,需要将数据线置为低电平,等待传感器响应。
5. 数据解析
DS18B20 的数据由 9 位数字量组成,其中最高位是符号位。
如果最高位为0,则表示温度为正数;如果最高位为 1,则表示温度为负数。
其余 8 位为温度值,可以通过一定的计算公式将其转换为实际温度值。
以上就是 DS18B20 的程序设计流程。
需要注意的是,在实际应用中,还需要考虑数据传输的校验、错误处理等问题。
亿学通电子 DS18B20 温度传感器使用手册
1) DS18B20 是DALLAS 公司生产的一线制数字温度传感器; 2) 具有3 引脚TO-92 小体积封装形式; 3) 温度测量范围为-55℃~+125℃; 4) 电源供电范围为3V~5.5V ; 5) 可编程为9 位~12 位数字表示;6) 测温分辨率可达0.0625℃,被测温度用符号扩展的16 位数字量方式串行输出;7) 其工作电源既可在远端引入,也可采用寄生电源方式产生;8) 多个DS18B20 可以并联到3 根(VDD、DQ 和GND)或2 根(利用DQ 线供电、GND)线上,CPU 只需一根端口线就能与总线上的多个串联的DS18B20 通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
TO-92封装的DS18B20DS18B20 的管脚排列及不同封装形式如图 2所示,DQ 为数字信号输入/输出端;GND 为电源地;VDD 为外接供电电源输入端(在寄生电源接线方式时接地,见),NC 表示无连接。
管脚图DS18B20内部结构如图3所示,主要由4 部分组成:64 位ROM 、温度传感器、非易失性存储的温度报警触发器TH 和TL 、配置寄存器。
DS18B20管脚DS18B20概述DS18B20内部结构图非常适用于远距离多点温度检测系统。
DQ-数据输入输出。
漏极开路1 线接口。
也在寄生电源模式时给设备提供电源。
访问DS18B20 的顺序如理初始化;DS18B20读写 连接图应用领域ROM 命令(接着是任何需要的数据交换);DS18B20 函数命令(接着是任何需要的数据交换)。
每一次访问DS18B20 时必须遵循这一顺序,如果其中的任何一步缺少或打乱它们的顺序,DS18B20 将不会响应。
(1)初始化时序所有与DS18B20 的通信首先必须初始化:控制器发出复位脉冲,DS18B20 以存在脉冲响应。
DS18B20测温教程
DS18B20一、DS18B20背景介绍美国Dallas半导体公司的数字化温度传感器DS18B20是世界上第一片支持 "一线总线"接口的温度传感器,在其内部使用了在板(O N-B0ARD)专利技术。
全部传感元件及转换电路集成在形如一只三极管的集成电路内。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
二、DS18B20主要特性在传统的模拟信号远距离温度测量系统中,需要很好的解决引线误差补偿问题、多点测量切换误差问题和放大电路零点漂移误差问题等技术问题,才能够达到较高的测量精度。
因此,DS18B20具有以下特性:1.适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电2.独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯3.DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温4.DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内5.温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃6.可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温7.在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快8.测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力9.负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。
三、DS18B20的外形和内部结构1、DS18B20的外形结构如下图所示:DS18B20引脚定义:(1)DQ为数字信号输入/输出端;(2)GND为电源地;(3)VDD为外接供电电源输入端。
友台半导体有限公司 DS18B20H 单总线温度传感器说明书
特点 ● 单总线接口,节约布线资源● 应用简单,无需额外器件● 转换温度时间500ms● 可编程9~12位数字输出●宽供电电压范围● 每颗芯片有可编程的ID 序列号 ● 用户可自行设置报警值 ● 超强ESD 保护能力(HBM>8000V )● 典型待机电流功耗1µA @3V ●典型换电流功耗0.6mA@3V典型应用● 便携应用,手机与穿戴设备● 温度监控 ●粮情监测● 智能家电系统 ● 水温测量● 建筑、设备或机房内部温度监测系统● 过程监测和控制系统概述是一款高精度的单总线温度测量芯片。
温度传感器的测温范围为-55°C 到+125°C ;根据用户需要通过配置寄存器可以设定数字转换精度和测温速度。
芯片内置4byte 非易失性存储单元供用户使用,2byte 用于高低温报警,另外2byte 用于保存用户自定义信息。
在-10°C 到+85°C 范围内最大误差为±°C 。
用户可自主选择电源供电模式和寄生供电模式。
单总线接口允许多个设备挂在同一总线,该特性使得也非常便于部署分布型温度采集系统。
管脚图和管脚描述34167852GNDDQ VDD MSOP82.5V-5.5V DS18B20H DS18B200.4DS18B20图1 DS18B20框图结构框图图1是DS18B20的原理框图。
64位ROM存储了器件的唯一序列码。
暂存器包含了两个字节的温度寄存器,存储来自于温度传感器的数字输出。
另外,暂存器提供了一高一低两个报警触发阈值寄存器(TH和TL)。
配置寄存器允许用户设定温度数字转换的分辨率为9,10,11或12位。
2个字节的用户可编程E2PROM是非易失性存储,器件掉电时数据不会失去。
DS18B20使用单总线协议,总线通讯通过一根控制信号线实现。
控制线需要一个弱上拉电阻这样所有的器件都通过三态或者开漏极端口(就是DS18B20的DQ引脚)连接到总线上。
DS18B20使用教程
DS18B20 单线通信功能是分时完成的,他有严格的时隙概念,如果出现序列混乱, 1-WIRE 器件将不响应主机,因此读写时序很重要。系统对 DS18B20 的各种操作必 须按协议进行。根据 DS18B20 的协议规定,微控制器控制 DS18B20 完成温度的转 换必须经过以下 4 个步骤 : (1)每次读写前对 DS18B20 进行复位初始化。复位要求主 CPU 将数据线 下拉 500us ,然后释放, DS18B20 收到信号后等待 16us~60us 左右,然后发出 60us~240us 的存在低脉冲,主 CPU 收到此信号后表示复位成功。 (2)发送一条 ROM 指令
主机首先发出一个480-960微秒的低电平脉冲,然后释放总线变为高电平,并在随后 的480微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。 若无低电平出现一直都是高电平说明总线上无器件应答。 做为从器件的DS18B20在一上电后就一直在检测总线上是否有480-960微秒的低 电平出现,如果有,在总线转为高电平后等待15-60微秒后将总线电平拉低60-240微 秒做出响应存在脉冲,告诉主机本器件已做好准备。若没有检测到就一直在检测等待。
(3)发送存储器指令
DS18B20 的存储器指令集
现在我们要做的是让DS18B20进行一次温度的转换,那具体的操作就是: 1、主机先作个复位操作, 2、主机再写跳过ROM的操作(CCH)命令, 3、然后主机接着写个转换温度的操作命令,后面释放总线至少一秒,让 DS18B20完成转换的操作。在这里要注意的是每个命令字节在写的时 候都是低字节先写,例如CCH的二进制为11001100,在写到总线上时 要从低位开始写,写的顺序是“零、零、壹、壹、零、、壹、壹”。 整个操作的总线状态如下图。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
手把手教你使用数字温度传感器DS18B20
单片机轻松入门教学 ------- 『电子驿站』原创,转载请注明出处!
--------------------------------------------------------------------------------------------
-------------------
查看上一课:新型数字温度传感器DS18B20介绍
在上一课中,我们学习了DS18B20新型数字温度传感器的基础理论知识,对DS18B20的特性及应用有了较全面的了解,本课我们就结合S51增强型实验板,ISP编程器来学习DS18B20的应用软件编程,做DS18B20测温实验,DIY一个我们自己的数字温度计,通过本实验的学习,熟练掌握DS18B20的开发,相信你也可以自己的智能温控系统!
首先介绍实验的硬件设备:S51增强型单片机实验板+ISP编程器+DS18B20温度传感器
图1:S51增强型单片机实验板+配套温度传感器
实验板红外遥控及DS18B20接口
产品配套温度传感器DS18B20
(已焊接好并经过测试,免去初学者因焊接不好损坏DS18B20的风险,采用屏蔽线焊接,热缩管绝缘保护,防插反接头,抗干扰能力强,测温精度更高,插入实验板即可使用)
注:如图中所示,实验板的第5位数码管可以显示温度的符号"℃",做温度实验更加直观。
将配套温度传感器插入DS18B20实验接口,完成温度传感器的硬件连接。
图2:ISP编程器套件 DS18B20测温实验原理图见下面图3
图3
新建Keil工程ds18sy.UV2,输入下面的DS18B20测温实验源程序,编译得到HEX格式目标文件ds18sy.hex。
>>>点击下载DS18B20测温实验目标程序ds18sy.hex>>>
>>>点击下载DS18B20测温实验源程序>>>
;--------- 下面是DS18B20测温实验源程序 ---------
ORG 0000H
START: MOV SP,#60H ;开机初始化
MOV P0,#0FFH
MOV P1,#0FEH
MOV P2,#0FFH
MOV P3,#0FFH
MAIN: LCALL GET_TEMPER ;调用读温度子程序
LCALL DISP ;调用数码管显示子程序
AJMP MAIN ;重复循环
;------ 读DS18B20传感器的温度值 ------
GET_TEMPER:
SETB P3.3
LCALL RST18B20 ;复位DS18B20
JB 00H,DSS2
RET
DSS2: MOV A,#0CCH ;跳过ROM匹配
LCALL WR18B20
MOV A,#44H ;向DS18B20发出温度转换命令
LCALL WR18B20
LCALL RST18B20 ;准备读温度前先复位DS18B20
MOV A,#0CCH ;跳过ROM匹配
LCALL WR18B20
MOV A,#0BEH ;向DS18B20发出读温度命令
LCALL WR18B20
LCALL RE18B20 ;读出温度数据
RET
;------ DS18B20复位初始化程序 ------
RST18B20:
SETB P3.3
NOP
CLR P3.3
MOV R0,#06BH ;主机发出复位低脉冲
MOV R1,#03H
DSR1: DJNZ R0,DSR1
MOV R0,#6BH
DJNZ R1,DSR1
SETB P3.3 ;拉高数据线
NOP
NOP
NOP
MOV R0,#25H
DSR2: JNB P3.3,DSR3 ;等待DS18B20回应
DJNZ R0,DSR2
LJMP DSR4
DSR3: SETB 00H ;置标志位,表示DS1820存在LJMP DSR5
DSR4: CLR 00H ;清标志位,表示DS1820不存在LJMP DSR7
DSR5: MOV R0,#06BH
DSR6: DJNZ R0,DSR6 ;延时一段时间
DSR7: SETB P3.3
RET
;------ 写DS18B20的子程序 ------
WR18B20:
MOV R2,#8
CLR C
WR1: CLR P3.3
MOV R3,#6
DJNZ R3,$
RRC A
MOV P3.3,C
MOV R3,#23
DJNZ R3,$
SETB P3.3
NOP
DJNZ R2,WR1
SETB P3.3
RET
;------ 从DS18B20中读温度数据程序 ------
RE18B20:
MOV R4,#2
MOV R1,#2FH
RE00: MOV R2,#8
RE01: CLR C
SETB P3.3
NOP
NOP
CLR P3.3
NOP
NOP
NOP
SETB P3.3
MOV R3,#09
RE10: DJNZ R3,RE10
MOV C,P3.3
MOV R3,#23
RE20: DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
;-------- 显示子程序 --------
DISP: MOV A,2FH
MOV C,70H
RRC A
MOV C,71H
RRC A
MOV C,72H
RRC A
MOV C,73H
RRC A
MOV 2FH,A
MOV A,2FH
MOV B,#10
DIV AB
MOV 30H,A
MOV 31H,B
MOV A,30H
MOV DPTR,#SGTB
MOVC A,@A+DPTR
MOV P0,A ;显示温度“十位”值
CLR P2.2
SETB P2.0
SETB P2.1
SETB P2.3
SETB P2.4
LCALL YS4722U
MOV A,31H
MOV DPTR,#SGTB
MOVC A,@A+DPTR
MOV P0,A ;显示温度“个位”值
CLR P2.3
SETB P2.0
SETB P2.1
SETB P2.2
SETB P2.4
LCALL YS4722U
MOV A,#01000110B
MOV P0,A ;显示温度符号“℃”
CLR P2.4
SETB P2.0
SETB P2.1
SETB P2.2
SETB P2.3
LCALL YS4722U
RET
;************* 8位共阳数码管显示器字型码表 ***************** SGTB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H,8EH,89H,0A3H,8CH,0C8H
YS4722U:
MOV R4,#10 ;延时子程序
Y3: MOV R5,#216
DJNZ R5,$
DJNZ R4,Y3
RET
END
用ISP编程器将目标文件ds18sy.hex烧写到AT89S51单片机中(见下图)
图4:ISP编程器烧写目标文件ds18sy.hex。