学习笔记——51单片机学习

51单片机学习笔记整理

一、GPIO(通用输入输出)

概念:GPIO是与外界交互最基本的形式,可以独立配置引脚为输入或输出模式

1. 输出模式:控制引脚输出高电平/低电平

  • 开漏输出:只能输出低电平或高阻态,需外接上拉电阻

  • 推挽输出:可输出高/低电平,驱动能力强

  • 复用开漏:外设功能使用开漏输出

  • 复用推挽:外设功能使用推挽输出

2. 输入模式:检测引脚电平

  • 上拉输入:内部上拉电阻,默认高电平

  • 下拉输入:内部下拉电阻,默认低电平

  • 浮空输入:无内部上下拉,电平不确定

  • 模拟输入:用于ADC采样

二、独立按键

1. 原理图

复制代码
VCC
 |
按键
 |
GPIO---→ CPU
 |
GND

2. 工作原理

  • 按键未按下:GPIO通过上拉电阻接VCC,呈高电平

  • 按键按下:GPIO直接接地,呈低电平

  • 判断方法:检测GPIO是否为低电平

3. 注意:需要软件消抖(延时10-20ms再次检测)

三、中断系统

1. 中断概念

当CPU执行任务时,发生紧急事件要求CPU暂停当前任务,转去处理紧急事件,处理完再返回原任务继续执行

2. 中断源:能打断CPU执行的事件源

51单片机中断源分类:
  1. 外部中断0(INT0 → P3.2引脚)

  2. 外部中断1(INT1 → P3.3引脚)

  3. 定时器0中断

  4. 定时器1中断

  5. 串口中断

3. 中断优先级

多个中断同时发生时,CPU优先处理优先级高的中断

4. 中断嵌套

51单片机最多允许两层中断嵌套

5. 中断处理流程

复制代码
1. 中断源发出请求
2. 检查CPU是否允许中断
3. 比较中断优先级
4. 保护现场(压栈)
5. 执行中断处理函数
6. 恢复现场(出栈)

6. 中断相关寄存器

(1)IE寄存器(中断允许寄存器)
名称 功能
EA 总中断允许 1=允许所有中断,0=禁止所有中断
EX0 外部中断0允许 1=允许,0=禁止
ET0 定时器0中断允许 1=允许,0=禁止
(2)TCON寄存器(定时器控制)
名称 功能
IT0 外部中断0触发方式 1=下降沿触发,0=低电平触发
IE0 外部中断0标志位 1=有中断请求,0=无请求

四、定时器

1. 定时器数量 :51单片机有2个定时器(Timer0和Timer1)

2. 定时器类型自增型定时器

3. 工作原理

  • 定时器内部有16位计数器(0-65535)

  • 给定计数器初值,按1μs速率自增(12MHz晶振)

  • 计数到65535溢出时产生中断请求

4. 定时器相关寄存器

(1)TMOD寄存器(定时器模式)
复制代码
TMOD &= ~(0x0F << 0);  // 清0低4位(Timer0)
TMOD |= (1 << 0);      // 设置Timer0为16位模式(M1=0, M0=1)
(2)TCON寄存器
复制代码
TCON |= (1 << 4);  // TR0=1,启动Timer0
(3)计算定时器初值
复制代码
初值 = 65536 - (所需定时时间 / 机器周期)
例:12MHz晶振,定时1ms
初值 = 65536 - (1000μs / 1μs) = 64536

五、PWM(脉冲宽度调制)

1. PWM概念

通过控制引脚周期性翻转产生方波

2. PWM周期

从一个上升沿(或下降沿)到下一个上升沿(或下降沿)的时间

3. 占空比

高电平在一个PWM周期内所占的比例

复制代码
占空比 = (高电平时间 / 总周期时间) × 100%

4. 应用示例:控制LED亮度、电机速度

六、蜂鸣器

1. 声音原理

  • 音调:由频率决定 → 高音(高频)、低音(低频)

  • 音量:由振幅决定 → 能量大小

2. 蜂鸣器类型

类型 特点 驱动方式
有源蜂鸣器 内部有震荡源 直流电压即可发声
无源蜂鸣器 内部无震荡源 需要PWM方波驱动

