C51学习归纳10 --- 单总线通信协议、DS18B20

        通信协议是最重要的,我们之前学习了I2C通信协议,这一节我们学习一下新的通信协议,单总线通信。

一、开发板原理图

        可以看出直接由P3_7口控制,但是遵循单总线协议。

        单总线的电路要求

         现在介绍单总线的通信协议细节:

        1、Init初始化

         初始化:主机将总线拉低至少480us,然后释放总线,等待15~60us后,存在的从机会拉低总线60~240us以响应主机,之后从机将释放总线。

        2、发送一个位

         发送一位:主机将总线拉低60~120us,然后释放总线,表示发送0;主机将总线拉低1~15us,然后释放总线,表示发送1。从机将在总线拉低30us后(典型值)读取电平,整个时间片应大于60us。

        3、接收一位

### DS18B20单总线通信协议的实现方式 DS18B20是一种高精度数字温度传感器,其核心特点是支持单总线通信协议。这种协议允许设备通过一根数据线完成双向通信,极大地简化了硬件连接设计。 #### 初始化过程 在使用DS18B20之前,必须先对其进行初始化操作。此过程涉及向DS18B20发送复位脉冲并等待其返回应答脉冲[^3]。如果成功接收到应答脉冲,则表示DS18B20已准备好接受后续指令。 #### 数据传输机制 单总线协议规定了严格的数据传输规则。所有命令和数据均按字节形式传递,并且低位优先于高位传送[^3]。具体来说: - **写入操作**:主机需分别生成代表逻辑`0`或逻辑`1`的时间间隔波形; - **读取操作**:当从机准备就绪后会主动拉低电平一段时间作为响应标志;随后主机可以依据特定采样时刻判断当前状态从而获取实际值。 以下是基于C51单片机的一个典型例子展示如何利用软件模拟来控制DS18B20进行温度采集的功能代码片段: ```c #include <REGX52.H> #include "OneWire.h" #define DS18B20_SKIP_ROM 0xCC #define DS18B20_CONVERT_T 0x44 #define DS18B20_READ_SCRATCHPAD 0xBE void DS18B20_ConvertT(void){ OneWire_Init(); OneWire_SendByte(DS18B20_SKIP_ROM); OneWire_SendByte(DS18B20_CONVERT_T); } float DS18B20_ReadT(void){ unsigned char TLSB, TMSB; int Temp; float T; OneWire_Init(); OneWire_SendByte(DS18B20_SKIP_ROM); OneWire_SendByte(DS18B20_READ_SCRATCHPAD); TLSB = OneWire_ReceiveByte(); TMSB = OneWire_ReceiveByte(); Temp = (TMSB << 8) | TLSB; T = Temp / 16.0; return T; } ``` 上述程序实现了两个主要功能函数——启动转换(`DS18B20_ConvertT`)以及读取温度值(`DS18B20_ReadT`)。其中前者负责触发内部ADC开始工作并将结果存储至暂存寄存器中待查询;后者则提取该处保存的信息并通过简单计算得出最终摄氏度数显示出来[^2]。 ### 注意事项 为了确保可靠性和准确性,在实际应用过程中还需要注意以下几点: - 提供足够的电源电压给模块供电; - 正确配置GPIO端口模式及其上下拉电阻设置; - 考虑到噪声干扰可能影响正常通讯效果,建议加入滤波电路或者缩短连线长度减少衰减现象发生几率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值