51单片机最小系统:入门必备知识全解析
本文摘要:51单片机最小系统由CPU、RAM、ROM等核心模块组成,介绍了位运算、LED/数码管控制、按键检测等基础功能实现方法。重点讲解了中断系统(包括5个中断源和优先级处理)、蜂鸣器PWM控制、串口通信原理(UART协议及参数配置)等关键技术。此外还详细说明了DS18B20温度传感器的操作流程和时序控制,包括复位、读写时序等底层通信细节。文章系统梳理了51单片机开发中的硬件架构、寄存器操作和常
目录
51单片机
最小系统:能够使单片机工作所需最少器件
一、51单片机架构

内存
掉电数据块,读写数据速度快,价格昂贵
外存
掉电数据不丢失,读写数据速度慢,价格便宜
CPU
中央处理器,完成数据指令处理

RAM
随机访问内存,与内存具有相同的特性,存放变量,51单片机中RAM256个字节
ROM
只读存储器,存放单片机的程序、代码、指令,一般在程序运行期间只读
MCU
微控制器,集成度高,将所有功能集成到一块芯片上,成本低,应用于简单控制领域
MPU
微处理器,集成度低,只有一个cpu,需要外接功能模块,成本高,功能复杂,适用于跑linux系统
GPU
图像处理单元,处理图像数据

NPU
神经网络处理器,适用于算法领域、AI推理、硬件加速
FPU
浮点数单元,完成对浮点数运算
SOC
片上系统,多个芯片集成到一起构成
二、位运算
按位与:& 有0为0 (清0)
按位或:| 有1为1 (置1)
按位异或:^ 相同为0,相反为1
取反:~
三、LED
用到的寄存器:P2
四、数码管
用到的寄存器:P0(位选),P1(段选)

五、按键
按键的输入
if(P1&(1<<4)==0) P14被按下
六、中断
中断
当中央处理器cpu正在处理某个事情的时候,外界发生了紧急处理请求,要求cpu放下当前的事情转而去处理紧急的事情,执行完紧急事件后再返回被中断的地方,继续原来的工作
中断源
打断cpu执行当前任务的源头
51单片机中有5个中断源:定时器1,定时器0,外部中断0,外部中断1,串口(UART)
外部中断
由引脚电平变化所引发的中断,当高电平变为低电平时可以引发中断
在51单片机中,只有2个引脚可以实现外部中断:外部中断0,外部中断1
中断优先级
cpu去执行中断任务时,会去比较多个中断的优先级,优先去执行优先级更高的任务

中断嵌套
最多允许嵌套2层(51单片机内)
中断处理流程
1、中断源发出中断请求
2、检查cpu是否响应中断,以及中断源是否被屏蔽
3、比较中断的优先级
4、保护现场(栈区),执行之前把返回的地址保存好
5、执行中断服务函数
6、恢复现场
中断寄存器

IE:中断允许寄存器(可位寻址)

TCON:定时器/计数0/1控制寄存器

中断向量表
本质是一个数组,数组中存放的是中断服务函数入口地址
中断向量
本质是一个标号,可以通过标号在中断向量表中找到中断服务函数
中断服务函数

外部中断0初始化

定时器中断初始化


七、蜂鸣器
PWM:脉冲宽度调制
能够使引脚产生1个方波
pwm能够让引脚电平周期性翻转
PWM周期
1个PWM方波(从上升沿/下降沿到下一个上升沿/下降沿)所经历的时间
PWM占空比
高电平在一个周期内所占的比例
震荡源
有源蜂鸣器
内部存在震荡源,上电后蜂鸣器发出固定频率的声音
无源蜂鸣器
内部不存在震荡源,需要给定振幅,上电后不会发出声音