3. 无源蜂鸣器控制

复制代码
// 通过PWM控制无源蜂鸣器音调
void beep_tone(unsigned int frequency)
{
    // 根据频率计算PWM周期
    // 控制引脚产生相应频率的方波
}

重点内容总结

序号 问题 答案
1 GPIO的输入模式有哪些? 上拉输入、下拉输入、浮空输入、模拟输入
2 GPIO的输出模式有哪些? 开漏输出、推挽输出、复用开漏、复用推挽
3 独立按键工作原理? 按下时GPIO接地呈低电平,释放时上拉呈高电平
4 中断概念? CPU暂停当前任务处理紧急事件,再返回原任务
5 中断源概念? 能打断CPU执行的事件源
6 51单片机中断源分类? 外部中断0/1、定时器0/1、串口中断
7 中断处理流程? 请求→检查允许→比较优先级→保护现场→执行→恢复
8 51单片机有几个定时器? 2个(Timer0和Timer1)
9 定时器是自增还是自减? 自增型定时器
10 定时器工作原理? 16位计数器按1μs自增,溢出产生中断
11 PWM相关概念? 脉冲宽度调制,产生可调方波
12 PWM周期? 方波一个完整周期的时间
13 PWM占空比? 高电平时间占总周期的比例
14 有源/无源蜂鸣器区别? 有源内部有震荡源,无源需要外部PWM驱动

实用代码示例

1. 中断初始化

复制代码
void int0_init(void)  // 外部中断0初始化
{
    IT0 = 1;          // 下降沿触发
    EX0 = 1;          // 允许外部中断0
    EA = 1;           // 开总中断
}

2. 定时器初始化

复制代码
void timer0_init(void)  // 定时1ms
{
    TMOD &= 0xF0;       // 清除Timer0模式位
    TMOD |= 0x01;       // Timer0模式1(16位)
    TH0 = 0xFC;         // 定时1ms初值高位
    TL0 = 0x66;         // 定时1ms初值低位
    ET0 = 1;            // 允许Timer0中断
    TR0 = 1;            // 启动Timer0
    EA = 1;             // 开总中断
}

3. 按键检测

复制代码
unsigned char key_scan(void)
{
    if(KEY == 0)        // 按键按下
    {
        delay_ms(10);   // 消抖
        if(KEY == 0)    // 确认按下
        {
            while(!KEY);// 等待释放
            return 1;
        }
    }
    return 0;
}

这份笔记系统整理了51单片机的核心知识点,适合复习和快速查阅。每个部分都有理论说明和代码示例,便于理解和实践。

相关推荐
独小乐19 分钟前
012.整体框架适配SDRAM|千篇笔记实现嵌入式全栈/裸机篇
c语言·汇编·笔记·单片机·嵌入式硬件·arm·gnu
不吃鱼的羊22 分钟前
ADC扫描组Scan Group
单片机
卡布叻_星星40 分钟前
AI大模型之采用DeepSeek-Coder:6.7b + Ollama + Continue离线部署
笔记
wb18941 分钟前
NoSQL数据库Redis集群重习
数据库·redis·笔记·云计算·nosql
海砥装备HardAus1 小时前
飞控算法中双环串级PID深度解析:角度环与角速度环的协同机制
stm32·算法·无人机·飞控·串级pid
宵时待雨1 小时前
优选算法专题1:双指针
数据结构·c++·笔记·算法·leetcode
Stella Blog1 小时前
狂神Java基础学习笔记Day01
java·笔记·学习
tq10861 小时前
时间、决断与主体性:从“存在决定自我”到对“存在即本质”的批判
笔记
LCMICRO-133108477461 小时前
长芯微LPC556D1完全P2P替代DAC8830,是引脚兼容的16位数模转换器,该系列产品为单通道、低功耗、缓冲电压输出型DAC
stm32·单片机·嵌入式硬件·fpga开发·硬件工程·电压输出型dac
forAllforMe1 小时前
如何用定时器PWM产生SPWM?--电机驱动控制
嵌入式硬件