51单片机学习笔记(2)

第二天的内容核心是GPIO、中断、定时器和PWM,都是后续实操的基础,把重点捋一遍。

GPIO

通用输入输出接口,单片机和外部交互最基础的方式。

输入模式用来检测引脚电平变化,比如按键、ADC信号,细分有上拉输入、下拉输入、浮空输入、模拟输入。

输出模式包括推挽输出、开漏输出,还有对应的复用模式。

中断

简单说就是CPU跑程序的时候,外部有更紧急的事件过来,先暂停当前任务,去处理紧急事件,处理完再回来接着跑。

51单片机一共有5个中断源:

外部中断0(对应P3.2引脚)

外部中断1(对应P3.3引脚)

定时器0

定时器1

串口

中断有优先级,高优先级可以打断低优先级的中断服务,也就是中断嵌套,最多支持两层嵌套。

完整的中断处理流程:

  1. 中断源发起中断请求

  2. CPU检查中断总开关和对应中断源的子开关是否开启

  3. 比较多个中断的优先级

  4. 保护当前程序现场

  5. 执行对应的中断服务函数

  6. 恢复现场,回到原程序继续执行

外部中断0的初始化示例:

void int0_init(void) {

IE |= (1 << 7); // 打开中断总开关

IE |= (1 << 0); // 打开外部中断0的开关

}

中断向量可以理解成中断的编号,CPU靠这个编号找到对应的中断服务函数。

定时器

用来实现精准的定时和延时,是16位的自增计数器,计数满溢出后就会向CPU发起中断请求。

51单片机用12MHz晶振时,经过12分频,实际计数频率是1MHz,也就是每1微秒计数器加1。

最常用的1ms定时初值计算:

1ms需要计数1000次,16位计数器最大值是65535,所以初值 = 65535 - 1000 = 64535。

寄存器配置:

TL0 = 64535; // 定时器0低8位

TH0 = 64535 >> 8; // 定时器0高8位

PWM与蜂鸣器

PWM即脉冲宽度调制,让引脚周期性输出高低电平,形成方波。两个核心参数:

周期:一个完整方波的时间长度

占空比:一个周期内高电平所占的比例

常用在背光调节、蜂鸣器音调控制这类场景。

蜂鸣器分两类:

有源蜂鸣器:内部自带震荡源,通电就发出固定频率的声音

无源蜂鸣器:需要外部输入震荡信号才会响,配合定时器PWM可以控制音调

用定时器驱动无源蜂鸣器的计算示例:

200Hz、50%占空比:半周期2.5ms,计数2500次,初值=65535-2500=63035

400Hz、50%占空比:半周期1.25ms,计数1250次,初值=65535-1250=64285

一点补充

按键的原理就是按下时引脚接地变成低电平,配合中断就能实现按键触发功能。像车载中控里测水温、油温这些功能,本质上都是ADC采集、定时器扫描、中断响应组合起来实现的。

相关推荐
weixin_448119942 小时前
Datawhale DeepSeek Harness 技术入门与架构原理 笔记4
笔记·架构
程序员-Benothing8 小时前
Linux安全加固指南:账号、权限、服务、审计基线
linux·运维·安全
木子欢儿10 小时前
openconnect Linux客户端安装 以及开机自启和登录
linux·运维·服务器
外收内放11 小时前
面向对象高级(实战案例)
开发语言·python·学习
..Dauntless..11 小时前
【Linux】文件系统(一)
linux·运维·服务器
薛定e的猫咪12 小时前
(ICLR 2020)MAML 靠的不是快速学习,而是特征复用
人工智能·深度学习·学习·算法·机器学习
HQB202612 小时前
EG1198|屹晶微电子 120V 内置 MOS 异步降压 DC‑DC(高性价比)
嵌入式硬件·硬件工程
薛定e的猫咪12 小时前
(ICLR 2026)DF-META:面向 FJSP 的无导数元学习实例自适应调度
人工智能·深度学习·学习·算法·机器学习
GeW13 小时前
新质生产力路线图:从Linux到数据库,企业落地要点都在这
linux
果壳science13 小时前
张祥前实验如何获取正电荷
笔记·科技·嵌入式硬件·硬件工程·制造