51单片机期末复习知识点总结

文章目录

0. 速记口诀

寄存器功能口诀
TCON 管定时和中断,TMOD 管方式门控门。
IE 总开关 EA 加子开关,IP 管优先级高低分。
SCON 串口方式收发位,PSW 管标志和寄存器组。

中断优先级口诀(由高到低)
外0 → T0 → 外1 → T1 → 串口

P3 口第二功能
串行收发外中断,定时计数读写存。


1. 基本概念

1.1 时钟与时序

概念含义计算
振荡周期晶振振荡一次的时间T_osc = 1/fosc
时钟周期振荡周期的 2 分频(状态周期)T = 2T_osc
机器周期CPU 完成一个基本操作的时间1 机器周期 = 12 振荡周期 = 6 时钟周期
指令周期执行一条指令所需时间1~4 个机器周期

重要结论fosc = 12 MHz 时,1 机器周期 = 1 μs

1.2 复位状态

  • 复位条件:RST 引脚保持 2 个机器周期 以上的高电平
  • 复位入口地址:0000H
  • 复位后 SFR 初始值
寄存器初值寄存器初值
PC0000HACC00H
SP07H(指向 08H)PSW00H
P0-P3FFHDPTR0000H
TCON00HTMOD00H
SCON00HIE00H(中断全关)
IP00HPCON0xxx0000B

