嵌入式学习 51单片机(2)
GPIO基础与应用
概念:
- GPIO(通用输入/输出)是单片机与外部交互的基础接口,支持两种工作模式:
- 输出模式:通过设定引脚电平(高/低)控制外部设备(如LED)。
- 输入模式:检测引脚电平变化(如按键状态)。
类比:
- 输出模式类似控制水龙头开关,输入模式类似观察水流状态。
按键检测原理
硬件连接:
- 按键K1一端接地(GND),另一端接单片机引脚(如P1_4)。按下时,引脚被拉低(低电平)。
检测逻辑:
- 通过读取引脚电平判断按键状态:
if ((P1 & 0x10) == 0) { // 检测P1_4是否为低电平(0x10 = 0001 0000)// 按键按下处理 }
应用场景:
- 车载中控系统需实时检测油温、水温、转速等传感器信号,按键作为输入触发响应。
中断机制详解
核心概念:
- 中断是CPU响应紧急事件的机制,暂停当前任务处理中断,完成后恢复原任务。
中断源类型(51单片机):
- 外部中断(INT0/P3_2、INT1/P3_3)
- 定时器中断(Timer0/Timer1)
- 串口中断
中断处理流程:
- 中断请求触发。
- 检查中断使能及优先级。
- 保护现场(寄存器状态)。
- 执行中断服务函数(ISR)。
- 恢复现场,继续原任务。
寄存器配置:
- IE寄存器:
EA=1
(全局中断使能)EX0=1
(外部中断0使能)
- TCON寄存器:
IT0=1
(下降沿触发)IE0=1
(中断请求标志,硬件自动清零)
定时器原理与配置
定时器作用:
- 产生精确时序,用于外设控制(如PWM、蜂鸣器驱动)。
51单片机定时器:
- 16位自增计数器(Timer0/Timer1),基于晶振频率(如12MHz分频至1MHz,指令周期1μs)。
1ms定时配置:
- TMOD寄存器:
- 低4位清零,
M0=1
(16位模式)。
- 低4位清零,
- 初值计算:
- 1ms = 1000μs → 初值
65536 - 1000 = 64535
(0xFC17)。
- 1ms = 1000μs → 初值
- 启动定时器:
TR0=1
(TCON寄存器)。
- 中断使能:
ET0=1
(定时器0中断使能)。
示例代码:
TMOD &= 0xF0; // 清零低4位
TMOD |= 0x01; // 16位模式
TH0 = 0xFC; // 初值高8位
TL0 = 0x17; // 初值低8位
TR0 = 1; // 启动定时器
EA = 1; // 全局中断
ET0 = 1; // 定时器0中断
PWM与蜂鸣器控制
PWM基础:
- 周期:方波重复时间(频率倒数)。
- 占空比:高电平时间占比,控制设备功率(如电机速度)。
蜂鸣器类型:
- 有源蜂鸣器:内置振荡源,通电即发声。
- 无源蜂鸣器:需外部PWM驱动,通过频率调节音调,占空比调节音量。
驱动示例:
// 生成1kHz PWM(周期1ms,占空比50%)
void Timer0_ISR() interrupt 1 {TH0 = 0xFC; // 重装初值TL0 = 0x17;Buzzer = ~Buzzer; // 电平翻转
}
应用提示:
- 高频率(>20kHz)可用于超声波模块,低频(1-5kHz)驱动蜂鸣器。