一、基本概念
1. 核心处理器类
CPU(Central Processing Unit):中央处理器。运算、控制、指挥整个系统,是核心大脑。
MCU(Micro Ctronller Unit):微控制器。集成度高,将所有功能集成到一块芯片上(CPU、RAM、ROM、timer、UART)。成本低,价格便宜,适合简单控制操作。
MPU(Micro Processing Unit):微处理器。集成度低,只有一块单独的CPU,需要外接功能模块。成本高,能够实现较复杂的功能,可以搭配Linux操作系统。
GPU(Graphics Processing Unit):图像处理单元。处理图形数据,图形渲染。
NPU(Neutal Processing Unit):神经网络处理器。AI推理,硬件加速。
FPU(Float Point Unit):浮点数单元。完成对浮点数运算。
SOC(System on Chip)::片上系统,将多个芯片集成到一起。
2. 存储器
RAM(random access memory):随机访问内存。存放程序运行中的临时变量,掉电数据丢失,读写速度快,价格贵。
ROM(Read-Only Memory):只读存储器。存放单片机程序、代码、指令,掉电数据不丢失,读写数据速度慢,价格便宜。
3. 内部功能模块
timer:定时器。
interrupt:中断。
UART:串行口。用于和其他芯片通信。
晶振:提供时钟频率。
4. 位运算
- |(按位或)
- &(按位与)
- ~(按位取反)
t|=(1<<n); 用途:指定位置一,其余位不变。
t&=~(1<<n);用途:指定为置零,其余位不变。
5. GPIO
GPIO(Genral Purpose Input Output):通用目的输入输出。
输出模式:给定引脚电平,控制引脚高低电平的变化。
- 推挽输出
- 开漏输出
- 复用推挽
- 复用开漏
输入模式:检测引脚电平变化。
- 上拉输入
- 下拉输入
- 浮空输入
- 模拟输入
二、51单片机的硬件结构
51单片机是一个8位微处理器,片内RAM有256字节。
PDIP40:芯片封装方式,表示双列直插40引脚。
40个引脚分为四组,P0~P3组,每一个组有8个引脚。
网络编号:通过网络编号的引脚在实际电路中彼此连通,代替复杂的连接。
外设寄存器:能够操作硬件,具有固定的地址空间。
三、外部输出设备
1. LED灯

led灯由P2组控制。
核心是发光二极管,阳极接高电平,阴极置低电平led灯亮,置高电平灭。
2. 数码管

51单片机上常用4个数码管,同一时间只能控制一个数码管。
P1组低四位 控制位选(选哪个数码管亮),P0组控制段选(显示什么数字)。
cs
//断码表
unsigned char seg_table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//位选
void Bit_Select(unsigned int n)
{
P1&=~(0x0F<<0);
P1|=(1<<n);
}
//段选
void Seg_Select(unsigned int n)
{
P0=seg_table[n];
}
3. 独立按键

前四个按键由P1高四位控制,最后一个按键有P35控制。
按键初始化:
cs
P1|=(0x0F<<4);
P3|=(1<<5);
4. 蜂鸣器

频率影响音调,振幅影响音量。
有源蜂鸣器:内部会存在震荡源,上电后蜂鸣器会发出固定频率的声音。
无源蜂鸣器:内部不存在震荡源,上电后不会发出声音,需要给定P21一个震荡源(例如PWM)。
四、中断系统
1. 定义
当中央处理器CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前任务,转而去执行这个更为紧急的事件,执行完紧急事件后再回到原来被中断的地方,继续原来的工作,称为中断。
2. 中断源
中断源:打断CPU执行当前任务的源头/事件。
51单片机提供了5个中断源:外部中断0、外部中断1、定时器0、定时器1、串口。
外部中断:引脚电平的变化所引发的中断。
- P32对应外部中断0。
- P33对应外部中断1。
中断优先级:CPU去执行中断时,会去比较优先级,优先去执行优先级更高的中断。
51单片机最多中断嵌套两层。
3. 中断处理流程:
- 中断源发出中断请求
- 检查CPU是否响应中断(总开关)及该中断源是否被屏蔽(子开关)
- 比较中断优先级
- 保护现场
- 执行中断服务函数
- 回复现场
4. 中断寄存器
4.1 中断允许寄存器IE
控制对中断源的开放和屏蔽。
EA:CPU的总中断允许控制位,B7------中断总开关
- EA=1,CPU开放中断。
- EA=0,CPU屏蔽所有中断申请。
EX0:外部中断0中断允许位,B0
- EX0=1,允许中断。
- EX0=0,禁止中断。
4.2 定时器/计数器控制寄存器TCON
TCON为定时器/计数器控制寄存器,也锁存外部请求中断源。
IE0:外部中断0请求源标志,硬件自动置位,用于查询,B1
- IE0=1,说明有中断请求。
- IE0=0,无中断。
IT0:中断源触发类型,B0
- IT0=1,下降沿触发
- IT0=0,低电平可触发
5.中断处理函数
中断向量表:本质就是一个数组,数组中存放的是中断服务函数入口地址。
中断向量:本质是一个标号,可以通过标号在中断向量表中找到中断服务函数的入口地址。
中断处理函数后面必须跟中断号(中断向量)。
cs
void int0_handler(void) interrupt 0;
void timer0_handler(void) interrupt 1;
五、定时器/计数器
定时器的目的:精准的定时。
timer0(计数器T0),timer1(计数器T1)。16位模式定时器(最大值为65535),本质是一个自增型计数器,当定时器加到65535溢出会向CPU发出中断请求。
51单片机中的clock(时钟)控制CPU的工作频率。
以51单片机上12MHZ的晶振为例:
- 12分频器:fs=12MHZ/12=10^6HZ
- 时间:T=1/fs=1us
所以51单片机处理一次需要1us,如果希望单片机每隔1ms发送一次中断,可以让定时器计数1000次。
1.定时器相关寄存器
中断允许寄存器IE:
- TF0:定时器T0溢出标志,B5,由硬件自动置位。
- TR0:控制定时器T0开始计数,B4。TR0=1,允许T0开始计数,TR0=0,禁止计数。
定时器/计数器工作模式寄存器TMOD:
-
高四位设置T1,低四位设置T0。
-
M1=0,M0=1,16位定时器,TH存高八位、TL存低八位的工作模式。
csTMOD &= ~(0x0F << 0); TMOD |= (1 << 0); TMOD &= ~ (1 << 1); TH0 = 64535 >> 8; TL0 = 64535;
2. 定时器工作流程:
- 配置定时器0工作模式(16位)。
- 向TL0和TH0装入定时器初值。
- 设置定时器0开始计数。
- 允许CPU响应所有中断+开启定时器0中断。
- 当定时器0产生溢出后,向CPU发起中断请求。
- CPU执行定时器0中断服务函数。
3.PWM
PWM:脉冲宽度调制。
可以让引脚电平周期性进行翻转,使引脚产生一个方波。
PWM周期:一个PWM方波所经历的时间(从上升沿/下降沿到下一个上升沿/下降沿所经历的时间)。
占空比:高电平在一个周期内所占的比例。
定时器可给51单片机的无源蜂鸣器周期性的传递一个震荡。
- 已知频率和占空比,由频率得出周期。
- 高电平时间为周期的一半。
- 高电平时间除以CPU工作一次的时间可得计数次数,由65535减去技术次数即为初值。
- 每中断一次就重置初值并翻转电平。