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

相关推荐
ysa05103010 小时前
【板子】二分答案(最大最小?)
c++·笔记·算法·板子
周洲083010 小时前
STM32独立/窗口看门狗完整配置|防止程序跑飞死机、异常复位
stm32·单片机·嵌入式硬件
论迹复利11 小时前
多平台移植 BTBLE Stack 的思路与踩坑实战——从 Ceva IP 到厂商适配层的迁移指南
嵌入式硬件·物联网·架构
SUNNYSPY00111 小时前
30N03DF-ASEMI扫地机器人主驱动30N03DF
单片机
CPETW11 小时前
企业版配套软件介绍 ---- USB TO SPI_ (Excel)-Microwire
网络·科技·单片机·嵌入式硬件·电子
一个嵌入式学徒12 小时前
LVGL图形库移植STM32
stm32·单片机·嵌入式硬件
Hello_Damon_Nikola12 小时前
伺服电机堵转检测算法详解
单片机·嵌入式硬件·算法
XTIOT66613 小时前
零部件 DPM 码扫码枪生产厂家:工业 DPM 设备多工位组网与 MES/ERP 数据集成方案
网络·单片机·嵌入式硬件·物联网·计算机视觉
振南的单片机世界13 小时前
PSC分频、ARR定周期、OPM停一次:基本定时器三要素
stm32·单片机·嵌入式硬件
JERRY. LIU14 小时前
VS CODE进行NRF CONNECT项目开发出现变量无法链接跳转问题及解决方法
数据库·嵌入式硬件·物联网·iot·嵌入式实时数据库