温度传感器实验笔记重点_第1页
温度传感器实验笔记重点_第2页
温度传感器实验笔记重点_第3页
温度传感器实验笔记重点_第4页
温度传感器实验笔记重点_第5页
已阅读5页,还剩20页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DS18B20温度传感器实验笔记李 进 2008-12-10DS18b20用12位存贮温度值,最高位为符号位。 下表(表1)为18b20的温度存储方式。负温度S = 1,正温度S = 0。 温度值以补码表示。正数与原码相同,负数是补码,需要再次求补后才能正确显示。如:0550H 为+85,0191H 为+25.0625,FC90H 为-55。DS18B20的输出位数被设置成(9,10,11或12bit ),出厂的默认值是12bit 。对应的分辨率是0.5,0.25,0.125或0.0625。使用Convert T44h命令启动一次转换,温度的16位转换值存于暂存器中,并扩展两位符号位。使用Read ScratchpadBEh命令,将温度值通过1线口输出,低位(LSB )首先输出。 LSB MSB整型数表示(int 型,最高4位无用) 表格数据说明:表中的数据是从18B20中读取的温度值,以补码的形式表示。因此,其真实值应求补得到,(补码的补码为真值)。1. 正数的补码就是该数本身,因此不必求补得真。例如,+0.5C 读得0000 0000 0000 1000B,前4位舍掉后,所余的最高位(D11)是符号位,0代表正数。最后4位(D3D0)是小数,按小数化为十进制数,因此 .1000 B= 0.5。85.0读数舍掉最高4位后,得0101 0101 0000B,所余12位二进制数,最高位(D11)是符号位,0表示正数,D10D4共7位101 0101B = 85,后4位是小数;25.0625读得0001 1001 0001B。整数部分意义同上,前7位整数001 1001B = 25,最后4位小数: .0001B = .06252. 负数求补得真值。求补时不必考虑小数点位置,读得的测温结果是16位二进制数,最高4位无用舍去,所余12位保留最高位(D11)符号位不变,其余11位求补,得到真值。在送显示需要化为十进制数时,再考虑按前7位整数,后4位小数进行转化。真值的前7位是整数,按整数化为十进制数,最后4位是小数。按小数化为十进制小数。例如-0.5,读得1111 1111 1111 1000,舍去最高4位后,所余的最高位(D11)是符号位,1代表负数,D10D0求补得到000 0000 1000B。最后4位(D3D0)是小数,按小数化为十进制数,因此1000 0000 1000B = -0.5-85读数舍掉最高4位后,得1010 1011 0000B,最高位(D11)是符号位,1表示负数,D10D0共11位010 1011 0000,对其求补得 101 0101 0000B = 85,加上符号位是1101 0101 0000B = - 85,后4位是小数0;-25.0625C 读得1111 1110 0110 1111,舍掉最高4位后,得1110 0110 1111,保留符号位,求补得: 1001 1001 0001B,化为十进制数为 -25.0625 。对18B20操作时,无论读写,所有数据都是以最低有效位在前的方式进行读写。18B20控制命令字 1、温度转换时间可长达500ms 。接到温度转换的协议后,如果器件不是从VDD 供电的话,I/O线就必须至少保持500ms 高电平。这样,发出一个Convert T 命令之后,单线总线上在这段时间内就不能有其他活动。 2、接到Copy Scratchpad 协议后,如果器件不是从VDD 供电的话,I/O 线必须至少保持10ms 高电平。这样,在发出一个Copy Scratchpad 命令后,这段时间内单线总线上就不能有其他活动。总线控制器发出(TX )一个复位脉冲(一个最少保持480s 的低电平信号),然后释放总线,进入接收状态(RX )。单线总线由5K 上拉电阻拉到高电平。探测到I/O 引脚上的上升沿后,DS1820 等待1560s ,然后发出存在脉冲(一个60240s 的低电平信号)。初始化通过单线总线的所有执行(处理)都从一个初始化序列开始。初始化序列包括一个由总线控制器发出的复位脉冲和跟有其后由从机发出的存在脉冲。存在脉冲让总线控制器知道DS1820 在总线上且已准备好操作。详见“单线信号”节。 最常用的ROM 操作命令Skip ROM CCh这条命令允许总线控制器不用提供64 位ROM 编码就使用存储器操作命令,在单点总线情况下用以节省时间。如果总线上不止一个从机,在Skip ROM 命令之后跟着发一条读命令,由于多个从机同时传送信号,总线上就会发生数据冲突(漏极开路下拉效果相当于相与)。 I/O 信号DS1820 需要严格的协议以确保数据的完整性。协议包括几种单线信号类型:复位脉冲、存在脉冲、写0、写1、读0 和读1。所有这些信号,除存在脉冲外,都是由总线控制器发出的。和DS1820 间的任何通讯都需要以初始化序列开始,初始化序列见图11。(主机发)一个复位脉冲跟着(DS18b20回应)一个存在脉冲表明DS1820 已经准备好发送和接收数据(适当的ROM 命令和存储器操作命令)。 图11 复位操作时序读/写时间隙DS1820 的数据读写是通过时间隙处理位和命令字来确认信息交换。 写时间隙:当主机把数据线从逻辑高电平拉到逻辑低电平的时候,写时间隙开始。有两种写时间隙:写1时间隙和写0 时间隙。所有写时间隙必须最少持续60s ,包括两个写周期间至少1s 的恢复时间。I/O 线电平变低后,DS1820 在一个15s 到60s 的窗口内对I/O 线采样。如果线上是高电平,就是写1,如果线上是低电平,就是写0(见图12)主机要生成一个写时间隙,必须把数据线拉到低电平然后释放,在写时间隙开始后的15s 内允许数据线拉到高电平。主机要生成一个写0 时间隙,必须把数据线拉到低电平并保持60s 。 图12(a 写时间隙时序图读时间隙当从DS1820 读取数据时,主机生成读时间隙。当主机把数据线从高电平拉到低电平时,写时间隙开始。即:低电平(1S )延时15S 读数据(DQ )数据线必须保持至少1s 低电平;从DS1820 输出的数据在读时间隙的下降沿出现后15s 内有效。因此,主机在读时间隙开始后必须恢复高电平(停止把I/O 脚驱动为低电平)15s ,以读取I/O 脚状态(见图12)。在读时间隙的结尾,I/O 引脚将被外部上拉电阻拉到高电平。所有读时间隙必须最少60s ,包括两个读周期间至少1s 的恢复时间。图13 表示T INIT ,T RC 和T SAMPLE 之和必须小于15s 。图14 示出,系统时间可以用下面方法达到最大:T INIT 和T RC 保持时间尽可能小;把控制器采样时间放到15s 周期的最后。 图12(b 读时间隙时序图 用汇编语言写的DS1820程序二、DS1820 工作过程及时序DSl820 工作过程中的协议如下:初始化;ROM 操作命令;存储器操作命令;处理数据。 1初始化单总线上的所有处理均从初始化开始 2ROM 操作命令总线主机检测到 DSl820 的存在,便可以发出 ROM 操作命令之一。这些命令如: 3存储器操作命令 4时 序主机使用时间隙(time slots来读写 DSl820 的数据位和写命令字的位。 (1初始化时序见图2.25-2。主机总线 t0 时刻发送一复位脉冲(最短为480us 的低电平信号 ,接着在tl 时刻释放总线,并进入接收状态。DSl820在检测到总线的上升沿之后等待15-60us ,接着DS1820 在t2 时刻发出存在脉冲(低电平持续60-240 us,如图中虚线所示。 以下子程序在 MCS51 仿真机上通过,其晶振为12M 。 初始化子程序 RESET: PUSH 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,WAITL ; 总线低等待DJNZ ACC,WAITL;释放总线等待一段时间 SJMP SHORTWH: MOV B,#111 WH1:ORL C,P1.0DJNZ B,WH1 ;存在时间等待SHORT: POP APOP B RET(2写时间隙当主机总线 t0 时刻从高拉至低电平时就产生写时间隙,见图2.25-3、图2.25-4。从 t0 时刻开始 15us 之内,应将所需写的位送到总线上。DSl820在 t0 后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;1usMOV Pl.0,C;C 内容到总线 WDLT: DJNZ B,WDLT; 等待56usPOP B SETB Pl.0 ; 释放总线 RET; 返回写字节子程序(待写内容在 A 中: WRBYTB:PUSH B:保存B MOV B,#8H; 设置写位个数 WLOP: RRC A; 把写的位放到CACALL WRBIT ; 调写 1 位子程序 DJNZ B,WLOP ;8 位全写完? POP B RET(3读时间隙见图2.25-5。主机总线 t0 时刻从高拉至低电平时,总线只须保持低电平 l 7 us,之后在 t1 时刻将总线拉高,产生读时间隙,读时间隙在 t1 时刻后 t2 时刻前有效。t2 距 t0 为15us 。也就是说 t2 时刻前主机必须完成读位,并在 t0 后的 60 us 120 us 内释放总线。 读位子程序(读得的位到 C 中 RDBIT: PUSH B ; 保存BPUSH A; 保存AMOV B,#23 ; 设置时间常数CLR P1.0 ; 读开始图2 25 5 的t0 时刻 NOP ;1us NOP ;1us NOP;1usNOP ;1us SETB Pl.0 ; 释放总线MOV A,P1 ;P1 口读到A MOV C,0E0H ;P1.0 内容CNOP ;1us NOP ;1us NOP;1usNOP ;1usRDDLT: DJNZ B,RDDLT ; 等待46usSETB P1.0 POP APOP B RET读字节子程序(读到内容放到A 中 RDBYTE: PUSH B; 保存B RLOP: MOV B,#8H; 设置读位数ACALL RDBIT ; 调读1 位子程序 RRC A; 把读到位在C 中并依次送给A DJNZ B,RLOP ;8 位读完? POP B; 恢复BRETDS18B20程序凌阳单片机 测温子程序测温子程序子程序在测温时首先设置DS18B20的DQ 为高电平,然后初始化DS18B20,在成功后DS18B20接收单片机的命令,为了简单起见这里跳过ROM 命令设置匹配过程,然后再次初始化DS18B20在成功后启动测温,然后将温度保存起来,返回。 其中读写DS18B20的驱动程序在DS18B20.c 文件中,可以参考DS18B20的读写时序图来理解程序。单线总线的空闲状态是高电平。无论任何理由需要暂停某一执行过程时,如果还想恢复执行的话,总线必必须停留在空闲状态。在恢复期间,如果单线总线处于非活动(高电平)状态,位与位间的恢复时间可以无限长。如果总线停留在低电平超过480s ,总线上的所有器件都将被复位。WENDU_L EQU 29H;用于保存读出温度的低字节WENDU_H EQU 28H;用于保存读出温度的高字节XIAOSHU EQU 27H;用于保存温度的小数部分ZHENGSHU EQU 26H;用于保存整数部分BIAOZHI BIT 50H;18B20检查位1为存在,0为不存在ORG 0000HAJMP MAINORG 0030HMAIN:MOV SCON,#00HACALL DUWENACALL ZHENGHEACALL BCDACALL DISPACALL TIME1AJMP MAIN;-; 读温度子程序;-DUWEN:SETB P2.0ACALL FUWEI ;读温度之前必须先复位JB BIAOZHI,CUNZAI;查看标志位看18B20是否存在,1为存在,0为不存在RET ;不存在则返回CUNZAI: ;存在则开始读温度MOV A,#0CCH ;跳过ROM 匹配ACALL XIE ;调写子程序MOV A,#44H ;发出温度转换命令ACALL XIE ;调写子程序ACALL TIME1 ;调1秒延时, 等等AD 转换完成, 现在分辨率为12位, 温度最大转换时间为750MS ACALL FUWEI ;读温前需要复位MOV A,#0CCH ;跳过ROM 匹配ACALL XIEMOV A,#0BEH ;发读温度命令ACALL XIEACALL DUSHU ;将闱出数据读回CLR P1.2RET;- ; 复位子程序;18B20复位需要将数据位拉低500us;18B20收到信号后要等待16-60us, 然后发出60-240us 的低脉冲;- FUWEI:SETB P2.0NOPCLR P2.0MOV R0,#3INTE:MOV R1,#107 ;设一个537us 延时KK1: DJNZ R1,KK1DJNZ R0,INTESETB P2.0 ;拉高数据线, 等待回应NOPNOPNOPMOV R0,#25;INTE1:JNB P2.0,INTE2 ;延时延时50us 等待18B20回应, 若返回低脉冲则说明18B20存在DJNZ R0 ,INTE1AJMP INTE3 ;经过反应时间而没检测到18B20的存在, 则跳转去清零标志位INTE2:SETB BIAOZHI ;检测到18B20存在, 置1标志位CLR P1.0AJMP INTE4INTE3:CLR BIAOZHI ;没检测到18B20, 清零标志位AJMP INTE5INTE4:MOV R0,#120 ;延时240us, 确定回应信号已发完KK: DJNZ R0,KKINTE5:SETB P2.0RET;- ; 写18B20子程序;- XIE:MOV R2,#8 ;写计数寄存器,一共有8位数据CLR CLP:CLR P2.0MOV R3,#6;设一个延时LL1:DJNZ R3,LL1RRC A;右循环,先输出低位MOV P2.0,CMOV R3,#23;设延时LL: DJNZ R3,LL;SETB P2.0NOPNOPDJNZ R2,LP ;判断是否完成数据传送SETB P2.0 ;完成传送拉高数据位RET;- ; 从18B20中读出温度数据子程序;- DUSHU: MOV R4,#2 ; 设读回数据个数指针MOV R1,#WENDU_L ;把温度数据低位存入29HRE:MOV R2,#8 ;设数据长度指针 RE1: CLR CSETB P2.0; P2.0是DQ 口 NOP; 等待2S NOPCLR P2.0; 启动读数 NOP; 延时3S NOPNOPSETB P2.0; 准备读数 MOV R3,#9 ; 延时15SDJNZ R3,$MOV C,P2.0; 读DQ(P2.0 MOV R3,#23; 读完后,延时NN: DJNZ R3,NNRRC ADJNZ R2,RE1MOV R1,A DEC R1;高位存入28HDJNZ R4,RERET;- ; 数据整合子程序; 温度源数据的整合, 读出数据的高字节的低四位决定温度的整数部分; 低字节的低四位决定小数部分;- ZHENGHE:MOV A,#0FHANL A,WENDU_L;低字节的低四位就是小数部分MOV XIAOSHU,A ;获得小数部分MOV A,WENDU_L;将高字节的低

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论