一、GPIO(通用输入输出口)
基本概念
GPIO(General Purpose Input/Output)是 51 单片机与外部设备交互的最基础接口,通过引脚的电平变化实现数据的输入和输出。
工作模式
- 输出模式:单片机通过引脚输出高电平(5V)或低电平(0V),实现对外部设备的控制。
- 输入模式:单片机通过检测引脚的电平状态,获取外部设备的信息。
形象比喻
可以将 GPIO 比作 "水龙头":
- 输出模式如同控制水龙头开关,决定水流(电平信号)的通断
- 输入模式如同观察水龙头是否有水流,检测外部是否有信号输入
二、按键
按键的原理
以按键 K1 为例,其两个引脚分别连接到 GND 和 P1_4 引脚。当按键被按下时,P1_4 引脚与 GND 短路,呈现低电平;未按下时,P1_4 引脚呈现高电平。
按键检测方法
判断按键是否被按下,只需检测对应引脚是否为低电平。对于 P1_4 引脚,判断逻辑为:
P1 & 00010000 == 0
即当 P1 端口与 0x10(二进制 00010000)进行与运算结果为 0 时,说明 P1_4 为低电平,按键被按下。
典型应用场景
在实时性要求高的车载中控系统中,按键可用于:
- 油温、水温等参数的查看切换
- 发动机转速显示控制
- 仪表盘数据刷新
- 安全座椅状态确认
- 刹车信号检测
三、中断
中断基本概念
- 中断:CPU 在执行当前任务时,被更紧急的事件打断,转而去执行紧急任务,完成后再返回原任务继续执行的过程。
- 中断源:引发中断的事件或源头,51 单片机有 5 个中断源。
- 中断优先级:多个中断同时发生时,CPU 优先处理优先级高的中断。
- 中断嵌套:处理一个中断时,可被更高优先级的中断打断,51 单片机最多支持 2 层嵌套。
中断源分类
中断源类型 | 对应引脚 / 模块 | 说明 |
---|---|---|
外部中断 0 | INT0(P3_2) | 由 P3_2 引脚电平变化触发 |
外部中断 1 | INT1(P3_3) | 由 P3_3 引脚电平变化触发 |
定时器 0 | 定时器 0 模块 | 由定时器 0 溢出触发 |
定时器 1 | 定时器 1 模块 | 由定时器 1 溢出触发 |
串口 | 串口模块 | 由串口收发完成触发 |
中断处理流程
- 中断源发出中断请求
- 检查 CPU 是否允许响应中断及该中断源是否被屏蔽
- 比较中断优先级,选择最高优先级中断
- 保护现场(保存当前执行状态)
- 执行中断服务函数(回调函数)
- 恢复现场,返回原任务继续执行
中断寄存器配置
-
IE 寄存器(中断允许寄存器)
- EA(bit7)= 1:CPU 允许响应所有中断(总开关)
- EX0(bit0)= 1:允许外部中断 0 产生中断
-
TCON 寄存器(定时器控制寄存器)
- IE0(bit1)= 1:外部中断 0 向 CPU 发起中断请求(CPU 响应后自动清 0)
- IT0(bit0)= 1:外部中断 0 采用下降沿触发
四、定时器
定时器基本概念
定时器是产生精准定时的模块,51 单片机内部有两个定时器(timer0、timer1),均为 16 位自增型计数器。
时钟与定时关系
- 51 单片机通常使用 12MHz 或 11.0592MHz 晶振
- 经过 12 分频后,实际工作频率为 1MHz(12MHz/12)
- 完成一条指令的时间为 1μs(1/1MHz)
定时器 0 实现 1ms 定时
1ms = 1000μs,需要计数 1000 次
定时器初值 = 65535 - 1000 = 64535(0xFC67)
定时器寄存器配置
-
TMOD 寄存器(模式选择寄存器)
- 低四位清 0
- M0(bit0)= 1:定时器 0 工作在 16 位模式
-
TCON 寄存器
- TR0(bit4)= 1:允许定时器 0 开始计数
-
IE 寄存器
- EA(bit7)= 1:开启总中断
- ET0(bit1)= 1:允许定时器 0 产生中断
配置流程
- 配置 TMOD 寄存器,设置为 16 位定时器模式
- 向 TH0 和 TL0 装入初值 64535(0xFC67)
- 置位 TR0,启动定时器计数
- 开启总中断和定时器 0 中断
- 编写定时器 0 中断服务函数
五、PWM 与蜂鸣器
PWM(脉冲宽度调制)
- PWM 周期:一个方波的完整周期(从上升沿到下一个上升沿的时间)
- PWM 占空比:一个周期内高电平所占的比例
- 作用:通过产生周期性的电平翻转,实现对外部设备的精确控制
蜂鸣器
-
有源蜂鸣器:内置震荡源,通电后发出固定频率的声音
-
无源蜂鸣器:无内置震荡源,需要外部提供震荡信号才能发声
-
声音特性:
- 音调:由频率决定(高频为高音,低频为低音)
- 音量:由振幅决定(振幅越大,音量越大)