ds18b20温度转换.doc_第1页
ds18b20温度转换.doc_第2页
ds18b20温度转换.doc_第3页
ds18b20温度转换.doc_第4页
ds18b20温度转换.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

DS18B20一、初始化1、步骤:1)、有总线控制器发出复位脉冲 2)、从机发出存在脉冲。(存在脉冲让总线知道DS15B20在总线上已准备好操作、一旦总线控制器探测到一个存在脉冲,就可以发出ROM命令)2、初始化过程“复位”和“存在”脉冲3、过程:送 1 复位送 0 拉低(800us)送 1 产生一个上升沿(50us)检测低电平检测高电平4、程序:init_1820()/1820初始化 unsigned char a,b,c; p23=1;/复位 p23=0;/拉低800us for(b=2;b0;b-) for(a=200;a0;a-); p23=1;/产生一个上升沿, 进入等待应答状态 for(b=1;b0;b-)/延时50us for(a=25;a0;a-); while(p23=1); while(p23=0);/检测到应答脉冲 二、写Ds18b20的数据读写是通过时间间隙处理和命令来确认信息交换1、步骤:1)主机把数据从逻辑高电平拉到低电平,写时间间隙开始(写时间间隙必须最少持续60us,包括两个写周期至少1us的恢复时间。)2)I/O线电平拉低后,DS18B20在一个15us到60us的时候对I/O线采样。如果线上为高电平,就是写1,如果线上是低电平,就是写02、写时序图:1) 写0:先把数据线拉低15us,然后在至少保持15us的低电平,进行写0(数据线必须被拉至逻辑低电平且至少保持30us),然后必须拉高恢复(至少1us,不用考虑)。2) 写1:数据线必须被拉至逻辑低电平(至少1us,不用考虑)然后在从开始的15us内(也就是14us内)拉至到电平,3、程序写0:write0()/写0 uchar a,b; DQ=0;/拉低for(a=6;a0;a-);/拉低15usfor(a=21;a0;a-); /送入0至少45us,DS1820采样,(其实15us就行)/总共拉低至少60us/或for(b=15;b0;b-)/60us /for(a=2;a0;a-); DQ=1;/拉高恢复(至少1us) _nop_(); 写1:write1()/写1 DQ=0;/拉低(至少1us) _nop_(); DQ=1;/15us之内送入高电平(其实不用非得15us之内) _nop_(); 三、读1、步骤:1)主机把数据线从高电平拉至低电平时,产生读时间片2)数据线必须保持低电平至少1us,读1820输出的数据在读时间片后的15us内有效(在读之前必须停止送低电平(也就是送高电平)低电平1us后直接拉高等待读数据)3)读时间片的最短持续时间为60us,各个读时间片之间要有最短为1us的恢复时间2、读时序3、程序uchar ds1820rd()/读数据 uchar a,b,i,dat = 0,dat1 = 0; for (i=8;i0;i-) DQ = 0; /给脉冲信号延时1us_nop_(); DQ = 1; /给脉冲信号 准备读数据 if(DQ)/读 判为1为0 dat|=0x01; else dat&=0xfe; dat=_cror_(dat,1); for(b=3;b0;b-)/延时60us for(a=8;a0;a-); return(dat); 四、温度准换流程1、ROM操作命令Skip ROM(“跳过”ROM)CCh在单点总线系统中此命令通过允许总线主机不提供64位ROM编码而访问存储器操作节省时间。(在多于一个的从属器件责不可以使用该命令。)2、存储器操作命令Convert T44h启动温度变换这条命令启动一次温度转换而无需其他数据。温度转换命令被执行后DS1820白痴等待转换状态。Read ScratchpadBEh读暂存存储器这个命令读取暂存器的内容。读取从字0开始,一直进行下去,直到第9(字节8,CRC)字节读完四、流程初始化10 800us150us检测0检测1nopnop写指令a=数&0x01a=0 写0060us1nopa=1 写10nop1nop左移 数 循环8次nopnop读数据0nop1nop读 为1 a|=0x01为0 a&=0xfe左移a60us循环8次主函数初始化写指令0xcc写指令0x44初始化写指令0xcc写指令0xbea=读数据b=读数据b=8t=b|at=t*0.0625显示t五、源程序/*DS18B20温度显示温度传感器 DQ接p1.1数码管 (用164串口) */#include#include#define uchar unsigned char #define uint unsigned int sbit DQ=P11;uchar tab=0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09;init_1820()/1820初始化 unsigned char a,b,c; DQ=1;/复位 DQ=0;/拉低800us for(c=1;c0;c-)/延时800us for(b=2;b0;b-) for(a=197;a0;a-); DQ=1;/产生一个上升沿, 进入等待应答状态 for(b=1;b0;b-)/延时50us for(a=22;a0;a-); while(DQ=1); while(DQ=0);/检测到应答脉冲 _nop_(); _nop_(); write0()/写0 uchar a,b; DQ=0;/拉低for(a=6;a0;a-);/拉低15usfor(a=21;a0;a-); /送入0至少45us,DS1820采样,(其实15us就行)/总共拉低至少60us DQ=1;/拉高恢复(至少1us) _nop_(); write1()/写1 DQ=0; _nop_(); DQ=1; _nop_(); wr18b20(uchar k)/写指令 uchar i,b;for(i=0;i0;i-) DQ = 0; /给脉冲信号0 _nop_(); DQ = 1; /给脉冲信号1 if(DQ)/读 判为1为0 dat|=0x01; else dat&=0xfe; dat=_cror_(dat,1); for(b=3;b0;b-)/60us for(a=8;a0;a-); return(dat); teml()/温度转换子程序 uint b,t,a; init_1820();/初始化 wr18b20(0xcc);/写入跳过序列号命令字 Skip Rom wr18b20(0x44);/写入温度转换命令字 Convert T init_1820(); wr18b20(0xcc);/写入跳过序列号命令字 Skip Rom wr18b20(0xbe);/写入读取数据令字 Read Scratchpad a=ds1820rd();/读低8位 b=ds1820rd();/读高8位 t=b; t=8;/高八位左移 t=t|a;/高低八位组合 t=t*0.0625;/转换温度值 return(t);display(uint c

温馨提示

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

评论

0/150

提交评论