Appearance
单片机笔记
一、单片机相关知识
1. 单片机架构发展历程
早期 20 世纪 70–80 年代出现 4 位 / 8 位单片机,采用哈佛结构(Harvard Architecture)或改进型哈佛结构,将程序存储空间和数据存储空间进行区分。
早期使用 CISC 复杂指令集,支持非常灵活的内存寻址模式,方便汇编程序员编写紧凑的代码,后续出现 RISC(Reduced Instruction Set Computer,精简指令集计算机),指令长度固定、译码电路极其简单,大部分晶体管都可以用来做计算单元或缓存,这使得它能够做到极低的功耗、极小的体积和极低的成本;
tip
“8 位”“16 位”“32 位”通常主要描述处理器的字长以及主要数据处理宽度,但不能简单等同于数据总线宽度。例如 STM32F103 所使用的 Cortex-M3 属于 32 位处理器,但 MCU 内部不同总线的宽度和功能并不一定都相同。因此需要区分:
- CPU 字长:与通用寄存器、ALU 等主要数据处理能力有关。
- 数据总线宽度:表示一次可以传输的数据宽度。
- 地址总线宽度:决定能够表示的地址范围。
三者相关,但并不是同一个概念。
20 世纪 90 年代后,8 位 / 16 位高性能单片机进一步发展,采用 RISC,引入片上 FLASH,强化了低功耗设计;21 世纪以后,32 位 ARM Cortex-M 架构成为主流,引入了 冯·诺依曼结构或统一总线架构 的先进变体,拥有极高的代码密度和 32 位数据处理能力。
DeepSeek 补充
Cortex-M 系列并非全部采用冯·诺依曼结构:Cortex-M3 / M4 / M7 属于哈佛结构(指令总线与数据总线独立,如 I-Code / D-Code),而 Cortex-M0 / M0+ 更接近冯·诺依曼结构。原文表述可作为大致趋势理解。
2. 微型计算机系统(单片机硬件系统)
1. 中央处理器(微处理器)
单片机的运算和控制核心,主要负责取指令、译码并按时序执行,主要组成:
- 算术逻辑单元(ALU)
- 控制单元(CU)
- 寄存器组
2. 存储器
负责存放程序指令和运行数据,主要分为两类:
| 分类 | 说明 | 举例 |
|---|---|---|
| 程序存储器 | 用于存放程序代码 | Flash、ROM |
| 数据存储器 | 用于存放运行过程中的数据 | RAM |
3. 输入/输出端口(I/O port)
GPIO(General Purpose Input/Output)用于实现 MCU 与外部数字信号之间的输入和输出。除 GPIO 外,现代 MCU 通常还集成大量片上外设,例如:
- USART / UART
- SPI
- I²C
- ADC
- 定时器(TIM)
- USB
- DMA
- RTC
4. 总线
连接各个部件间的一组公共信号线,按传输信号的性质通常划分为三类:
| 总线 | 特性 | 作用 |
|---|---|---|
| 数据总线(Data Bus, DB) | 双向总线 | 传输 CPU 读写的数据和指令字 |
| 地址总线(Address Bus, AB) | 单向总线 | 用于指定访问哪个存储单元或外设寄存器 |
| 控制总线(Control Bus, CB) | — | 传输读写控制信号、时钟脉冲、复位信号以及中断请求等 |
3. 单片机软件系统
- 系统软件:芯片支撑层(Startup/CMSIS)、板级抽象与驱动层(BSP/HAL)、中间件/系统调度层
- 应用软件:应用层(App)
4. 计算机语言与程序设计
计算机语言包括:机器语言、汇编语言、高级语言。
程序设计的步骤为:确定数据结构、确定算法、编程、调试、整理并总结。
算法要满足:可执行性、确定性、有穷性、输入、输出。
二、单片机结构(以 51 单片机为例)
tip
经典 Intel 8051 单片机的典型资源包括:4 KB 程序 ROM、128 B 内部 RAM、4 个 8 位 I/O 端口、1 个 UART、2 个 16 位定时器/计数器、5 个中断源。
1. CPU
CPU 分为运算器和控制器两大部分(实际上还有很多比如寄存器组):
1. 控制器(CU)
控制器主要功能是取出 ROM 中的指令代码并进行译码,然后通过定时和控制电路,使模块协调工作,控制器主要包括:
程序计数器(Program Counter, PC)
用于存放 CPU 将要执行的,存放于 ROM 中的下一条指令存储单元所在的地址,CPU 会先把 PC 中的地址送到 AB 上,完成对应指令的操作,同时 PC 的内容自动递增或者根据指令跳转。
上电后 PC 的内容是 0000H,CPU 从该入口地址开始执行程序。
指令计数器
指令译码器
定时控制电路
DeepSeek 勘误
上一项「程序计数器(PC)」与「指令计数器」在 8051 中实际是同一个部件(都指 PC),并列列出属于重复。原文保留,此处说明以便区分。
2. 运算器(ALU)
运算器的功能是对数据进行算数运算和逻辑运算,运算器可以对单字节,半字节进行加、减、乘、除算数运算和与、或、异或、取反、移位等逻辑运算。
运算器由算术逻辑运算部件 ALU、累加器 ACC、程序状态字寄存器 PSW 等组成。
算术逻辑运算部件 ALU
对数据进行算术和逻辑运算,运算的结果返回累加器 ACC,运算的状态信息送入程序状态字 PSW。
累加器 ACC
ACC 是一个 8 位寄存器,指令助记符为 A,它是 CPU 工作时最活跃的一个寄存器,大部分指令要通过累加器与其他部件交换数据
程序状态寄存器 PSW
PSW 是一个 8 位寄存器,用于存放当前指令执行后的某些状态
PSW 位定义与寄存器组选择
| 位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| 位地址 | D7H | D6H | D5H | D4H | D3H | D2H | D1H | D0H |
| 位名 | Cy | AC | F0 | RS1 | RS0 | OV | F1 | P |
- Cy:进位/借位标志,存在进位/借位时置 1
- AC:辅助进位标志,运算时需要进位或者借位时置 1
- F0、F1:用户标志位,用户根据需要置位或复位
- RS1、RS0:寄存器选择控制位,用于选择当前工作的寄存器组
| RS1 RS0 | 寄存器组 | 片内 RAM 地址 | 指令助记符 |
|---|---|---|---|
| 0 0 | 0 组 | 00H~07H | R0~R7 |
| 0 1 | 1 组 | 08H~0FH | R0~R7 |
| 1 0 | 2 组 | 10H~17H | R0~R7 |
| 1 1 | 3 组 | 18H~1FH | R0~R7 |
- OV:溢出标志位
- P:奇偶标志位,表示累加器中“1”的个数是奇数还是偶数,奇数为 1,偶数为 0
2. RAM
内部数据存储器,包括随机存储器、寄存器区、特殊功能寄存器以及位寻址区。
3. ROM
单片机的内部程序存储器