【经典】51 单片机完全教程 - 从入门到精通
【经典】51 单片机完全教程1. 51 单片机简介
51 单片机是 Intel 公司 1980 年推出的 MCS-51 系列单片机,至今仍在广泛应用。
主要特点:
- 8 位 CPU
- 4KB ROM(片内)
- 128B RAM(片内)
- 4 个 8 位 I/O 口
- 2 个 16 位定时器
- 1 个串口
- 5 个中断源
常见型号:
- AT89C51:经典款
- AT89S52:增强款
- STC89C52:国产增强
- STC12C5A60S2:高速款
2. 内部结构
51 单片机内部包含:
- CPU(运算器 + 控制器)
- ROM(程序存储器)
- RAM(数据存储器)
- I/O 端口(P0-P3)
- 定时器/计数器(T0、T1)
- 串行口(UART)
- 中断系统
- 时钟电路
3. 引脚说明
40 引脚 DIP 封装:
- VCC(40 脚):电源正极
- GND(20 脚):电源负极
- P0-P3(32 个 I/O 口)
- RST(9 脚):复位引脚
- ALE(30 脚):地址锁存
- EA(31 脚):外部访问允许
- PSEN(29 脚):程序存储允许
- XTAL1/XTAL2(19/18 脚):晶振连接
4. 开发环境搭建
4.1 硬件准备
- 51 单片机最小系统板
- USB-TTL 下载器
- 杜邦线若干
- 5V 电源
4.2 软件工具
- Keil C51:开发环境
- STC-ISP:程序下载
- Proteus:仿真软件
5. 第一个程序:LED 闪烁
#include <reg52.h>
void delay(unsigned int ms) {
unsigned int i, j;
for(i = 0; i < ms; i++)
for(j = 0; j < 114; j++);
}
void main() {
while(1) {
P1 = 0x00; // LED 亮
delay(500);
P1 = 0xFF; // LED 灭
delay(500);
}
}
6. 中断系统
51 单片机中断源:
1. 外部中断 0(INT0)
2. 定时器 0 中断(T0)
3. 外部中断 1(INT1)
4. 定时器 1 中断(T1)
5. 串口中断(UART)
中断优先级:
- 默认优先级:INT0 > T0 > INT1 > T1 > UART
- 可通过 IP 寄存器设置
中断服务函数示例:
void Timer0_ISR() interrupt 1 {
TH0 = 0xFC; // 重装初值
TL0 = 0x18;
// 中断处理代码
}
7. 定时器应用
定时器工作模式:
- 模式 0:13 位定时器
- 模式 1:16 位定时器(常用)
- 模式 2:8 位自动重装
- 模式 3:双 8 位定时器
定时器初始化:
void Timer0_Init() {
TMOD &= 0xF0; // 清除 T0 配置
TMOD |= 0x01; // 模式 1,16 位
TH0 = 0xFC; // 1ms@12MHz
TL0 = 0x18;
ET0 = 1; // 使能 T0 中断
EA = 1; // 使能总中断
TR0 = 1; // 启动 T0
}
8. 串口通信
串口配置:
- 波特率:9600/115200
- 数据位:8
- 停止位:1
- 校验位:无
串口初始化:
void UART_Init() {
TMOD |= 0x20; // T1 模式 2
TH1 = 0xFD; // 9600bps@11.0592MHz
TL1 = 0xFD;
TR1 = 1; // 启动 T1
REN = 1; // 允许接收
SM0 = 0;
SM1 = 1; // 模式 1
ES = 1; // 使能串口中断
EA = 1;
}
串口发送:
void UART_SendByte(unsigned char data) {
SBUF = data;
while(!TI);
TI = 0;
}
9. ADC 应用
外部 ADC 芯片(如 PCF8591):
- I2C 接口
- 8 位分辨率
- 4 路模拟输入
10. 项目实战
推荐项目:
1. 电子时钟
2. 数字电压表
3. 温度控制器
4. 步进电机驱动
5. LCD 显示系统
11. 学习建议
1. 理解基本架构
2. 掌握 C51 编程
3. 熟悉外设使用
4. 多动手实践
5. 阅读数据手册
学习资源:
- 51 单片机数据手册
- Keil C51 用户指南
- 1024la 单片机板块
欢迎大家交流 51 单片机开发经验!
页:
[1]