学习笔记——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单片机的核心知识点,适合复习和快速查阅。每个部分都有理论说明和代码示例,便于理解和实践。

相关推荐
点灯小铭1 天前
基于单片机的多功能LCD音乐播放器设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
不会代码的小猴1 天前
Linux环境编程第六天笔记--system-V IPC
linux·笔记
乌恩大侠1 天前
【笔记】USRP 5G 和 6G 参考架构
笔记·5g
biuyyyxxx1 天前
Python自动化办公学习笔记(一) 工具安装&教程
笔记·python·学习·自动化
shansz20201 天前
暂时无法解决的关于STM32F103的RTC日期更新问题
stm32·嵌入式硬件·实时音视频
2501_927773071 天前
嵌入式——时序IIC
单片机·嵌入式硬件
舟舟亢亢1 天前
Java集合笔记总结
java·笔记
丝斯20111 天前
AI学习笔记整理(66)——多模态大模型MOE-LLAVA
人工智能·笔记·学习
kida_yuan1 天前
【Linux】运维实战笔记 — 我常用的方法与命令
linux·运维·笔记
laplace01231 天前
Claude Skills 笔记整理
人工智能·笔记·agent·rag·skills