DS18B20温度与单片机读写.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
DS18B20温度与单片机读写

DS18B20温度传感器 DS18B20数字温度传感器,接线方便,封装成后可应用于多种场合。 1: 技术性能描述   1.1 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。   1.2 测温范围 -55℃~+125℃,固有测温分辨率0.5℃。   1.3 因为每个DS18B20在出厂时已经给定了唯一的序列号,所以支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。   1.4 工作电源: 3~5V/DC   1.5 在使用中不需要任何外围元件   1.6 测量结果以9~12位数字量方式串行传送 温度计算:DS18B20用9位存储温度,最高位位符号位,下图位DS18B20的温度存储方式: 时序 因为 DS18B20采用的时独特的单线接口方式,因此时序的使用起着至关重要的作用, 初始化(复位) 单片机t0时刻发送一复位脉冲(最短为480us的低电平信号,接着在tl时刻释放总线并进入接收状态,DS18B20 在检测到总线的上升沿之后,等待15-60us,接着DS18B20在t2时刻发出存在脉冲(低电平持续60-240us),如图中虚线所示。 换句话说如果t2~t3之间信号电平如果为低,则说明DS18B20复位成功;否则失败。 程序: void DS18b20_reset(void) //初始化 { bit flag=1; while (flag) { while (flag) { DQ = 1; //释放总线 delay(1); DQ = 0; //拉低时序 delay(50); // 550us DQ = 1; delay(6); // 66us flag = DQ; } delay(45); //延时500us,电平为低,初始化成功,否则失败 flag = ~DQ; } DQ=1; } (2)写操作 当单片机将总线t0时刻从高拉至低电平时,就产生写时间隙。见下图,从t0时刻开始 15us之内应将所需写的位送到总线上。DS18B20在t0后15-60us间对总线采样,若低电平写入的位是0;若高电平,写入的位是1。连续写2位间的间隙应大于1us。 程序: void write_byte(uint8 val) { uint8 i; for (i=0; i8; i++) //写入八位数据 { DQ = 1; //释放总线 _nop_(); //等待 DQ = 0; //拉低电平 nops(); //4us DQ = val 0x01; //最低位移出 delay(6); //66us,准备写下一位 val = 1; //右移一位 } DQ = 1; delay(1); } 读操作 当单片机将总线t0时刻从高拉至低电平时,总线只须保持低电平4us之后,在t1时刻将总线拉高,产生读时间隙,读时间在t1时刻后t2时刻前有效,t2距t0为15us,也就是说,t2时刻前主机必须完成读位 并在t0后的60us~120us内释放总线。 程序: uint8 read_byte(void) { uint8 i, value=0; for (i=0; i8; i++) { DQ=1; _nop_(); value = 1; DQ = 0; nops(); //4us DQ = 1; nops(); //4us if (DQ) value|=0x80; delay(6); //66us } DQ=1; return(value); } 读取温度 五个步骤: 1、复位DS18B20 2、发出Skip ROM命令(CCH) 3、发出Read命令(BEH) 4、读两字节的温度 5、温度格式转换 int16 read_temp(void) { uint8 temp_data[2]; // 读出温度暂放 int16 temp; DS18b20_reset(); // 复位 write_byte(0xCC); // 发Skip ROM命令 write_byte(0xBE); // 发读命令 temp_data[0]=read_byte(); //温度低8位 temp_data[1]=read_byte(); //温度高8位 temp = temp_

文档评论(0)

f8r9t5c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档