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

相关推荐
FakeOccupational12 分钟前
【电路笔记 STM32】Cortex-M7 UART 中断模式(串口接收中断+串口空闲中断)
笔记·stm32·单片机
小李不想当小白23 分钟前
USART串口协议(STM32标准库学习笔记)
经验分享·笔记·stm32·单片机·嵌入式硬件·学习
无垠的广袤1 小时前
拆解电子价签
单片机·蓝牙·diy·调试器·jlink·墨水屏
小何好运暴富开心幸福1 小时前
嵌入式历史与生态
stm32·单片机·mcu
AOI小白新手上路1 小时前
视频去雨·论文蒸馏笔记:从物理先验到状态空间模型
数据库·笔记·音视频
甜甜的大香瓜2 小时前
【MT32F006】MT32F006之Stimer延时(轮询)
单片机
辰哥单片机设计2 小时前
MP3播放器模块(STM32)
stm32·单片机·嵌入式硬件
AOI小白新手上路2 小时前
DRSformer·论文蒸馏笔记:可学习 Top-k 稀疏注意力去雨网络
网络·笔记·学习
嵌入式-老费2 小时前
esp32开发与应用(题外话之SoC核心板Layout外包)
嵌入式硬件
神一样的老师3 小时前
Windows 中文用户名导致 ccache 编译失败
嵌入式硬件