




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、DS18B20、DS18B20的外形及其与单片机的连接图18B20GND(b)DS18B20是Dallas公司生产的1-Wire接口数字温度传感器,其外形如图1(a)所示,有三个引脚,分别为:电源地1(GND);数字信号输入/输出端2(DQ);外接供电电源输入端 3(VDD,在寄生电源接线方式时接地)。它是一种单总线数字温度传感器,所有的数据交换 和控制都通过这根数据线来完成。测试温度范围-55 C -125 C,温度数据位可配置为9、10、11、12位,对应的刻度值分别为05C、0.25 C、0.125 C、0.0625C,对应的最长转换时间分别为93.75ms、187.5ms、375ms、
2、750ms。出厂默认配置为 12位数据,刻度值为0.0625 C, 最长转换时间为 750ms。从以上数据可以看出,DS18B20数据位越低、转换时间越短、反应越快、精度越低。单总线没有时钟线,只有一根通信线,其读写数据是靠控制起始时间和采样时间来完成,所以时序要求很严格。图1(a)为DS18B20与单片机的连接电路图,它的数据线通常要求外接一个4.7K,| -10K,】的上拉电阻(该电阻画原理图时靠近单片机画故没有显示出来),故其闲置时状态位高电平。提示:DS18B20外形酷似三极管,分辨引脚时,面对着扁平的那一面,左负右正,一旦接反就会立刻发热,甚至有可能烧毁。二、DS18B20存储器结构
3、DS18B20的内部有64位的ROM单元,和9字节的暂存器单元。1、64位(激)光刻只读存储器每只DS18B20都有一个唯一存储在 ROM中的64位编码(跟人的身份证号类似,一人 一个身份证号),这是出厂时被光刻好的。最前面8位是单线系列编码:28h。接着的48位是一个唯一的序列号。最后8位是以上56位的CRC编码。64-位的光刻ROM又包括5个ROM的功能命令:读 ROM,匹配ROM,跳跃ROM,查找ROM和报警查找。ROM的作 用是使每个DS18B20各不相同,这样就可以实现一根总线上挂接多个DS18B20以实现多点监测。2、9字节的暂存器单元表1EIPROMDS18B20的暂存器单元如表
4、1所示,各部分介绍如下。1)、温度传感器MS BMC7 r2。21j31 ;Lmi 15Lit Mbit libn nbd IDbit 9ba SSsSsS斗4图2暂存器的第O(LSB)字节,第1(MSB)字节为DS18B20的温度传感器,它们负责保存对温度的测量结果,用 16位二进制提供,格式如图2所示。DS18B20读取温度时共读取16位,前5个位(MSB的高5位)为符号位,当前5位为1时,读取的温度为负数;当前5位为0时,读取的温度为正。温度为正时读取方法为:将16进制数转换成10进制即可。温度为负时读取方法为(实际就是取补码):将16进制取反后加1,再转换成10进制。例:0550H =
5、 +85度,FC90H = -55度,0191H为25.0625度。LSB的低四位用于表示测量值中小数点后 的数值。2) 、非挥发的温度报警触发器TH和TL位于第2和第3字节,用于写入温度报警值,实际上就是设定温度的最高和最低界限。3)、配置寄存器配置寄存器位于存储器的第4字节,其组织如图3所示。配置寄存器的04位和7位被器件保留,禁止写入;在读回数据时全部为逻辑1。R1和R0用于设置DS18B20的精度,具体如表2所示。bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 00R1RO11111图3表2R1RO精度最大转埶时间009-bir93.75 m
6、sMcnv/8)0110-bit187.5 ms(tcoNvM)101 l*bit375 msOcwiv/2)1112-bit750 nvs(tC0N)4)、CRC发生器CRC字节作为 DS18B2064位ROM的一部分存储在存储器中。 CRC码由ROM的前56 位计算得到,被包含在ROM的重要字节当中。CRC由存储在存储器中的数据计算得到, 因 此当存储器中的数据发生改变时, CRC的值也随之改变。CRC能够在总线控制器读取DS18B20时进行数据校验。为校验数据是否被正确读取,总线控制器必须用接受到的数据计算出一个CRC值,和存储在 DS18B20的64位ROM中的值(读ROM时)或DS1
7、8B20内部计算出的8位CRC值(读存储器时)进行比较。如果 计算得到的CRC值和读取出来的 CRC值相吻合,数据被无错传输。CRC值的比较以及是否进行下一步操作完全由总线控制器决定。当在DS18B20中存储的或由其计算到 CRC值和总线控制器计算的值不相符时,DS18B20内部并没有一个能阻止命令序列进行的电路。CRC的计算等式如下:CRC = X8 + X5 + X4 + 1单总线CRC可以由一个由移位寄存器和XOR门构成的多项式发生器来产生。这个回路包括一个移位寄存器和几个XOR门,移位寄存器的各位都被初始化为0。从ROM中的最低有效位或暂存器中的位0开始,一次一位移入寄存器。在传输了5
8、6位ROM中的数据或移入了暂存器的位 7后,移位寄存器中就存储了 CRC值。下一步,CRC的值必须被循环 移入。此时,如果计算得到的CRC是正确的,移位寄存器将复0。其他字节保留用,不需要看。三、关于单总线系统单总线系统包括一个总线控制器和一个或多个从机。DS18B20总是充当从机。当只有一只从机挂在总线上时,系统被称为“单点”系统;如果由多只从机挂在总线上,系统被称 为“多点”。所有的数据和指令的传递都是从最低有效位开始通过单总线。单总线需要一个约5KQ的外部上拉电阻;单总线的空闲状态是高电平。无论任何理由需要暂停某一执行过 程时,如果还想恢复执行的话,总线必须停留在空闲状态。在恢复期间,如
9、果单总线处于非 活动(高电平)状态,位与位间的恢复时间可以无限长。如果总线停留在低电平超过 480us,总线上的所有器件都将被复位。四、操作流程1.DS18B20 复位。2执行ROM指令。就是访问,搜索,匹配每个DS18B20独有的64位序列号。实验板上只连有一个DS18B20,故不需识别,也就是不需读出此序列号,写代码时直接写命令0xcc跳过。3执行DS18B20功能指令(RAM指令,就是读写暂存器指令)。DS18B20的功能指令很多,比较常用的有两个:0x44 :开始转换温度。转换好的温度会储存到暂存器字节0和1。0xBE :读暂存指令。读暂存指令,会从暂存器0到9, 一个一个字节读取,如
10、果要停止的话,必须写下 DS18B20复位。ROM指令和RAM指令的具体情况见表 3。表3表乩RO閘指令嘰读ROM33H读口閃酣晦度传感器讯u中的褊码即弓4位地址、彩合ROM55H境出此晶令之后,捋薛览出玛,访问单息线上与该编玛相对应的DS1S20使之住出响应*曲下一歩对懷 S1S20的换写昨准备.按索ROMOFOH月于晡走挂接在同一总簇上閃1曲0的-T数和识另龍位的嗣地址.討时各器件作好唯备.StJd ROH0CCH沁 64IS; ROM地址,直接耐DS1&20发溟度变按酣會适用于車片工惟*吿警糅*0ECH执行后只有溟度超过叢圭佰上隈咸神艮的片孑才就岀响回.耒亦RAM指令表功能44H启5tj
11、CS1B2O.iaiTi|*ft , 1卫位转戡吋累隹为疋口倍175MSJ ,皓杲存入肉部9字节RAM中.读背稹&O0EH读内SSRAM拧节的肉容SWM4EH境岀冋内部RAM的靂4宇冇写上、下隈遍度毅据命簸,紧跟语命督之后,是便送两爭节的数玉.复制哲存器4BH帝RAB中第勲碑节的内容耗制封EEPFtCibl中.MEEPROM0BEH4EEPROM中内睿恢蛊到M間中的籍2、時节.读供电方式0B4HS182O0fJtt电複式.寄生供电B?DS182052 0,外強电邀供电D閃恥磋卷-1 五、读写 DS18B20的时序1、DS18B20的复位时序:1).单片机拉低总线 480us960us,然后释放
12、总线(拉高电平)。2). 这时DS18B20会拉低信号,大约 60240us表示应答。3).DS18B20拉低电平的 60240us 之间,单片机读取总线的电平,如果是低电平,那么表示复位成功。4) .DS18B20拉低电平60240us之后,会释放总线。/*复位:主机to时刻发送一复位脉冲(最短为480US的低电平信号),接着在t1时刻释放总线( 拉高总线电平)进入接收状态。DS18B20在检测到总线的上升沿之后等待1560us。接着DS18B20在t2时刻发出存在脉冲(持续60240us的低电平)*/void DS18B20_Reset()DQ=1;_nop_();DQ=0;拉低总线del
13、ay2us(280); /持续 280*2+5=565sDQ=1;释放总线while(DQ);/等待应答(电平拉低)while(!DQ);应答电平大约持续 60240us后重新拉高总线2、读时序:1).在读取的时候单片机拉低电平大约1us; 2).单片机释放总线,然后读取总线电平。3).这时候DS18B20会拉低电平(0)或拉高电平(1)。4) 读取电平过后,延迟大约4045us。titjL7Z7T主机起作用DS182O起作用上拉电阻起作用/*读字节:主机总线to时刻从高拉至低电平时,总线只须保持低电平I .7US。之后在t1时刻将总线拉高产生读时间隙,读时间隙在t1时刻后t2时刻前有效。t2
14、距t0为15us,也就是说t2时刻前主机必须完成读位,并在t0后的60us-120us内释放总线注意读的时候从最低位向最高位读。*/ uchar DS18B20_Read_Byte() uchar i,temp=0;for(i=0;i1;DQ=0;主机将总线拉至低电平,只需保持1.7us_n op_(); /保持一个时钟周期,也即1usDQ=1;delay2us(1);延时7us, 一般读数在后半段读if(DQ)temp=temp|0x80;delay2us(2); /这里延时 45us+ 前面 7us+1us=53us,接近 60usreturn temp;3、写时序:1).单片机拉低电平大
15、约1015us; 2).单片机持续拉低电平(0)或拉高电平(1)大约2045us的时间;3).释放总线。*toUhu j ti T/*写字节:当主机总线to时刻从高拉至低电平时就产生写时间隙。从to时刻开始15us之内应将所需写的位送到总线上,在随后 15-60US间DS18B20对总线采样若 低电平写入的位是 0;若高电平写入的位是 1,连续写2位间的间隙应大于1us。 注意:无论读写都是从最低位开始。*/void DS18B20_Write_Byte(uchar dat)uchar i;for(i=0;i1;4、读取温度流程/*读温度:流程:复位-写命令(跳过读序列号,单个DS18B20时
16、用)-启动温度转换-等待转换完成(完成总线会跳回咼电平)-复位-写命令(跳过ROM编码命令)- 读取暂存寄存器字节命令-读低字节-读高字节-复位-合并高低字节-判断 正负*/DS18B20_Read_Temperature()uchar temp_low,temp_high;DS18B20_Reset();DS18B20_Write_Byte(0xcc); DS18B20_Write_Byte(0x44);while(!DQ);等待转换完成DS18B20_Reset();DS18B20_Write_Byte(0xcc);DS18B20_Write_Byte(0xbe); temp_low=DS
17、18B20_Read_Byte();temp_high=DS18B20_Read_Byte();DS18B20_Reset(); tvalue=temp_high;tvalue=(tvalue8)|temp_low;if(tvalue0x0fff)tflag=0;elsetvalue=tvalue+1; 因为最高位的前五位是1,所以寄存器存的是温度的补码(补码要取反加一得到二进制数)tflag=1;tvalue=tvalue*(0.625);温度值扩大10倍,精确到1位小数 return(tvalue);例子:DS18B20+1602#in clude#in clude #in clude #
18、defi ne uchar un sig ned char#defi ne uint un sig ned intsbit DQ=P2A3;/ds18b20 与单片机连接口sbit RS=P2A6;sbit RW=P2A7;sbit E=P2A5;un sig ned char code str1=temperature: ;程序 *un sig ned char code str2= uchar data disdata5;uint tvalue;/ 温度值 uchar tflag;/温度正负标志/*lcdi602 /声明调用函数void Lcd_W_Cmd(uchar com); void
19、 Lcd_W_Dat(uchar dat); uchar Lcd_R_Busy();void Lcdn it();void delay(uchar t);void delay_4_ nop();*#defi ne delay_4_ nop() _no p_();_ nop_();_nop_();_ nop_(); void delay(uchar t)uchar i, j;for(i=0; it; i+)for(j=0; j50; j+); void Lcdn it()uchar i;Lcd_W_Cmd(0x3c);Lcd_W_Cmd(OxOe);Lcd_W_Cmd(OxO1);Lcd_W_C
20、md(0x06);Lcd_W_Cmd(0x80); for(i=0;istrle n(str1);i+) Lcd_W_Dat(str1i);Lcd_W_Cmd(OxCO); for(i=0;istrle n(str2);i+) Lcd_W_Dat(str2i);uchar Lcd_R_Busy()uchar s;RW=1;delay_4_ nop();RS=0;delay_4_ nop();E=1;delay_4_ nop(); s=P0;delay_4_ nop();E=0; return(s);void Lcd_W_Cmd(uchar com)uchar i;doi=Lcd_R_Busy(
21、); i=i &0x80;delay(2);while(i!=0);RW=0;delay_4_ nop();RS=0;delay_4_ nop();E=1;delay_4_ nop();PO=com;delay_4_ nop();E=0;void Lcd_W_Dat(uchar dat)uchar i;doi=Lcd_R_Busy();i=i &0x80;delay(2);while(i!=0);RW=0;delay_4_ nop();RS=1;delay_4_ nop();E=1;delay_4_ nop();P0=dat;delay_4_ nop();E=0;程序/*ds1820*/voi
22、d delay2us(unsigned int i)/ 延时 1 微秒while(-i);/*牛人实测,本人没有做过试验。针对的是12Mhz的晶振delay(O):延时 518us 误差:518-2*256=6delay(1):延时7us(原帖写5us是错的)delay(10):延时 25us误差:25-20=5delay(20):延时 45us误差:45-40=5delay(100):延时 205us 误差:205-200=5delay(200):延时 405us 误差:405-400=5 */*复位:主机to时刻发送一复位脉冲(最短为480US的低电平信号),接着在t1时刻释放总线( 拉高
23、总线电平)进入接收状态。DS18B20在检测到总线的上升沿之后等待1560us。接着DS18B20在t2时刻发出存在脉冲(持续60240us的低电平)* */ void DS18B20_Reset() DQ=1;_nop_();DQ=0;拉低总线delay2us(280); /持续 280*2+5=565sDQ=1;释放总线while(DQ);/等待应答(电平拉低)while(!DQ);应答电平大约持续 60240us后重新拉高总线 /*读字节:主机总线t0时刻从高拉至低电平时,总线只须保持低电平I .7US。之后在t1时刻将总线拉高产生读时间隙,读时间隙在t1时刻后t2时刻前有效。t2距t0
24、为15us,也就是说t2时刻前主机必须完成读位,并在t0后的60us-120us内释放总线注意读的时候从最低位向最高位读。*/uchar DS18B20_Read_Byte()uchar i,temp=0;for(i=0;i1;DQ=0;主机将总线拉至低电平,只需保持1.7us_n op_(); /保持一个时钟周期,也即1usDQ=1;delay2us(1);延时7us, 般读数在后半段读 if(DQ)temp=temp|0x80;delay2us(2); /这里延时 45us+ 前面 7us+1us=53us,接近 60usreturn temp;/*写字节:当主机总线t0时刻从高拉至低电平
25、时就产生写时间隙。从to时刻开始15us之内应将所需写的位送到总线上,在随后 15-60US间DS18B20对总线采样若 低电平写入的位是 0;若高电平写入的位是1,连续写2位间的间隙应大于1us。注意:无论读写都是从最低位开始。*/void DS18B20_Write_Byte(uchar dat)uchar i;for(i=0;i1;I*读温度:流程:复位-写命令(跳过读序列号,单个DS18B20时用)-启动温度转换-等待转换完成(完成总线会跳回咼电平)-复位-写命令(跳过ROM编码命令)- 读取暂存寄存器字节命令-读低字节-读高字节-复位-合并高低字节-判断 正负*IDS18B20_Read_Temperature()uchar temp_low,temp_high;DS18B20_Reset();DS18B20_Write_Byte(0xcc); DS18B20_Write_Byte(0x44);while(!DQ);等待转换完成DS18B20_Reset();DS18B20_Write_Byte(0xcc);DS18B20_Write_Byte(0x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中兽医基础知到课后答案智慧树章节测试答案2025年春黑龙江农业工程职业学院(松北校区)
- 广东江门幼儿师范高等专科学校《流行舞》2023-2024学年第一学期期末试卷
- 上海第二工业大学《广联达软件实训》2023-2024学年第一学期期末试卷
- 河北地质大学《执业医师考试实践技能培训》2023-2024学年第一学期期末试卷
- 关于墨汁容器造型设计问卷调查
- 外网排水施工方案
- 桥梁施工方案编制计划
- 2025年中考语文一轮复习:文学类文本阅读 讲义
- 天津市河西区2024-2025学年高一上学期期末质量调查数学试题(解析版)
- 河北省邢台市2024-2025学年高二上学期期末英语测试试题【含答案】
- 2025中国铁塔甘肃分公司社会招聘60人易考易错模拟试题(共500题)试卷后附参考答案
- 2025社区医保工作计划
- 2025年河南中烟工业限责任公司大学生招聘笔试高频重点提升(共500题)附带答案详解
- 社会责任内审评估报告表
- 农村土地流转合同范本
- 个人借款分期还款合同
- 道德与法治研修日志
- 船舶起重吊装作业安全方案
- 2023年佛山市三水区乐平镇镇属国有企业招聘笔试真题
- T-GXAS 395-2022 蒜头果栽培技术规程
- 品管圈PDCA改善案例-降低高危患者夜间如厕跌倒发生率
评论
0/150
提交评论