复位后各 I/O 口为高电平,SP=07H(栈底在 08H,使用前需重设 SP


2. 寄存器总结

2.1 常用 SFR 一览

SFR 类别寄存器功能地址
定时器TCON / TMOD定时控制 / 模式88H / 89H
定时器TH0/TL0 / TH1/TL1T0、T1 高/低字节8CH/8AH / 8DH/8BH
中断IE / IP允许 / 优先级A8H / B8H
串口SCON / SBUF控制 / 数据缓冲98H / 99H
I/OP0 / P1 / P2 / P34 个 8 位并行口80H / 90H / A0H / B0H
状态PSW / A / B标志 / 累加器 / 辅存D0H / E0H / F0H
指针SP / DPTR栈指针 / 数据指针81H / 82H-83H

2.2 TCON(88H)

名称功能
D7TF1T1 溢出标志(硬件置 1,自动清 0)
D6TR1T1 运行控制(软件置位)
D5TF0T0 溢出标志
D4TR0T0 运行控制
D3IE1外中断 1 请求标志
D2IT1外中断 1 触发方式(0=低电平,1=下降沿)
D1IE0外中断 0 请求标志
D0IT0外中断 0 触发方式

⚠️ TF0/TF1、IE0/IE1 响应中断后硬件自动清 0;TI/RI 必须软件清 0

2.3 TMOD(89H,高 4 位 T1,低 4 位 T0)

D7/D3D6/D2D5/D4 / D1/D0含义
GATEC/TM1 M0见下表
M1M0方式功能
00方式 013 位定时器(兼容 8048)
01方式 116 位定时器(最常用
10方式 28 位自动重装(波特率专用
11方式 3T0 拆为两个 8 位定时器

常用 TMOD 值

TMOD含义
0x01T0 方式 1(16 位定时)
0x02T0 方式 2(8 位自动重装)
0x10T1 方式 1
0x20T1 方式 2(波特率发生器)

2.4 IE(A8H)

名称功能
D7EA总中断允许
D6-保留
D5ET2T2 中断允许(8052 才有)
D4ES串口中断允许
D3ET1T1 中断允许
D2EX1外中断 1 允许
D1ET0T0 中断允许
D0EX0外中断 0 允许

中断开放条件EA = 1 对应中断允许位 = 1

2.5 IP(B8H)

名称功能
D4PS串口优先级
D3PT1T1 优先级
D2PX1外中断 1 优先级
D1PT0T0 优先级
D0PX0外中断 0 优先级

1=高优先级;同优先级按自然顺序:外0 > T0 > 外1 > T1 > 串口

2.6 SCON(98H)

名称功能
D7/D6SM0/SM1工作方式选择
D5SM2多机通信控制
D4REN允许接收
D3/D2TB8/RB8方式 2/3 第 9 位数据
D1TI发送中断标志(软件清 0
D0RI接收中断标志(软件清 0
SM0 SM1方式功能波特率
0 0方式 08 位同步移位fosc/12
0 1方式 18 位 UART可变(T1 溢出率)
1 0方式 29 位 UARTfosc/32 或 fosc/64
1 1方式 39 位 UART可变

2.7 PSW(D0H)

名称功能
D7CY进位标志
D6AC辅助进位(BCD 调整用)
D5F0用户自定义标志
D4/D3RS1/RS0工作寄存器区选择
D2OV溢出标志
D0P奇偶标志(A 中 1 的个数为奇→P=0,偶→P=1)

工作寄存器区

RS1RS0地址
000 区00H-07H
011 区08H-0FH
102 区10H-17H
113 区18H-1FH

3. 寻址方式(7 种)

序号寻址方式示例说明
立即寻址MOV A, #30H操作数在指令中
直接寻址MOV A, 30H操作数在 RAM/SFR 地址中
寄存器寻址MOV A, R0操作数在 R0-R7 中
寄存器间接寻址MOV A, @R0操作数在 @R0/@R1/@DPTR 所指单元
变址寻址MOVC A, @A+DPTR常用于查表(DPTR 或 PC 作基址)
相对寻址SJMP rel以 PC 当前值为基准的跳转
位寻址ANL C, P1.0对可位寻址位操作

可位寻址区:RAM 20H-2FH(128 位)+ SFR 字节地址能被 8 整除的寄存器


4. 中断系统

4.1 中断源与入口地址

中断源符号中断号入口地址自然优先级
外部中断 0INT0(P3.2)00003H最高
定时器 0T01000BH
外部中断 1INT1(P3.3)20013H
定时器 1T13001BH
串行口TI/RI40023H最低

4.2 外部中断

  • 触发方式由 IT0/IT1 决定:
    • ITx = 0低电平触发(低电平期间须保持)
    • ITx = 1下降沿触发(更常用)
  • 中断请求标志:IE0/IE1(TCON 中)
  • 响应条件:EA=1EXx=1、无同级/高优先级中断

4.3 定时器中断

  • 请求标志:TF0/TF1(溢出时硬件置 1)
  • 初始化步骤:TMOD → 初值 → ETx → EA → TRx

4.4 串口中断

  • 请求标志:TI(发送完成)、RI(接收完成)
  • ⚠️ TI 和 RI 必须软件清 0(与外中断/TF 不同!)
  • 初始化步骤:SCON → PCON(SMOD) → TMOD → TH1 → ES → EA → TR1

5. I/O 端口

5.1 四端口对比

端口地址类型上拉电阻第二功能驱动能力
P080H漏极开路必须外接数据/地址低 8 位复用8 个 TTL
P190H准双向内部有4 个 TTL
P2A0H准双向内部有高 8 位地址4 个 TTL
P3B0H准双向内部有见下表4 个 TTL

⚠️ P0 口唯一必须外接上拉电阻(4.7kΩ~10kΩ)

5.2 P3 口第二功能

引脚第二功能引脚第二功能
P3.0RXD(串行输入)P3.4T0(定时器 0 外部输入)
P3.1TXD(串行输出)P3.5T1(定时器 1 外部输入)
P3.2INT0(外中断 0)P3.6WR(外部写)
P3.3INT1(外中断 1)P3.7RD(外部读)

6. 定时器/计数器

6.1 定时 vs 计数

模式信号源C/T 位典型用途
定时内部机器周期 (fosc/12)C/T = 0定时、波特率
计数外部脉冲 (T0/T1 引脚)C/T = 1计外部事件

6.2 四种工作方式

方式位数初值范围特点
013 位0-8191兼容 8048,少用
116 位0-65535最常用,需手动重装初值
28 位自动重装0-255波特率发生器专用
3两个 8 位0-255仅 T0 有效,TL0/TH0 独立

6.3 初值计算

定时时间公式

  • 方式 1:T = (65536 - X) × 12 / foscX = 65536 - T × fosc/12
  • 方式 2:T = (256 - X) × 12 / foscX = 256 - T × fosc/12

经典例题(fosc = 12 MHz):定时 50 ms

  • X = 65536 - 50000 = 15536 = 3CB0H
  • TH0 = 3CHTL0 = B0H

7. 串行通信

7.1 四种工作方式

方式帧格式用途波特率
08 位数据扩展 I/O(74HC164/165)fosc/12
110 位(1 起始+8 数据+1 停止)异步通信(最常用)T1 溢出率
211 位(含可编程第 9 位)多机通信fosc/32 或 64
311 位多机通信T1 溢出率

7.2 方式 1 波特率

公式

波特率 = (2^SMOD / 32) × (fosc / (12 × (256 - X)))

常用初值表(fosc = 11.0592 MHz)

波特率SMODTH1 初值
24000F4H
48000FAH
96000FDH
192001FDH

11.0592 MHz 的好处:能整除常用波特率,误差为 0


8. 存储器结构

8.1 三存储空间

空间容量地址用途
程序存储器 ROM4KB(8051)0000H-0FFFH存程序代码、表格常量
内部 RAM128B00H-7FH工作寄存器、位寻址、用户 RAM
外部 RAM64KB0000H-FFFFH外扩数据存储

特殊地址

  • 0000H:复位入口
  • 0003H-002AH:5 个中断入口(每个占 8 字节)

8.2 RAM 分区

地址范围功能
00H-1FH工作寄存器区(4 组 × 8 字节)
20H-2FH位寻址区(16 字节 = 128 位,对应位地址 00H-7FH)
30H-7FH用户数据缓冲区
80H-FFHSFR 区(仅 21 个字节有定义)

8.3 SFR 特点

  • 地址范围:80H-FFH
  • 21 个字节有定义(8051)
  • 可位寻址的 SFR:字节地址能被 8 整除(A、B、PSW、IP、P3、IE、SCON、TCON、P0、P1、P2)

9. C51 编程要点

9.1 C51 扩充数据类型

类型长度说明
bit1 位位变量(0 或 1)
sfr8 位特殊功能寄存器声明
sfr1616 位16 位 SFR(如 DPTR)
sbit1 位特殊位声明(可寻址位)
idata8 位间接寻址内部 RAM
pdata8 位分页外部 RAM(MOVX @R0)
xdata16 位外部 RAM(MOVX @DPTR)
code16 位程序存储器(ROM,查表用)

9.2 常用声明示例

sfr  P0  = 0x80;
sfr  SCON = 0x98;
sbit LED = P1^0;           // P1.0
sbit TI  = SCON^1;         // SCON.1

unsigned char code table[] = {0x3F, 0x06, 0x5B, 0x4F};  // 存 ROM
unsigned char xdata buf[100];                            // 存外 RAM

9.3 中断函数

void Timer0_ISR(void) interrupt 1 {  // 1 = 中断号
    // 函数体
}
中断号中断源函数名(自定义)
0外中断 0interrupt 0
1定时器 0interrupt 1
2外中断 1interrupt 2
3定时器 1interrupt 3
4串口interrupt 4

中断函数默认使用寄存器组 3(如需切换在 using n


10. 总线扩展与接口

10.1 系统扩展三总线

总线来源作用
地址总线 AB由 P0(低 8 位)+ P2(高 8 位)组成16 位,寻址 64KB
数据总线 DBP0 口8 位双向
控制总线 CBRD(P3.7)、WR(P3.6)、ALE、PSEN读/写控制

ALE:地址锁存使能(P0 低 8 位地址需经 74HC373 锁存)

10.2 扩展外设时 P0/P2 的角色

  • 扩展 ROM(如 2764):P0 分时复用低 8 位地址/数据,P2 输出高 8 位地址,PSEN 选通
  • 扩展 RAM(如 6264):同上,但用 RD/WR 选通
  • P2 口 在扩展时一般作为高 8 位地址口,不再作普通 I/O

10.3 常用接口芯片

  • 74HC373:地址锁存器(接 ALE)
  • 74HC138:3-8 译码器(片选)
  • 74HC164/165:串入并出/并入串出(接串口方式 0)
  • 8255A:可编程并行 I/O 扩展
  • 8155/8156:RAM+IO+定时器

11. 常用程序模板

11.1 定时器初始化

void Timer0_Init(void) {
    TMOD &= 0xF0;      // 清 T0 控制位
    TMOD |= 0x01;      // T0 方式 1
    TH0 = 0x3C;        // 50ms @ 12MHz
    TL0 = 0xB0;
    ET0 = 1;           // 允许 T0 中断
    EA  = 1;           // 开总中断
    TR0 = 1;           // 启动 T0
}

11.2 串口初始化(9600bps@11.0592MHz

void UART_Init(void) {
    SCON = 0x50;       // 方式 1,REN=1
    PCON = 0x00;       // SMOD = 0
    TMOD &= 0x0F;
    TMOD |= 0x20;      // T1 方式 2
    TH1 = 0xFD;        // 9600bps
    TL1 = 0xFD;
    ES = 1; EA = 1;    // 开串口中断
    TR1 = 1;           // 启动 T1
}

11.3 中断服务程序

void Timer0_ISR(void) interrupt 1 {
    TH0 = 0x3C;        // 方式 1 必须手动重装
    TL0 = 0xB0;
    // 用户逻辑
}

void UART_ISR(void) interrupt 4 {
    if (RI) { RI = 0;          /* 处理接收 */ }
    if (TI) { TI = 0;          /* 处理发送 */ }
}

11.4 LED 闪烁 / 按键扫描关键代码

// LED 闪烁(查询法)
P1 = 0xFE;        // P1.0 亮
delay_ms(500);
P1 = 0xFF;        // 全灭
// 按键去抖
if (KEY == 0) {
    delay_ms(10);
    if (KEY == 0) { /* 确认按下 */ }
    while (KEY == 0);   // 等待释放
}

12. 易混淆点对比

易错点正确错误理解
SP 复位值07H(栈底 08H)00H
TI/RI 清零必须软件清 0认为硬件自动清 0
P0 口上拉必须外接内部有上拉
方式 1 重装必须手动重装初值自动重装
中断入口地址0003H-002AH(8 字节间隔以为 64K 任意
定时器初值单位机器周期数(μs 级)振荡周期数
方式 2 是几位的8 位自动重装16 位
扩展 RAM 用什么指令MOVXMOV 或 MOVC
查表用MOVC A,@A+DPTRMOVX
中断函数关键字interrupt nvoid timer0() interrupt 0
晶振 11.0592MHz 原因整除标准波特率误差为 0以为只是常用值

13. 期末必背 20 条

  1. 51 单片机是 8 位机,16 位地址总线
  2. 1 机器周期 = 12 振荡周期
  3. 复位后 PC=0000H,SP=07H,P0~P3=FFH
  4. P0 必须外接上拉电阻;P1/P2/P3 内部有上拉
  5. TMOD 89H、TCON 88H、IE A8H、IP B8H、SCON 98H、PSW D0H
  6. 中断入口:0003H 000BH 0013H 001BH 0023H
  7. 自然优先级:外0 > T0 > 外1 > T1 > 串口
  8. 定时器初值公式:X = 2^n - T × fosc / 12(n=13/16/8)
  9. 方式 1 是 16 位,需手动重装
  10. 方式 2 是 8 位自动重装,专用于波特率
  11. 串口方式 1 是 10 位帧(1 起始+8 数据+1 停止)
  12. TI、RI 必须软件清 0(其他中断标志硬件自动清 0)
  13. 位寻址区:20H~2FH(共 128 位)
  14. SFR 地址范围:80H~FFH,可位寻址须被 8 整除
  15. 工作寄存器 4 组,由 PSW 的 RS1、RS0
  16. C51 查表关键字 code,中断关键字 interrupt n
  17. 扩展总线时 P0 分时复用地址/数据,经 74HC373 锁存
  18. 读外 RAM 用 RD(P3.7),写外 RAM 用 WR(P3.6)
  19. 11.0592MHz 晶振 → 9600bps → TH1=FDH
  20. C51 中断函数:void Func(void) interrupt n [using m]

复习建议:先背会「速记口诀」和「必背 20 条」,再做 2~3 套历年真题即可覆盖 90% 考点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

(Morgan)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值