八、串口(UART)
硬件中的通信协议
UART、I2C、SPI、USB、CAN
单工
- 数据接收方和数据发送方是固定的
- 数据传输是通过一根信号线实现
- 数据传输的方向是单一的
半双工
- 通信双方既可以作为数据发送方也可以作为数据接收方 (接收方和发送方不固定)
- 数据传输是通过一根信号线实现
- 数据传输的方向可以是双向的(但同一时刻数据传输呈现单一性)
I2C:半双工
- SCL:时钟线
- SDA:数据线
全双工
- 通信双方既可以作为数据发送方也可以作为数据接收方
- 数据传输是通过两根信号线实现 任意时刻
- 数据传输方向是双向的
SPI:全双工
- SCLK:时钟线
- CS:片选线
MOSI:主机发送,从机接收
MISO:主机接收,从机发送
UART:通用异步收发器(全双工异步串行)
- RXS:数据接收信号线
- TXD:数据发送信号线

串口遵循LSB优先(低位优先),先发低位
串行&并行
串行
通过一根信号线逐个bit逐个bit发送数据
1. 传输速度慢
2. 硬件成本低,实现简单
3. 传输距离远,抗干扰性好(RS485 差分)
并行
通过多根信号线多个bit同时发送
1. 传输速度快
2. 硬件成本高,实现复杂
3. 传输距离近,抗干扰性差(30米)

串口通信时的串口参数

奇偶校验: 无法检测偶数个bit出错的问题
- 奇校验:校验位为'1',若数据位中'1'的个数加上校验位的'1'保持'1'的总个数为 奇数个,则代表奇校验通过
- 偶校验:校验位'0',若数据位中'1'的个数加上校验位的'0'保持'1'的总个数为 偶数个,则代表偶校验通过 无校验
串口参数
| 9600 | 8 | N(O/E) | 1 |
| 波特率 | 数据位 | 无校验(奇校验/偶校验) | 停止位 |
同步通信&异步通信
同步通信
通信双方通过一根共享的时钟信号线规定数据传输的频率
异步通信
通信双方没有共享时钟信号线规定数据传输频率
串口通信通过波特率实现类似同步
串口中断

九、Modbus协议
主机下发协议,从机接收指令并解析完成对应的功能。并给主机回复

十、温度传感器
DS18B20:达拉斯公司,数字温度传感器
分辨率:传感器对温度变化的敏感程度
9位 0.5
10位 0.25
11位 0.125
12位 0.0625
传感器参数
| 传感器名称 | 功能 | 量程 | 精度 | 分辨率 |
| DS18B20 | 温度采集 | -55 ~125 | +-0.5 | 12位,0.0625 |
- GND和VCC不能接反,否则会出现瞬时温度过高
操作ROM指令
1、读ROM:0x33
2、匹配ROM:0x55
3、搜索ROM:0xF0
4、跳过ROM:0xCC
5、报警搜索:0xEC
线与特性
释放总线:把某个引脚拉高,就变为对方说了算,作为数据的接收方,需要释放总线
上拉电阻的目的:释放时,把引脚维持高电平
ds18b20采集温度完整流程
1. 复位 ds18b20_reset();
2. 发送0xCC,跳过ROM write_ds18b20(0xCC);
3. 发送0x44,开启温度转换 write_ds18b20(0x44);
4. 延时1s
5. 复位 ds18b20_reset();
6. 发送0xCC,跳过ROM write_ds18b20(0xCC);
7. 发送0xBE,读取温度 write_ds18b20(0xBE);
8. 读取两个字节温度
ds18b20时序
复位时序
- 主机先将总线拉低至少480us,再释放总线,代表主机发送了一个复位脉冲
- 主机如果在60-240us检测到总线出现低电平,代表ds18b20回复了一个存在脉冲
- ds18b20最终释放总线,总线为高电平

写时序
-
写0时序:
- 主机将总线拉低大于60us
- ds18b20在60us内进行采样,如果采到低电平,代表主机发送了一个0
- 主机释放总线,将引脚拉高
-
写1时序
- 主机将总线拉低大于1us
- 主机释放总线,将引脚拉高
- ds18b20在45us内进行采样,如果采到高电平,代表主机发送了一个1

读时序
- 主机将总线拉低大于1us,释放总线,引脚变为高电平
- 主机再15us内进行采样
- 若采到一个高电平,代表读到1,若采到低电平,代表读到0
- 最终ds18b20释放总线

更多推荐



所有评论(0)