Skip to content

单片机笔记 ​

一、单片机相关知识 ​

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. 单片机软件系统 ​

  1. 系统软件:芯片支撑层(Startup/CMSIS)、板级抽象与驱动层(BSP/HAL)、中间件/系统调度层
  2. 应用软件:应用层(App)

4. 计算机语言与程序设计 ​

计算机语言包括:机器语言、汇编语言、高级语言。

程序设计的步骤为:确定数据结构、确定算法、编程、调试、整理并总结。

算法要满足:可执行性、确定性、有穷性、输入、输出。

二、单片机结构(以 51 单片机为例) ​

tip

经典 Intel 8051 单片机的典型资源包括:4 KB 程序 ROM、128 B 内部 RAM、4 个 8 位 I/O 端口、1 个 UART、2 个 16 位定时器/计数器、5 个中断源。

USART 和 UART 的区别

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 位定义与寄存器组选择
位D7D6D5D4D3D2D1D0
位地址D7HD6HD5HD4HD3HD2HD1HD0H
位名CyACF0RS1RS0OVF1P
  • Cy:进位/借位标志,存在进位/借位时置 1
  • AC:辅助进位标志,运算时需要进位或者借位时置 1
  • F0、F1:用户标志位,用户根据需要置位或复位
  • RS1、RS0:寄存器选择控制位,用于选择当前工作的寄存器组
RS1 RS0寄存器组片内 RAM 地址指令助记符
0 00 组00H~07HR0~R7
0 11 组08H~0FHR0~R7
1 02 组10H~17HR0~R7
1 13 组18H~1FHR0~R7
  • OV:溢出标志位
  • P:奇偶标志位,表示累加器中“1”的个数是奇数还是偶数,奇数为 1,偶数为 0

2. RAM ​

内部数据存储器,包括随机存储器、寄存器区、特殊功能寄存器以及位寻址区。

3. ROM ​

单片机的内部程序存储器

4. 并行 I/O 口 ​

5. 定时器/计数器 ​

6. 中断系统 ​

7. 串行接口 ​

8. 时钟电路 OSC ​