Skyc整理-skvc@163.com一有不对之处请来信指正 数字温度传感器DS1820(DS18B20)的应用 一、单线数字温度计DS1820介绍 DS1820数字温度计提供9位(二进制)温度读数,指示器件的温度。信息经过单线接口送 入DSI820或从DSI820送出,因此从主机CPU到DS1820仅需一条线(和地线)。DSI820的 电源可以由数据线本身提供而不需要外部电源。因为每一个DS820在出厂时已经给定了唯 一的序号,因此任意多个DS1820可以存放在同一条单线总线上。这允许在许多不同的地方 放置温度敏感器件 。DS1820的测量范围从-55℃到+125℃,增量值为0.5℃,可在1s典型值 内把温度变换成数字。 每一个DS1820包括一个唯一的64位长的序号,该 序号值存放在DSI820内部的ROM(只读存贮器)中。开始 8位是产品卷型绾码DS1820编码均为10H。接若的48 位是每个器 的序号。最后8 位是前面56位的 CRC(循环元余校验)码。DSI820中还有用于则 存测得的温度值的两个8位存贮器RAM,编号为0号和1 GND V 号。1号存贮器存放温度值的符号,如果温度为负(℃), 则1号存器8位全为1,否则全为0.0号存器用于有 放温度值的补码,LSB最低位)的“1”表示05℃。将存 图2.26-1 DS1820的9引脚 .GND, 贮器中的 进制数求补再转换成十进制数并除以2就得到 2.DQ:数字输入/输出 被测温度值(-550℃一125℃)。DS1820的引脚如图2.26 1所示。每只D51820都可以设置成两种供电方式,即数据 V的+v电 总线供电方式和外部供电方式。采取数据总线供电方式可以节省一根导线,但完成温度测量 的时间较长:采取外部供电方式则多用一根导线,但测量速度较快。 温度计算 1、Ds1820用9位存贮温值度,最高位为符号位,下图为18b20的温度存储方式,负温度 S=1,正温度S=0。如: 00AAH为+85℃,0032H为25C,FF92H为-55℃ TEMPERATURE REGISTER FORMAT Figure 2 s子学子学学学罗”与 2、Ds18b20用12位存贮温值度,最高位为符号位,下图为18b20的温度存储方式,负温度 $=1,正温度$=0。如: 0550H为+85℃,0191H为+25.0625℃,FC90H为-55℃
Skyle 整理-skyle@163.com-有不对之处请来信指正 数字温度传感器 DS1820(DS18B20)的应用 一 单线数字温度计 DSl820 介绍 DSl820 数字温度计提供 9 位(二进制)温度读数 指示器件的温度 信息经过单线接口送 入 DSl820 或从 DSl820 送出 因此从主机 CPU 到 DSl820 仅需一条线(和地线) DSl820 的 电源可以由数据线本身提供而不需要外部电源 因为每一个 DSl820 在出厂时已经给定了唯 一的序号 因此任意多个 DSl820 可以存放在同一条单线总线上 这允许在许多不同的地方 放置温度敏感器件 DSl820 的测量范围从-55 到+125 增量值为 0.5 可在 l s(典型值) 内把温度变换成数字 每一个 DSl820 包括一个唯一的 64 位长的序号 该 序号值存放在 DSl820 内部的 ROM(只读存贮器)中 开始 8 位是产品类型编码(DSl820 编码均为 10H) 接着的 48 位是每个器件唯一的序号 最后 8 位是前面 56 位的 CRC(循环冗余校验)码 DSl820 中还有用于贮 存测得的温度值的两个 8 位存贮器 RAM 编号为 0 号和 1 号 1 号存贮器存放温度值的符号 如果温度为负( ) 则 1 号存贮器 8 位全为 1 否则全为 0 0 号存贮器用于存 放温度值的补码 LSB(最低位)的 1 表示 0.5 将存 贮器中的二进制数求补再转换成十进制数并除以 2 就得到 被测温度值(-550 125 ) DSl820 的引脚如图 2 26 l 所示 每只 D51820 都可以设置成两种供电方式 即数据 总线供电方式和外部供电方式 采取数据总线供电方式可以节省一根导线 但完成温度测量 的时间较长 采取外部供电方式则多用一根导线 但测量速度较快 温度计算 1 Ds1820 用 9 位存贮温值度 最高位为符号位 下图为 18b20 的温度存储方式 负温度 S=1 正温度 S=0 如 00AAH 为+85 ,0032H 为 25 FF92H 为 55 2 Ds18b20 用 12 位存贮温值度 最高位为符号位 下图为 18b20 的温度存储方式 负温度 S=1 正温度 S=0 如 0550H 为+85 0191H 为 25.0625 ,FC90H 为-55
TEMPERATURE REGISTER FORMAT Figure 2 MS Byte ss ss s 22 2 二、DS1820工作过程及时序 DS1820工作过程中的协议如下: 初始化:RM操作命令;存储器操作命令;处理数据。 1.初始化 单总线上的所有处理均从初始化开始。 2.ROM操作品今 总线主机检测到DS1820的存在, 便可以发出ROM操作命令之一,这些命令如 指令 代码 Read ROM(读ROM) [33H Match ROM(匹配ROM) [55Hm Skin ROMO跳讨ROMI ICCHI Search ROM(搜素ROM 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)来读写DSI820的数据位和写命令字的位 (1)初始化 时序见图2.25-2。主机总线t0时刻发送一复位脉冲(最短为480us的低电平信号),接着 在H时刻释放总线并进入接收状态,DSI820在检测到总线的上升沿之后,等待15-60us,接 若DS1820在t2时刻发出存在脉冲(低电平,持续60-240s),如图中虚线所示。 以下子程序在MCS51仿真机上通过,其晶振为12M。初始化子程序 40a一960e150人 图2.25-2初始化时序 RESET:
二 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. 初始化子程序 RESET
PUSH B ,保存B寄存器 PUSH A 保存A寄存器 MOVA#料 CLR P1. MOV B.#250 :计数250次 DInZ B ,保持低电平500us SETR PIO :释放总线 MOV B.#6 设置时间常数 CLRC 清存在信号标志 WAITL:JB PI.O.WH ,若总线释放,跳出循环 DINZ B.WAITL :总线低,等待 DJNZ ACC,WAITL,释放总线等特一段时间 SJMP SHORT MOV B.#111 ORLC.P1.0 DJNZ B.WHI :存在时间等待 SHORT:POP A POP B RET (2)写时间隙 当主机总线t0时刻从高拉至低电平时,就产生写时间隙,见图2.25一3、图2.25一 4,从to时刻开始15us之内应将所需写的位送到总线上,DS1820在t。后15-60us间对总线 采样。若低电平,写入的位是0,见图2.25一3:若高电平,写入的位是1,见图2.254。 连续写2位间的间隙应大于1us。 ->60 15十i5-60p >I 图2.253写0时序 图2.25-4写1时序 写位子程序(待写位的内容在C中): WRBIT: PUSH B :保存B MOV B#28 :设置时间常数 :写开 NO :lus NOP Tus NOP :lus NOP MOVPL.O.C C内容到总线 WDLT:DNZB,WDLT,等待56Us POP B
PUSH B ;保存 B 寄存器 PUSH A 保存 A 寄存器 MOV A,#4 ;设置循环次数 CLR P1.0 ;发出复位脉冲 MOV B,#250 ;计数 250 次 DJNZ B,$ ;保持低电平 500us SETB Pl.0 ;释放总线 MOV B,#6 ;设置时间常数 CLR C ;清存在信号标志 WAITL: JB Pl.0,WH ;若总线释放 跳出循环 DJNZ B,WAITL ;总线低 等待 DJNZ ACC,WAITL;释放总线等待一段时间 SJMP SHORT WH: MOV B,#111 WH1: ORL C,P1.0 DJNZ B,WH1 ;存在时间等待 SHORT: POP A POP B RET (2)写时间隙 当主机总线 t o 时刻从高拉至低电平时 就产生写时间隙 见图 2 25 3 图 2 25 4 从 to 时刻开始 15us 之内应将所需写的位送到总线上 DSl820 在 t 后 15-60us 间对总线 采样 若低电平 写入的位是 0 见图 2 25 3 若高电平 写入的位是 1 见图 2 25 4 连续写 2 位间的间隙应大于 1us 写位子程序(待写位的内容在 C 中) WRBIT: PUSH B ;保存 B MOV B,#28 ;设置时间常数 CLR P1.0 ;写开始 NOP ;1us NOP ;1us NOP ;1us NOP ;1us N0P ;1us MOVPl.0,C ;C 内容到总线 WDLT: DJNZ B,WDLT;等待 56Us POP B
SETB PL.0:释放总线 RET 返回 写字节子程序(待写内容在A中) WRBYTB: PUSH B 保存B MOV B.#8H 设置写位个数 WLOP: 把写的位放到 ACALL WRBIT 写1位 程房 DNZB,WLOP:8位全写完 POPB RET (3)读时间隙 见图2,25 5,主机总线to时刻从高拉至低电平时,总线只须保持低电平17s。之后 在t1时刻将总线拉高,产生读时间隙,读时间隙在t1时刻后t2时刻前有效。tz距to为15 捍s,也就是说,tz时刻前主机必须完成读位,并在t0后的60尸s一120fs内释放总线。 读位子程序(读得的位到C中): >60u5 主机起作用 +15 作用 上拉电阻起作 图2.25-5读时序 RDBIT: PUSH B :保存B PUSHA :保存A MOV B#23 :设置时间常数 CLRP1.0 读开始,图2.25一5的t0时刻 NO NOP Tus NOP lus NOP SETB PLO MOV A,PI P1口读到A MOV C.EOH :P1.0内容0 NOP :lus NOP lus NOP NOP RDDLT:DINZ B,RDDLT ;等待46us SETB PLO POPA
SETB Pl.0 ;释放总线 RET ;返回 写字节子程序(待写内容在 A 中): WRBYTB: PUSH B :保存 B MOV B #8H ;设置写位个数 WLOP: RRC A ;把写的位放到 C ACALL WRBIT ;调写 1 位子程序 DJNZ B WLOP ;8 位全写完? POP B RET (3)读时间隙 见图 2 25 5 主机总线 to 时刻从高拉至低电平时 总线只须保持低电平 l 7ts 之后 在 t1 时刻将总线拉高 产生读时间隙 读时间隙在 t1 时刻后 t 2 时刻前有效 t z 距 to 为 15 捍 s 也就是说 t z 时刻前主机必须完成读位 并在 t o 后的 60 尸 s 一 120 fzs 内释放总线 读位子程序(读得的位到 C 中) RDBIT: PUSH B ;保存 B PUSH A ;保存 A MOV B,#23 ;设置时间常数 CLR P1.0 ;读开始 图 2 25 5 的 t0 时刻 NOP ;1us NOP ;1us NOP ;1us NOP ;1us SETB Pl.0 ;释放总线 MOV A,P1 ;P1 口读到 A MOV C,EOH ;P1.0 内容 C NOP ;1us NOP ;1us NOP ;1us NOP ;1us RDDLT: DJNZ B,RDDLT ;等待 46us SETB P1.0 POP A
POP B RET 读字节子程序(读到内容放到A中): RDBYTE PUSH B ;保存B RLOP:MOV B#8H :设置读位数 ACALL RDBIT :调读1位子程序 RRC A 把读到位在C中并依次送给A DJNZ B.RLOP 8位读完 POP B ;恢复B RET 三、多路测 每 DSI820在其ROM中都存有其唯 一的48位序列号,在出厂前已写入片内RON 中,主机在进入操作程序前必须逐一接入1820用读ROM(33H)命令将该1820的序列号读出 并登录。 当主机需要对众多在线1820的某一个讲行操 量180个数B 作时,首先要发出匹配ROM命令(55H,紧接者主 味过R 机提供 位序列(包括该1820的48位 序列号) 后的操作就是针对该1820的。而所谓跳过ROM命 等持1 令即为:之后的操作是对所有1820的。框图中先有 初 跳过ROM,即是启动所有1820进行温度变换,之 后,通过匹配ROM,再逐一地读回每个1820的温 B-1=0r 度数据 是 在1820组成的测温系统中,主机在发出跳过 图2.25-6多降测温程序 ROM命令之后,再发出统一的温度转换启动码44H,就可以实现所有1820的统一转换,再 经过15后,就可以用很少的时间去逐一读取。这种方式使其T值往往小于传统方式(由于 采取公用的放大电路和A/D转换器,只能逐一转换。),显然通道数越多,这种省时效应就 越明显。 四、实际应用 1、ds1820序列号获得 读出ds1820序列号应用程序,P1.6接ds1820 ORG 0000H AJMP MAIN ORG 0020H MAIN: MOV SP.#60H CLR EA ;使用ds1820一定要禁止任何中断产生 LCALL INT :初始化ds1820 MOV A.#33H
POP B RET 读字节子程序(读到内容放到 A 中) RDBYTE: PUSH B ;保存 B RLOP MOV B,#8H ;设置读位数 ACALL RDBIT ;调读 1 位子程序 RRC A ;把读到位在 C 中并依次送给 A DJNZ B,RLOP ;8 位读完? POP B ;恢复 B RET 三 多路测量 每一片 DSl820 在其 ROM 中都存有其唯一的 48 位序列号 在出厂前已写入片内 ROM 中 主机在进入操作程序前必须逐一接入 1820 用读 ROM(33H)命令将该 l 820 的序列号读出 并登录 当主机需要对众多在线 1820 的某一个进行操 作时 首先要发出匹配 ROM 命令(55H) 紧接着主 机提供 64 位序列(包括该 1820 的 48 位序列号) 之 后的操作就是针对该 1820 的 而所谓跳过 ROM 命 令即为 之后的操作是对所有 1820 的 框图中先有 跳过 ROM 即是启动所有 1820 进行温度变换 之 后 通过匹配 ROM 再逐一地读回每个 1820 的温 度数据 在 1820 组成的测温系统中 主机在发出跳过 ROM 命令之后 再发出统一的温度转换启动码 44H 就可以实现所有 1820 的统一转换 再 经过 1s 后 就可以用很少的时间去逐一读取 这种方式使其 T 值往往小于传统方式 由于 采取公用的放大电路和 A D 转换器 只能逐一转换 显然通道数越多 这种省时效应就 越明显 四 实际应用 1 ds1820 序列号获得 ;|-| ;| 读出 ds1820 序列号应用程序,P1.6 接 ds1820 | ;|-| ORG 0000H AJMP MAIN ORG 0020H MAIN: MOV SP,#60H CLR EA ;使用 ds1820 一定要禁止任何中断产生 LCALL INT ;初始化 ds1820 MOV A,#33H