
单总线协议(ds18b20)读写详解
1、时序图
2、51c代码
3、总结
1、时序图
1、初始化
2、写
3、读
2、代码
#include;sbitDQ=P2^0;//定义总线的I/O管脚void
SendByte(unsignedchardat);voidDelay4us()//延时
4us{;}voidDelay(unsignedcharj)//一个循环
15us{unsignedchar电脑如何设置 i;while(j--){i=5;while
(--i);}}bitd18b20_qs()//18b20起始{bitdat;DQ=
1;//DQ复位Delay4us();DQ=0;//拉低总线
Delay(35);//这里延时大概525usDQ=1;//拉高总线
Delay(2);//这里延时大概30usdat=DQ;//读取返回值
(0:有18b20存在1:是没有)Delay(2);returndat;//
返回数值}voidd18b20_x(unsignedchardat)//写8位
数据{unsignedchari;for(i=0;i;>;=1;//数据右移一
位}}unsignedchard18b20_d()//读8位数据
{unsignedchari,dat=0;for(i=0;i;>;=四年级英语跟读 1;//数据右移
一位DQ=1;//拉过总线(准备读取数据)if(DQ)//判断
是否是1如果是就把数据赋值给变量的高位dat|=
0x80;Delay(4);}returndat;//返回读取到数据数
据}unsignedintwd()//读取温度函数{unsignedchari
=0;//低8位数据unsignedcharj=0;//高8位数据
unsignedintk=0;//无符号16整形用来存储读回来的
16位温度数据(j和i组合后的数据)d18b20_qs();//
初始化d18b20_x(0xCC);//跳过序列号的操作(因为
18介意做某事 b20在总线上可以挂很多个,这个序列号和网卡MAC地
址类似)d18b20_x(0x44);//开启温度转换
Delay(2时间轴怎么做 00);//开启温度转换需要时间这里延时一下
d18b20_qs();//初始化d18b20_x(0xCC);//跳过序列号
的操作(因为18b20在总线上可以挂很多个,这个序列号
和网卡MAC地址类似)d18b20_x(0xBE);//读取温度寄存
器等(共可读9个寄存器)前两个就是温度i=
d18b20_d();//读取低8位j=d18b20_d();//读取高8
位k=j;k;>;8)&0xff;//取高8位广东鸡煲 SendByte(j);//通
过串口把高8位数据返回给上位机SendByte(i);//动漫主题壁纸 通过
串口把低8位数据返回颜真卿楷书 给上位机P1=j;//使用个人学习计划书 8个LED
输出高8位数据Delay(200);//延时3毫秒
Delay(200);//延时3毫秒Delay(200);//延时3毫秒
Delay(200);//延时3毫秒Delay(200);//延时3毫秒
Delay(200);//延时3毫秒Delay(200);//延时3毫秒
Delay(200);//延时3毫秒Delay(200);//延时3毫秒
Delay(200);//延时3毫秒P1=i;//使用8个LED输出
低8位数据Delay(200);//延时3毫秒Delay(200);//延
时3毫秒Delay(200);//延时3毫秒Delay(200);//延时
3毫秒Delay(200);//延时3毫秒Delay(200);//延时3
毫秒Delay(200);//延时3毫秒Delay(200);//延时3毫
秒Delay(200);//延时3毫秒Delay(200);//延时3毫秒}}
3、总结
1)使用的是11.0592的晶振
2)使用下面的公式可以计算出摄氏度的温度
wd:读取到的16位数据
摄氏度=wdx0.0625
本文发布于:2023-03-19 08:48:28,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/1679186909149499.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:单总线.doc
本文 PDF 下载地址:单总线.pdf
| 留言与评论(共有 0 条评论) |