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

相关推荐
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
starlaky5 天前
Django入门笔记
笔记·django
勇气要爆发5 天前
吴恩达《LangChain LLM 应用开发精读笔记》1-Introduction_介绍
笔记·langchain·吴恩达
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
勇气要爆发5 天前
吴恩达《LangChain LLM 应用开发精读笔记》2-Models, Prompts and Parsers 模型、提示和解析器
android·笔记·langchain
Lester_11015 天前
STM32霍尔传感器输入口设置为复用功能输入口时,还能用GPIO函数直接读取IO的状态吗
stm32·单片机·嵌入式硬件·电机控制
LCG元5 天前
低功耗显示方案:STM32L0驱动OLED,动态波形绘制与优化
stm32·嵌入式硬件·信息可视化
三佛科技-187366133975 天前
120W小体积碳化硅电源方案(LP8841SC极简方案12V10A/24V5A输出)
单片机·嵌入式硬件
z20348315205 天前
STM32F103系列单片机定时器介绍(二)
stm32·单片机·嵌入式硬件
qianshanxue115 天前
计算机操作的一些笔记标题
笔记