写在前言
此为博主自学江科大51单片机(B站)的笔记,方便后续重温知识
在后面的章节中,为了防止篇幅过长和易于查找,我把一个小节分成两部分来发,上章节主要是关于本节课的硬件介绍、电路图、原理图等理论知识,主要是为下章节的代码部分打基础。
我的单片机是24年12月在tb普中买的,型号是STC89C52,在原视频中引脚或接口不对应的我都会改正,保证在我的机子上能运行才发上来的,还有一些文字部分是我的理解,并非照搬,所以可能有理解不到位的现象。
如有误或交流,敬请指点提问
思维导图:
先介绍温度传感器,然后是引脚及应用电路,内部结构,存储格式,单总线介绍、电路规划和时序结构,最后是数据帧
一、DS18B20
1.介绍
- DS18B20是一种常见的数字温度传感器,其控制命令和数据都是以数字信号的方式输入输出,相比较于模拟温度传感器,具有功能强大、硬件简单、易扩展、抗干扰性强等特点,如热敏电阻, 电压随温度变化,我们就可以需要额外一个AD转换芯片测量它的电压,这样单片机才能读取他的温度,应用方面不如数字温度传感器。比如下面左图1就是我们的DS18B20,他在内部集成了模拟温度传感器还有控制器,可以把温度转换好直接存在RAM里面,我们只需要读取就行了
- 测温范围:-55℃到+125摄氏度
- 通信接口:1-Wire(单总线)
- 其他特征:可形成总线结构、内置温度报警功能、可寄生供电(就是不用单独配置VCC,节省IO口)
- 左图2是一个关于DS18B20的模块,右图1是一个芯片
2.引脚及应用电路
VDD:电源(3.0V-5.5V);GND:电源地;DQ:单总线接口

3.内部结构框图

- 从左往右解释以此是:外部一个上拉电阻,内部左边是一个寄生供电结构,从DQ的数据端口,经过寄生结构后,是一个64-BIT ROM接口,然后是一个内部控制逻辑,下面是一个RAM,SCRATCHPAD(暂存器),最右边是一些温度传感器,报警高触发寄存器(报警阈值),报警低触发寄存器,配置寄存器(设置分辨率,最高0.0625最低0.5),8位的CRC生成器(校验码判断数据是否正确)等模块 (从上到下)
- 寄生供电结构:可以节省VDD,如果下边的VDD没有接的话,就是由DQ的VDD供电的,但是在这里我们不使用,因为寄生供电需要强上拉,但是我们的开发板没有强上拉
- 64-BIT ROM:作为器件地址,用于总线通信的寻址
- SCRATCHPAD(暂存器):用于总线的数据交互
- EEPROM:用于保存温度触发阈值和配置参数
4.寄存器结构
这一块对应上一幅图
左边就是SCRATCHPAD的详细内部结构,右边就是对应报警高触发寄存器(报警阈值),报警低触发寄存器,配置寄存器(设置分辨率,最高0.0625最低0.5)
左边一共有九个字节,前两位存的是温度,第0位是最低有效字节,第1位是最高有效字节,这两位共同构成了温度;然后是两个 TH和TL寄存器,还有一个配置寄存器,右边也是对应这三个,作用就是写入左边的三个寄存器,然后再存入右边的寄存器里存储起来;后面三个位是保留位,最后一位是CRC校验位

二、单总线
1.介绍
- 单总线(1-Wire Bus)是由Dallas公司开发的一种通用数据总线
- 一种通信新:DQ
- 异步、半双工
- 单总线只需要一根通信线即可实现数据的双向传输,当采用寄生供电时,还可以省去设备的VDD线路,此时,供电加通信只需要DQ和GND两根线。
DS18B20
DHT11,温湿度传感器
2.电路规范(硬件规范)
- 设备的DQ均要配置成开漏输出模式
- DQ添加一个上拉电阻,阻值一般为4.7K欧左右,前两条跟I2C的配置一样
- 若此总线的从机采用寄生供电,则主机还应配一个强上拉输出电路
- 总线可以挂载多个设备,可以单独通信跟I2C很像
- 下面比上面多了一个强上拉电路,如果左边的圈接低电平就会闭合,就会接到VCC,如果断开,就是弱上拉供电
3.时序结构(软件规范)
(1)初始化
主机将总线拉低至少480us,然后释放总线,等待15~60us后,存在的从机会拉低总线60~240us以响应主机,之后从机将释放总线
详解:总线的空闲状态是高电平,如果要开始工作就拉低至少480us,然后再释放,但是图中拉上去的是弯的,其实是弱上拉电阻,不会马上拉高,然后从机拉低,然后从机释放

(2)发送一位
主机将总线拉低60~120us,然后释放总线,表示发送0;主机将总线拉低1~15us,然后释放总线,表示发送1.从机将在总线拉低30us后(典型值)读取电平,整个时间片应大于60us
图中左边是发送0,右边是发送1
发送间隔还规定不能连续,需要间隔1u s

(3)接收一位
主机将总线拉低1~15us,然后释放总线,并在拉低后15us内读取总线电平(尽量贴近15us的末尾),读取为低电平则为接收0,读取为高电平则为接收1,整个时间片应大于60us

在这里可能会有疑问,这里的接和发都是是拉低总线然后释放这样会不会混淆。其实不会的,主机在发之前就已经定义后了是发送还是接收,不会出现混淆的现象
(4)发送一个字节:连续调用8次发送一位的时序,依次发送一个字节的8位(低位在前)

接收一个字节:连续调用8次接收一位的时序,依次接收一个字节的8为(低位在前)

三、DB18B30操作流程和数据帧
初始化:从机复位,主机判断从机是否响应
ROM操作:ROM指令+本指令需要的读写操作
功能操作:功能指令+本指令需要的读写操作

本节课只有一个设备,所以不会用到搜索ROM,只用跳过ROM就可以直接访问设备了
我们要进行的功能有,第一条是转换温度,第二条是写暂存器,第三条是读暂存器,第四条是复制暂存器,将暂存器里的字节存入到E2里,实现掉电不丢失;第五条是将E2的字节覆盖回杂草,第六条是读取一位时序,响应供电模式
- 温度变换:初始化→跳过ROM→开始温度变换

- 温度读取:初始化→跳过ROM→读暂存器→连续的读操作

- 温度存储格式
前五位都是符号位(BIT15-11),后面四位(BIT3-0)是存小数的,其余位(BIT10-4)是整数部分
下面是一些举例
负数就是整数的补码+1

下面是流程图可以看一下
