【DAY29】51 单片机核心技术拆解:中断处理 + 定时器配置 + 串口通信实操
本文摘要: 主要介绍了单片机系统的核心组件和工作原理。内容包括:1)处理器类型(CPU、MCU、MPU、GPU等)及其应用场景;2)存储器类型(RAM和ROM)的特点与区别;3)外设寄存器的作用;4)GPIO接口功能;5)中断系统的工作机制和配置方法;6)定时器/计数器的原理及计算;7)通信协议(单工、半双工、全双工)和UART串口通信技术;8)PWM波形生成原理;9)蜂鸣器工作原理。重点阐述了5

一、CPU......
最小系统:能够使51单片机工作所需最少器件
(电源、晶振、复位)
1.CPU
中央处理器(Central Processing Unit)
完成数据运算
2.MCU
微控制器(Micro controller Unit)
功能:集成了 CPU + 内存 (少量) + 外设。
特点:集成度高、成本低、简单控制领域
3.MPU
微处理器(Micro processor Unit)
功能:仅包含 CPU 核心,需要外接内存、外设、存储才能工作。
特点:集成度低,成本高,需要外接功能模块
4.GPU
图像处理单元(Graphics Processing Unit)
功能:图像、视频处理
5.NPU
神经网络处理器(Neural Processing Unit)
功能:AI推理
6.FPU
浮点运算单元(Floating Point Unit)
功能:CPU 的子模块,负责处理小数运算(没有 FPU 的 CPU 只能算整数)
| 缩写 | 全称 | 核心含义 & 通俗解释 | 典型应用场景 |
|---|---|---|---|
| CPU | Central Processing Unit | 中央处理器,通用计算核心,负责执行指令、统筹全局 | 所有电子设备的 “大脑”(电脑、手机、单片机) |
| MCU | Microcontroller Unit | 微控制器,集成了 CPU + 内存 (少量) + 外设 (GPIO/UART 等) + 存储 的单片芯片,主打 “控制” | 智能家居、传感器、小家电(比如空调遥控器) |
| MPU | Microprocessor Unit | 微处理器,仅包含 CPU 核心,需要外接内存、外设、存储才能工作 | 早期电脑、简单工控板 |
| GPU | Graphics Processing Unit | 图形处理器,擅长并行计算,主打图像 / 视频处理 | 显卡、手机屏幕渲染、游戏 |
| NPU | Neural Processing Unit | 神经网络处理器,专为 AI 算法优化 | 手机人脸识别、智能摄像头、自动驾驶 |
| FPU | Floating Point Unit | 浮点运算单元,CPU 的子模块,负责处理小数运算(没有 FPU 的 CPU 只能算整数) | 需要精准计算的场景(比如传感器数据校准) |
| SOC | System on Chip | 片上系统,高度集成(CPU+GPU+NPU + 内存控制器 + 外设等),是 “超级集成芯片” | 手机、平板、高端嵌入式设备(比如树莓派) |
7.SOC
片上系统(System on Chip)
功能:(CPU+GPU+NPU + 内存控制器 + 外设等),是 “超级集成芯片”
二、RAM和ROM
1.RAM
随机访问内存(random access memory)
cpu访问变量地址,变量地址随机
2.ROM
只读存储器——程序运行期间只读
存放单片机程序、代码、指令
3.区别
| RAM(随机存取存储器) | ROM(只读存储器) | |
|---|---|---|
| 掉电数据 | 丢失(易失性) | 保留(非易失性) |
| 读写速度 | 极快 | 较慢(部分 ROM 仅能读) |
| 读写权限 | 可读可写 | 出厂写入后,普通场景只读(比如单片机的 Flash 属于可擦写 ROM) |
| 核心用途 | 运行时临时存储数据(比如程序运行的变量、缓存) | 永久存储程序、固件、常量(比如单片机的程序烧录到 ROM 里) |
| 通俗例子 | 电脑的内存条、手机的运行内存(8G/12G) | 电脑的硬盘、手机的存储(128G/256G)、单片机的 Flash |
外存 -> 内存 -> CPU
CPU -> 内存-> 外存
三、外设寄存器
寄存器是芯片内部的一小块高速存储单元,外设寄存器就是 “专门用来控制外设(比如 GPIO、UART、LED)的寄存器”
能够操作硬件,有固定地址
四、LED操作的寄存器
AT89C51:P2寄存器
五、GPIO
GPIO(General Purpose Input/Output)
通用输入输出口,是单片机 / 芯片对外的 “通用接口引脚”。
六、中断
1.概念
当cpu执行某个任务,外界发生紧急事件,暂停当前任务,去处理紧急事件,处理结束后再回到原任务被打断的地方继续向下执行
1.1中断源
打断cpu执行当前任务的源头事件
- 外部中断0
- 外部中断1
- 定时器0
- 定时器1
- 串 口
1.2中断优先级
多个中断源同时向cpu申请中断,会执行优先级高的中断
1.3中断处理流程
- 中断源发送中断请求
- 检查CPU是否响应中断(总开关)以及某中断源是否被屏蔽 (子开关)
- 比较中断优先级
- 保护现场
- 执行中断服务函数
- 恢复现场
2.配置
2.1 IE:中断允许寄存器
IE |= (1 << 7);
IE |= (1 << 0);

2.2 TCON 定时器/计数器 中断控制寄存器

