文章目录

  • 一、单总线简介
  • 二、单总线协议
    • 单总线初始化
    • 单总线写入
    • 单总线读取
  • DS18B20用法
    • 读取温度(仅仅包含整数部分)
    • 读取温度(含小数部分)

一、单总线简介

1.定义:主机和从机通过1根线进行通信,在一条总线上可挂接的从器件数量几乎不受限制。

2.特点:这是由达拉斯半导体公司推出的一项通信技术。它采用单根信号线,既可传输时钟,又能传输数据,而且数据传输是双向的。

3.优点:单总线技术具有线路简单,硬件开销少,成本低廉,便于总线扩展和维护等。

单总线各种详细介绍网上很多,此处不再赘述,直接进入正题(本文档以常用的DS18B20温度传感器为例

二、单总线协议

单总线初始化

初始化过程 = 复位脉冲 + 从机应答脉冲。

主机通过拉低单总线480 ~ 960 us产生复位脉冲,然后释放总线,进入接收模式。主机释放总线时,会产生低电平跳变为高电平的上升沿,单总线器件检测到上升沿之后,延时15 ~ 60 us,单总线器件拉低总线60 ~ 240 us来产生应答脉冲。主机接收到从机的应答脉冲说明单总线器件就绪,初始化过程完成。

初始化时序图如下所示:

bit Ds18b20_Init(void)
{bit ack_flg =0;DQ = 1;//--保证总线是高电平Delay_x_us(100);//--稍微演示一下,保证电平稳定DQ = 0;//--主机拉总线Delay_x_us(500);//--延时480us-960usDQ = 1; //--释放总线,进入接收模式Delay_x_us(60);//--延时15-60us 此处延时最大的,保证接收正确ack_flg = DQ; //--读取总线应答电平  0:应答成功  1:应答失败return ack_flg;}

单总线写入

写间隙有两种,包括写0的时间隙和写1的时间隙。

当数据线拉低后,在15 ~ 60 us的时间窗口内对数据线进行采样。如果数据线为低电平,就是写0,如果数据线为高电平,就是写1。主机要产生一个写1时间隙,就必须把数据线拉低,在写时间隙开始后的15 us内允许数据线拉高。主机要产生一个写0时间隙,就必须把数据线拉低并保持60 us。

写时间隙时序图如下所示:

void Write_To_Ds18b20(uchar data)
{uchar i;for(i=0;i<8;i++){DQ = 0;//--数据线拉DQ = data&0x01; //--从字节低位开始写入 //--写入间隙大概15usDelay_x_us(30);//--进入采样阶段,过了15us写入间隙以后,如果是低电平,就是写入0,如果是高电平就是写入1DQ = 1; //--写入结束,将总线回复为高电平data>>=1;开始写入下一位}Delay_x_us(30);
}

单总线读取

当主机把总线拉低是,并保持至少1 us后释放总线,必须在15 us内读取数据。

uchar Read_form_Ds18b20(void)
{uchar i;uchar data;for(i=0;i<8;i++){DQ = 0;//--把总线拉,,必须在15us内读完数据data >>= 1;DQ = 1;//保持1us后释放  if(DQ)  //--采样data |= 0x80;  Delay_x_us(30);}return data;
}

DS18B20用法

ds18b20内部的64位的rom存储其独一无二的序列号。暂存存储器包含了存储有数字温度结果的2个字节宽度的温度寄存器。
器件上电后默认为85摄氏度

另外,暂存存储器还提供了一个字节的过温和低温温度报警寄存器和一个字节的配置寄存器
字节3和字节4分别为设置过温和低温警告


当只有一个设备的时候,直接跳过ROM寻址,ROM寻址用于多个设备公用,用于判断具体是哪一个芯片

读取温度(仅仅包含整数部分)

unsigned char    temperature()
{char temp;uchar HI_temp, LOW_temp;Ds18b20_Init();          //DS18B20重置Write_To_Ds18b20(0xcc);      //跳过ROM寻址Write_To_Ds18b20(0x44);        //设置为温度读取模式 (跳过了对暂存寄存器的写取)Delay_x_us(600);        //等待温度读取模式的转换Ds18b20_Init();            //DS18B20重置Write_To_Ds18b20(0xcc);      //跳过ROM寻址Write_To_Ds18b20(0xbe);        //读取暂存寄存器的内容(先低位,再高位)LOW_temp = Read_form_Ds18b20();      HI_temp = Read_form_Ds18b20();temp=high<<4;temp|=(low>>4);return temp;
}

读取温度(含小数部分)

float rd_temperature(void)
{unsigned char MSH,MSL;unsigned int temp;float temperature;Ds18b20_Init();Write_To_Ds18b20(0xCC);Write_To_Ds18b20(0x44);Delay_x_us(600);    while(!DQ);Ds18b20_Init();Write_To_Ds18b20(0xCC);Write_To_Ds18b20(0xBE);MSL=Read_form_Ds18b20();MSH=Read_form_Ds18b20();temp=(MSH&0x0f);temp<<=8;temp|= MSL;temperature=0.0625*temp;return temperature*10;  //返回值为真实温度*10;
}

通信协议--单总线协议相关推荐

  1. [stc89c52] DS18B20基于单总线协议的温度测量

    一.单总线协议(1-wire) 1.定义:主机和从机用一根总线进行通信,是一种半双工的通信方式,单线=时钟线+数据线+控制线( +电源线).理想状况下一条总线上的从器件数量几乎不受数量限制. 2.特点 ...

  2. 《嵌入式 - 嵌入式大杂烩》深入理解单总线协议

    1单总线简介 目前常用的微机与外设之间进行数据传输的串行总线主要有I2C总线.SPI总线和SCI总线.其中I2C总线以同步串行2线方式进行通信(一条时钟线,一条数据线),SPI总线则以同步串行3线方式 ...

  3. 解析单总线协议(1-wire)

    一.单总线协议(1-wire) 1.定义:主机和从机通过1根线进行通信,在一条总线上可挂接的从器件数量几乎不受限制. 2.特点:这是由达拉斯半导体公司推出的一项通信技术.它采用单根信号线,既可传输时钟 ...

  4. DS18B20数字温度传感器及单总线协议规定

    1,DS18B20数字温度传感器的主要特点 通信采用1-Wire接口 每个DS18B20都有唯一的64位序列码储存在板载ROM中 无需外部元件 可从数据线供电,电源范围为3.0V ~ 5.5V. 可测 ...

  5. 单总线协议(1—wire)

    一.单总线协议(1-wire) 1.定义:主机和从机通过1根线进行通信,在一条总线上可挂接的从器件数量几乎不受限制. 2.特点:这是由达拉斯半导体公司推出的一项通信技术.它采用单根信号线,既可传输时钟 ...

  6. 一文看懂单总线协议(1-wire)

    文章目录 一.什么是单总线协议? 1.单总线协议概念及特点 2.硬件结构 3.单总线协议应用 二.单总线协议时序(以DS18B20为例) 1.初始化(复位脉冲 + 存在脉冲) 2.读/写时序 (1)写 ...

  7. Dubbo 通信协议 dubbo 协议为什么要消费者比提供者个数多

    dubbo 通信协议 dubbo 协议为什么要消费者比提供者个数多 因 dubbo 协议采用单一长连接,假设网络为千兆网卡(1024Mbit=128MByte), 根据测试经验数据每条连接最多只能压满 ...

  8. Dubbo 通信协议 dubbo 协议为什么不能传大包

    dubbo 通信协议 dubbo 协议为什么不能传大包 因 dubbo 协议采用单一长连接, 如果每次请求的数据包大小为 500KByte,假设网络为千兆网卡(1024Mbit=128MByte),每 ...

  9. 【通信协议】单总线协议详解——以DHT11为例

    单总线概述         1.单总线的介绍        (1).单总线也称为1-Wire bus,它是由美国DALLAS(达尔斯)公司推出的外围串行扩展总线.单总线系统中配置的各种器件,由DALL ...

最新文章

  1. 在 Ubuntu 上通过命令行改变 Linux 系统语言
  2. A definition for the symbol 'symbolName' could not be located
  3. 皮一皮:这是要红啊...
  4. PowerDesigner中在生成的数据库脚本中用name列替换comment列作为字段描述的方法
  5. C++使用链表实现queue之二(附完整源码)
  6. ASP.NET Core的路由[1]:注册URL模式与HttpHandler的映射关系
  7. 如何使用Hugepage参数
  8. Abra CEO:PayPal满足的比特币购买需求比每天挖出的比特币数量更多
  9. java界面编程 pdf_java – PDF页面使用itext重新排序
  10. Hammer.js分析(四)——recognizer.js
  11. Codeforces Round #468 (Div. 2, based on Technocup 2018 Final Round)
  12. 计算机系统基础-袁春风老师-mooc-第二章测试习题及解析
  13. java aspect调用,在Spring 中使用@Aspect 控制自定义注解的操作
  14. Chrome浏览器占用CPU资源过高(Software Reporter Tool)
  15. 锐角云CEO许胜:因为认同,所以入行
  16. linux自动关机取消命令,Linux中Shutdown命令实现定时自动关机
  17. jquery、js去除浏览器(ff、ie)缓存问题
  18. php中rabbitmq消息乱码,PHP实现RabbitMQ消息队列(转)
  19. 青海省湟水北干渠工程南门峡四支渠隧洞塌方处理
  20. Google发布RAISR

热门文章

  1. virtualbox直通物理硬盘分区
  2. 微信小程序点击按钮分享指定页面
  3. OpenShift 4 - 有关 Operator 相关概念和运维操作
  4. htop与top的区别
  5. 多人合作开发项目时出现的问题总结
  6. ABAP-面试中的奇葩问题
  7. 计算机毕业设计PHP+安卓劳务派遣APP(源码+程序+lw+远程调试)
  8. 华尔街金融家告诉你,为什么有钱人都不娶美女
  9. Monkey测试(转)
  10. 安装gutenberg报错,尝试在官网下载文件安装到指定文件夹还是没用