版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、最近都在学习和写单片机的程序,今天有空又模仿写了一个与DS18B20 基于单总线通信的程序DS18B20 数字温度传感器(参考:是DALLAS 公司生产的1 Wire,即单总线器件,具 有线路简单,体积小的特点。因此用它来组成一个测温系统, 具有线路简单,在一根通信线, 可以挂很多这样的数字温度计。 DS18B20 产品的特点:(1 )、只要求一个I/O 口即可实现通信。(2 )、在DS18B20 中的每个器件上都有独一无二的序列号。(3 )、实际应用中不需要外部任何元器件即可实现测温。(4 )、测量温度范围在 55到+ 125 C之间;在-10 +85C范围内误差为 ±5 C;(5
2、 )、数字温度计的分辨率用户可以从9位到12位选择。将12位的温度值转换为数字量所需时间不超过 750ms;(6)、内部有温度上、下限告警设置。DS18B20 引脚分布图MC T*JNC T(D NCVT>D COH NCLMJ mH GNDDS18B20 详细引脚功能描述:1、GND地信号;2、DQ数据输入出引脚。开漏单总线接口引脚。当被用在寄生电源下,此引脚可以向器件 提供电源;漏极开路,常太下高电平通常要求外接一个约 5k Q的上拉电阻.3、 VDD可选择的VDD引脚。电压范围:3;当工作于寄生电源时,此引脚必须接地。DS18B20 存储器结构图叩何结黑曹存RAM主节0仲期灾性也叮
3、擦险RAM1TH/罔F*低冃字巧丨2mi-iPttw字节【配賈字书4配賣字节很剤音节56泯奇宇节7 rX暂存储器的头两个字节为测得温度信息的低位和高位字节;第3, 4字节是TH和TL的易失性拷贝,在每次电复位时都会被刷新第5字节是配置寄存器的易失性拷贝,同样在电复位时被刷新;第9字节是前面8个字节的CRC检验值.配置寄存器的命令内容如下0R1R011111MSB LSBR0和R1是温度值分辨率位,按下表进行配置默认出厂设置是 R1R0 = 11, 即12位.温度值分辨率配置表R1R0分辨率最大转换时间(ms)009bit(tco nv/8)0110bit(tco nv/4)1011bit375
4、(tc on v/2)1112bit750 (tco nv)4种分辨率对应的温度分辨率为0.5 C , 0.25 C , 0.125 C , 0.0625 C (即最低一位代表的温度值)12位分辨率时的两个温度字节的具体格式如下:低字节:2A32A22A12A02A-12A-22A-32A-4高字节:SSSSS2A62人52人4其中高字节前5位都是符号位S,若分辨率低于12位时,相应地使最低为0,如:当分辨 率为10位时,低字节为:2人32A22A12A02A-12A-200高字节不变一些温度与转换后输出的数字参照如下温度数字输出换成16进制+ 125 C07D0H+85 C000001010
5、10100000550H+25.0625 C0191H+10.125 C0000000000A2H+0.5 C00000000000010000008H0 C00000000000000000000H-0.5 CFFF8H-10.125 CFFE5H-25.0625 CFF6FH-55 CFC90H由上表可看出,当输出是负温度时,使用补码表示,方便计算机运算(若是用C语言,直接 将结果赋值给一个int变量即可).DS18B20 的使用方法:由于DS18B20采用的是方式,即在一根数据线实现数据的双向传输,而对单片机来说,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20 芯片的
6、访问。由于DS18B20 是在一根I/O线上读写数据,因此,对读写的数据位 有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序(dslnit()实现)、读时序(readByte() 、写时序(writeByte() 。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。DS18B20 与单片机连接电路图VCCDBJDBSISFKS 15K?T ?35S52(P10J
7、POO! P11JTPO1P12刚P13P03P14P04PBP05P16P06P17PO?IHT1P20INTOP21P22T1P23TOP24P25EA/VPP2fiP27KIREfETREDTKP! RDALE/PPSEH疝2XI P藍1818F20ALEDSLSE20I7>11''I18:iiH利用软件模拟 DS18B20的单线协议和命令:主机操作DS18B20必须遵循下面的顺序1. 初始化单线总线上的所有操作都是从初始化开始的过程如下:1) 请求:主机通过拉低单线480us 以上,产生复位脉冲,然后释放该线,进入Rx接收模 式.主机释放总线时,会产生一个上升沿脉
8、冲DQ : 1 -> 0(480us+) -> 12) 响应:DS18B20检测到该上升沿后,延时1560us,通过拉低总线60240us 来产生应答脉冲DQ: 1(1560us) -> 0(60240us)3) 接收响应:主机接收到从机的应答脉冲后,说明有单线器件在线至此,初始化完成DQ: 02. ROM操作命令当主机检测到应答脉冲,便可发起ROM操作命令.共有5类ROM操作命令,如下表命令类型命令字节功能Read Rom 读ROM33H读取激光ROM中的64位,只能用于总线上单个 DS18B20 器件情况,多挂时会发生数 冲突Match Rom 匹 配ROM55H此命令后
9、跟64位ROM序列号,寻址多挂总线上的对应 DS18B20.只有序列号完全匹配 的DS18B20才能响应后面的内存操作命令,其他不匹配的将等待复位脉冲可用于单挂多挂两种情况Skip Rom 跳 过ROMCCH可无须提供64位ROM序列号即可运行内存操作命令 ,只能用于单挂Search Rom 搜索ROMF0H通过一个排除法过程,识别出总线上所有器件的 ROM序列号Alarm Search告警搜索ECH命令流程与Search Rom 相冋,但DS18B20 只有最近的一次温度测量时满足了告警 发条件的,才会响应此命令3. 内存操作命令在成功执行ROM操作命令后,才可使用内存操作命令.共有6种内存
10、操作命令命令类型命令字节功能WriteScratchpad写暂存器4EH写暂存器中地址2地址4的3个字节(TH,TL和配置寄存器)在发起复位脉冲之前,3 字节都必须要写ReadScratchpad读暂存器BEH读取暂存器内容,从字节0 直到字节8,共9个字节,主机可随时发起复位脉冲,停 此操作,通常我们只需读前 5个字节CopyScratchpad复制暂存器48H将暂存器中的内容复制进 EERAM,以便将温度告警触发字节存入非易失内存 如果此 命令后主机产生读时隙,那么只要器件还在进行复制都会输出 0,复制完成后输出1Co nvert T ?温度转换44H开始温度转换操作若在此命令后主机产生时
11、隙,那么只要器件还在进行温度转换就 输出0,转换完成后输出1.Recall E2重调E2暂存器B8H将存储在EERAM中的温度告警触发值和配置寄存器值重新拷贝到暂存器中,此操作在DS18B20 加电时自动产生Read PowerB4H主机发起此命令后每个读数时隙内QS18B20 会发信号通知它的供电方式:0寄生电源Supply1外部供电读供电方式4. 数据处理DS18B20 要求有严格的时序来保证数据的完整性.在单线DQ上,有复位脉冲,应答脉冲,写0,写1,读0,读1这6种信号类型.除了应答脉冲外,其它都由主机产生数据位的 读和写是通过读、写时隙实现的1)写时隙:当主机将数据线从高电平拉至低电
12、平时,产生写时隙所有写时隙都必须在60us以上,各写时隙间必须保证 1us的恢复时间写"1":主机将数据线 DQ先拉低,然后释放15us后,将数据线DQ拉高;写"0": 主机将DQ拉低并至少保持 60us以上 2)读时隙:当主机将数据线 DQ从高电平拉至低电平时,产生读时隙所有读时隙最短必 须持续60us,各读时隙间必须保证 1us的恢复时间读:主机将DQ拉低至少1us,.此时主机马上将 DQ拉高,然后就可以延时15us后,读取 DQ即可源代码:(测量范围:0 99度)国日 DS18B201 #in clude<>delay(unsigned
13、 char i)2 3f4f 7f6f7c 日田 L 14 void 15日叫16 unsigned char j,k;17 for (j=i;j>0;j-)18申电卜1- 曰田19 for (k=125;k>0;k-);I 1-曰田1II| |艸| | |艸| | | |卜怕町| |卜卜L日曰| | |1-曰田2223 SSlIII IIIHL 日田 I IlllLsslllllIIImin iil曰田ill i尿i ii曰酊艸iiii艸11 iiii11申I I I論I II I I弭I卜卜L扣卜I艸1卜1丨1丨丨丨III19 二土20此川 DS18D20:EJSSkip Ri
14、imiilr >Convert 1 i-tr 绞1 Ils.箱待iE度帏摸富城购坛如$1睡!卵二土 L HEE L 18 void delay(unsignedint i)unsigned int j; while (i-)22 2123for (j=0;j<125;j+);24 r L25 发足Kcdbrrii欣傅l,ri- :y±102627 / 初始化 DS18B2028 /让DS18B20 一段相对长时间低电平,然后一段相对非常短时间高电平,即可启动29 void30 31 /对于时钟,unsignedint 型的i,作一个i+操作的时间大于为 8us32 I u
15、nsigned int i; ?33 ds=0;34 i=100; /拉低约800us,符合协议要求的480us以上35 while (i>O)i-;36 ds=1; /产生一个上升沿,进入等待应答状态37 i=4;38 while (i>0)i-;39 40 41 void dsWait() 42二斗43 unsigned int i;44 I while (ds);?45 while (ds);/检测到应答脉冲i=4;4646 while (i>0)i-;47 4950 /向DS18B20 读取一位数据51 /读一位,让DS18B20 一小周期低电平,然后两小周期高电平,
16、?52 /之后DS18B20 则会输岀持续一段时间的一位数据53 bitreadBit()54 55 unsigned int i;56 bitb;57 ds=0;58 i+; /延时约8us,符合协议要求至少保持1us59 ds=1;?60 i+;i+;/延时约16us,符合协议要求的至少延时15us以上61 b=ds;62 i=8; ?63 while (i>0)i-;/延时约64us,符合读时隙不低于60us要求64 I return b;L65 6666 /读取一字节数据,通过调用readBit()来实现67 unsignedcharreadByte()68 69 unsigne
17、dint i;70 unsignedcharj,dat;71 dat=0;72 I for (i=0;i<8;i+)73 74 j=readBit();75 /最先读岀的是最低位数据76 dat=a«7)|(dat>>1);77 78 return dat;79 8182 /向DS18B20 写入一字节数据83 void writeByte(unsignedchar dat)84 85 | unsigned int i;86 unsigned char j;87 bitb;88 for (j=0;j<8;j+)89 90 b=dat&0x01;91 d
18、at>>=1;92 /写"1",将DQ拉低15us后,在15us60us 内将DQ拉高,即完成写193 if(b) ?94 95 ds=0;96 i+;i+;/拉低约16us,符号要求1560us 内97 ds=1;?98 i=8; while (i>0)i-;/延时约64us,符合写时隙不低于60us要求99 1100 else / 写"0",将 DQ 拉低 60us120us101 102 ds=0;103 i=8; while (i>0)i-;/ 拉低约 64us,符号要求104 ds=1;105 i+;i+;/整个写0时隙
19、过程已经超过60us,这里就不用像写1那样,再延时64us 了106 107 IL108 109109 /向DS18B20发送温度转换命令110 void sendChangeCmd()111 112 dsInit();/初始化DS18B20,无论什么命令,首先都要发起初始化113 dsWait(); / 等待 DS18B20 应答114 delay(1); /延时1ms,因为DS18B20 会拉低 DQ60240us作为应答信号115 writeByte(Oxcc); /写入跳过序列号命令字SkipRom116 I writeByte(0x44); / 写入温度转换命令字ConvertT11
20、7 119118 /向DS18B20发送读取数据命令119 void sendReadCmd()120 121 dsI ni t();122 dsWait();123 delay(1);124 writeByte(Oxcc); /写入跳过序列号命令字SkipRom125 writeByte(Oxbe); / 写入读取数据令字ReadScratchpad126 129127 /获取当前温度值128 int getTmpValue()129 130 unsigned int tmpvalue;131 int value; /存放温度数值132 float t;133 unsigned char l
21、ow,high;134 sen dReadCmd();135 /连续读取两个字节数据136 I low=readByte(); ?137 high=readByte();138 /将高低两个字节合成一个整形变量139 /计算机中对于负数是利用补码来表示的140 /若是负值,读取岀来的数值是用补码表示的,可直接赋值给int型的value141 tmpvalue=high;142 tmpvalue<<=8;143 tmpvalue|=low;144 value=tmpvalue;145 ?146 I/使用DS18B20的默认分辨率12位,精确度为度,即读回数据的最低位代表度147 t=
22、value*;148 /将它放大100倍,使显示时可显示小数点后两位,并对小数点后第三进行4舍5入149 /如t=,进行计数后,得到value=1106, 即度150 /如t=,进行计数后,得到value=-1106, 即度151 value=t*100+(value>0:;/ 大于 0 力廿,小于 0 减152 I return value;L153 157154 unsigned charconsttimeCount=3;/ 动态扫描的时间间隔155 /显示当前温度值,精确到小数点后一位156 /若先位选再段选,由于10 口默认输岀高电平,所以当先位选会使数码管岀现乱码int157 void162日国163unsigned char count;164 申E unsigned char datas=0,0,0,0,0;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汽车模具2025版性能优化开发合同
- 2025年度木材出口合同范本与执行细则4篇
- 2025版学校小卖部与校园周边商家联盟合同3篇
- 2025版建筑设备安装工程安全生产消防合同3篇
- 2025版外语教学机构兼职外教招聘合同样本3篇
- 2025年人力资源服务合同解除协议
- 2025年前雇主员工竞业禁止合同样本模板
- 2025版个人合伙退伙协议书纠纷处理指南4篇
- 2025年云石打边蜡水项目投资可行性研究分析报告
- 2025年度骆采与陈鹏的离婚财产分割及子女抚养权合同4篇
- GB/T 45107-2024表土剥离及其再利用技术要求
- 2024-2025学年八年级上学期1月期末物理试题(含答案)
- 商场电气设备维护劳务合同
- 2023年国家公务员录用考试《行测》真题(行政执法)及答案解析
- 2024智慧医疗数据字典标准值域代码
- 年产12万吨装配式智能钢结构项目可行性研究报告模板-立项备案
- 【独家揭秘】2024年企业微信年费全解析:9大行业收费标准一览
- 医疗器械经销商会议
- 《±1100kV特高压直流换流变压器使用技术条件》
- 1-1 拥抱梦想:就这样埋下一颗种子【2022中考作文最热8主题押题24道 构思点拨+范文点评】
- 《风电场项目经济评价规范》(NB-T 31085-2016)
评论
0/150
提交评论