//外部中断0的初始化函数
#include <reg51.h>
void int0_init(void)
{
P3 |= (1 << 2);
IE |= (1 << 7);
IE |= (1 << 0);
TCON |= (1 << 0);
}
3.中断向量表&中断向量
中断向量表:本质是一个数组,存放中断服务函数入口地址
中断向量:一个标号,可以通过标号再中断向量表中找到中断服务函数的入口地址
4.定时器/计数器
4.1 timer0
16位模式定时器 65535 自增型定时器
定时器赋初值 -> 开启定时器 -> 以固定频率自增到65535 ->溢出后产生中断
eg:晶振频率为12MHZ,求定时器初值
12MHZ / 12 = 1MHZ
T = 1 / 1MHZ = 1us
完成1ms定时 :
1ms = 1000us
1000us / 1us = 1000次
初值 = 65535 - 1000
4.2配置
TCON |= (1 << 4); //允许timer0计数

//配置定时器工作模式
#include <reg51.h>
#include "timer.h"
#define HZ_200 63035
void timer0_init(void)
{
// 1. 配置定时器0工作模式
TMOD &= ~(0x0F << 0);
TMOD |= (1 << 0);
TMOD &= ~(1 << 1);
// 2. 向定时器0赋初值
TH0 = HZ_200 >> 8;
TL0 = HZ_200;
// 3. 允许定时器0开始计数
TCON |= (1 << 4);
// 4. 允许CPU响应中断
IE |= (1 << 7);
// 5. 允许定时器0产生中断
IE |= (1 << 1);
}
三、PWM
脉冲宽度调制
- 能够使引脚产生一个方波, pwm让引脚电平周期性翻转
- 周期:一个下降沿到下一个下降沿所经历的时间
- 占空比:高电平在一个周期内所占比例
四、蜂鸣器
- 有缘蜂鸣器:内部存在震荡源,上电后蜂鸣器会发出固定频率
- 无缘蜂鸣器:内部无震荡源,要手动赋频率
五、通信协议
1.单工模式
- 数据接收方和发送方是固定的
- 数据通过一根信号线实现
- 数据传输方向单一
2.半双工
- 通信双方既可以作为数据发送方,也可以作为数据接收方
- 数据传输通过一根信号线实现
- 传输方向可以是双向(同一时刻数据传输呈现单一性)
3.全双工
- 通信双方既可以作为数据发送方,也可以作为数据接收方
- 数据通过2根信号线实现
- 双向传输
4.UART
universal async receiver transmitter,通用异步收发器 :全双工、串行、异步
RXD:数据接/收信号线
TXD:数据发/送信号线遵循LSB优先发送
4.1串行、并行
- 串行:通过一根信号线逐个bit发送数据
- 传输慢;
- 硬件成本低、实现简单;
- 传输距离远,抗干扰性好
- 并行:通过多根信号线多个bit同时发送
- 传输速度快
- 硬件成本高,实现复杂
- 传输距离近,抗干扰性差
4.2 TTL; RS232; RS485; CH340
TTL: 高电平15V 低电平0V,传输距离近
RS232:负逻辑(MAX232)
高电平: -3V - -15V
低电平:3V - 15V
RS485:
差分信号 A - B > 2V A - B < -2V
高电平: 2V - 6V
低电平:-6V - -2VCH340:电平转换芯片(TTL -> USB电平)
4.3奇偶校验
奇偶校验: 无法检测偶数个 bit 出错的问题
- 奇校验 :校验位为 '1',若 数 据位 中'1'的个 加上 校验位 的 '1' 保持 '1'的总个数为奇数 个 , 则代表奇校验通过
- 偶 校验 :校验位'0', 若数据位中 '1'的个数加上 校验位的 '0' 保持 '1'的总个数为偶数个 , 则代 表偶校验通过
4.4同步、异步
- 同步通信 : 通信双方通过一根共享的时钟信号线 规定 数据传输的 频率
- 异步通信 :通信双方没有 共享时钟信号线 规定 数据传输 频率
- 作为常用的串行通信方式,以TTL为例,串口通信在不同主机之间的数据格式为:

- 空闲时数据线为高电平;
- 发送一个低电平表示起始位;
- 发送的第一个比特是最低位(最右边);
- 校验位分为奇校验,偶校验和无校验。奇校验是指确保数据位加上校验位中"1",1的总数为奇数;偶校验是指确保数据位加上校验位中"0",1的总数为偶数;
- 为保证下一个字节发送前的起始位能够表现出来,校验位之后发送一个停止位1。
4.5串口配置初始化函数

#include<reg51.h>
void uart_init(void)
{
//配置串口工作模式
SCON &= ~(3 << 6); //bit6 bit7清0
SCON |= (1 << 6);
SCON &= ~(1 << 7);
//允许串口接收数据
SCON |= (1 << 4);
PCON &= ~(3 << 6);
PCON |= (1 << 7);
PCON &= ~(1 << 6); //复位
//工作模式:8位自动重装载定时器
TMOD &= ~(0x0F << 4);
TMOD |= (1 << 5);
TMOD &= ~(1 << 4);
//定时器初值
TL1 = 230;
TH1 = 230;
//初值计算 2^8 - 2 * f晶振 /32 / bps /12
//允许计数
TCON |= (1 << 6);
IE |= (1 << 7);
IE |= (1 << 4);
}
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐
所有评论(0)