目录
1.2、TCON(定时器控制寄存器)1.3、TMOD(定时器模式寄存器)
1.3、中断允许寄存器 IE(Interrupt Enable)/ 中断优先级寄存器 IP(Interrupt Priority)
一、中断允许寄存器 IE(Interrupt Enable)
二、中断优先级寄存器 IP(Interrupt Priority)
1、寄存器总结
1.1 常用 SFR 汇总表格
| SFR类别 | 寄存器 | 功能 |
|---|---|---|
| 定时器/计数器 | TCON | 定时器控制 |
| 定时器/计数器 | TMOD | 定时器模式设置 |
| 中断系统 | IE | 中断允许控制 |
| 中断系统 | IP | 中断优先级设置 |
| 串行通信 | SCON | 串口控制 |
1.2、TCON(定时器控制寄存器)1.3、TMOD(定时器模式寄存器)
一、基本概述
TCON(Timer Control)是 51 单片机定时器 / 计数器控制寄存器,字节地址
88H,可位寻址,用来控制定时器启停、区分中断标志。
二、寄存器 8 位位定义(从高位到低位:D7 ~ D0)
位序 D7 D6 D5 D4 D3 D2 D1 D0 位名 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
三、逐位功能详解
1. 定时器 / 计数器相关位(D7~D4,T1、T0)
(1)TF1(D7):定时器 1 溢出中断标志位
- 定时器 1 计数溢出时,硬件自动置 1
- 进入中断服务程序后,硬件自动清 0
- 若用查询方式,需软件手动清 0
(2)TR1(D6):定时器 1 运行控制位
TR1 = 1:启动定时器 / 计数器 T1TR1 = 0:关闭定时器 / 计数器 T1(3)TF0(D5):定时器 0 溢出中断标志位
功能同 TF1,对应定时器 T0 溢出标志。
(4)TR0(D4):定时器 0 运行控制位
功能同 TR1,控制 T0 启停:
TR0 = 1:启动 T0TR0 = 0:关闭 T0
2. 外部中断相关位(D3~D0,INT1、INT0)
这四位不属于定时器,是外部中断控制位,集成在 TCON 中:
(1)IE1(D3):外部中断 1 中断请求标志
有中断触发时硬件置 1,响应中断后硬件清 0。
(2)IT1(D2):外部中断 1 触发方式选择
IT1 = 0:低电平触发IT1 = 1:下降沿触发(3)IE0(D1):外部中断 0 中断请求标志
有中断触发时硬件置 1,响应中断后硬件清 0。
(4)IT0(D0):外部中断 0 触发方式选择
IT0 = 0:低电平触发IT0 = 1:下降沿触发
四、常用操作示例(C51)
TR0 = 0; //启动定时器0
TR1 = 1; //关闭定时器1
TF0 = 0; //软件清除T0溢出标志(查询模式)
TCON = 0X01; //TR0=1,启动T0
五、核心总结
- 控制定时器启停只看:TR0、TR1(最常用)
- 判断定时器是否溢出看:TF0、TF1
- 低四位为外部中断控制,和定时器功能无关。
1.3、TMOD(定时器模式寄存器)
- 作用:设置 T0、T1 的工作方式
- 地址:
89H,不可位寻址(只能整体赋值) - 结构:8 位,分高 4 位 (T1) + 低 4 位 (T0
高4位:控制 T1 低4位:控制 T0 D7 D6 D5 D4 D3 D2 D1 D0 T1门控 T1模式 T0门控 T0模式
二、每一位功能
位 符号 功能 D7 GATE1 T1 门控位 D6 C/T1 T1 定时 / 计数选择 D5 D4 M1 M0 T1 工作模式 D3 GATE0 T0 门控位 D2 C/T0 T0 定时 / 计数选择 D1 D0 M1 M0 T0 工作模式 1)C/T 定时 / 计数选择
- 0 = 定时器 (对系统时钟分频计数)
- 1 = 计数器 (对外部引脚脉冲计数)
2)GATE 门控
- 0 = 软启动 → TRx=1 就启动
- 1 = 硬启动 → TRx=1 且 INTx = 高电平 才启动
3)M1 M0 4 种模式
M1 M0 模式 说明 00 模式 0 13 位定时器 01 模式 1 16 位定时器(最常用) 10 模式 2 8 位自动重装(波特率用) 11 模式 3 拆分模式(仅 T0 可用)
三、最常用配置
1. T0 定时器 16 位模式(模式 1)
TMOD = 0x01;
- 定时功能
- 16 位
- 软件启动
2. T1 定时器 16 位模式(模式 1)
TMOD = 0x10;3. T0 定时 + T1 定时 都用 16 位
TMOD = 0x11;4. T1 8 位自动重装(串口波特率用)
TMOD = 0x20;
四、一句话记忆口诀
高四位管T1,低四位管T0 0是定时,1是计数 00模式0,01模式1,10模式2,11模式3 门控0软启动,1硬启动
五、总结
TMOD 用来设置定时器怎么工作
- 8 位寄存器
- 分 T1、T0 两组
- 最常用:0x01(T0 模式 1 定时)、0x10(T1 模式 1 定时)、0x20(T1 自动重装)
1.3、中断允许寄存器 IE(Interrupt Enable)/ 中断优先级寄存器 IP(Interrupt Priority)
一、中断允许寄存器 IE(Interrupt Enable)
作用:控制总中断 + 各个分中断 的 “开 / 关”
- 位寻址:可以单独开关某一个中断
- 核心口诀:用哪个中断,必须开总中断 + 开对应分中断
1. IE 各位定义
位 符号 功能 D7 EA 总中断允许 D4 ES 串口中断 D3 ET1 定时器 T1 中断 D2 EX1 外部中断 1 D1 ET0 定时器 T0 中断 D0 EX0 外部中断 0 取值
- 1 = 允许中断
- 0 = 禁止中断
2. 最常用配置(直接背)
开总中断 + 开定时器 T0 中断
c
运行
EA = 1; // 开总中断 ET0 = 1; // 开 T0 中断开总中断 + 开定时器 T1 中断
c
运行
EA = 1; ET1 = 1;开总中断 + 开串口中断
c
运行
EA = 1; ES = 1;
二、中断优先级寄存器 IP(Interrupt Priority)
作用:设置中断优先级(高 / 低)
51 单片机:2 级优先级
1 = 高优先级
0 = 低优先级
1. IP 各位定义
IP 寄存器: D7 D6 D5 D4 D3 D2 D1 D0 -- -- PT2 PS PT1 PX1 PT0 PX0
2.中断号必须记住
中断源
中断号
外部中断 0
0
定时器 0 中断
1
外部中断 1
2
定时器 1 中断
3
串口中断
4
3. 优先级规则
高优先级 > 低优先级
同优先级:按硬件默认顺序
默认优先级顺序(从高到低)
外部中断 0 → 定时器 0 → 外部中断 1 → 定时器 1 → 串口中断
4. 常用设置
让定时器 T0 为高优先级
c
PT0 = 1;让定时器 T1 为高优先级
c
PT1 = 1;
三、超简记忆口诀
IE(允许)
EA=1 总开关
ET0=1 T0 中断
ET1=1 T1 中断
EX0、EX1 外部中断
ES 串口中断
IP(优先级)
1 = 高,0 = 低
PT0、PT1 定时器优先级
PX0、PX1 外部优先级
PS 串口优先级
四、一句话总结
IE:决定 “允不允许” 中断
IP:决定 “谁优先” 执行
必须先 EA=1 开总中断,否则所有中断都无效
五、51 单片机 定时器 0 中断 完整标准代码
步骤:TMOD 设模式 → 装初值 → EA 开总中断 → ET0 开分中断 → PT0 设优先级 → TR0 启动 → 中断函数写功能
#include <reg52.h>
// 定义引脚(举例:LED闪烁)
sbit LED = P1^0;
// 定时器0初始化函数 【最标准模板】
void Timer0_Init(void)
{
// 1. 设置 TMOD 模式
TMOD = 0x01; // T0 模式1:16位定时器
// 2. 设置初值(11.0592MHz → 50ms中断一次)
TH0 = 0x4C; // 高8位
TL0 = 0x00; // 低8位
// 3. 开中断(IE 中断允许)
EA = 1; // 开总中断
ET0 = 1; // 开 T0 中断
// 4. 设置优先级(IP)
PT0 = 1; // T0 高优先级
// 5. 启动定时器
TR0 = 1;
}
// 定时器0中断服务函数
void Timer0_ISR(void) interrupt 1
{
// 重新装初值(模式1必须手动重装)
TH0 = 0x4C;
TL0 = 0x00;
// 中断要做的事
LED = ~LED; // LED翻转
}
// 主函数
void main(void)
{
Timer0_Init(); // 初始化
while(1)
{
// 主程序其他任务
}
}
2、中断总结
2.1 外部中断
一、两个外部中断
INT0:外部中断 0(引脚 P3.2),中断号 0
INT1:外部中断 1(引脚 P3.3),中断号 2
二、核心寄存器
1. TCON(触发方式)
IT0:INT0 触发选择
IT0=0:低电平触发
IT0=1:下降沿触发IT1:INT1 触发选择
IT1=0:低电平触发
IT1=1:下降沿触发2. IE(中断允许,开关)
EA = 1:总中断打开
EX0 = 1:使能外部中断 0
EX1 = 1:使能外部中断 1
三、配置三步法
开总中断:
EA = 1;开对应外部中断:
EX0=1/EX1=1设置触发方式:
IT0=1/IT1=1
四、中断服务函数示例代码
示例 1:外部中断 0(下降沿触发)
#include <reg51.h>
sbit LED = P1^0;
void Init_INT0(void)
{
EA = 1; // 开总中断
EX0 = 1; // 使能外部中断0
IT0 = 1; // 下降沿触发
}
// 外部中断0服务函数
void INT0_ISR() interrupt 0
{
LED = ~LED; // 翻转LED
}
void main(void)
{
Init_INT0();
while(1)
{
// 主循环
}
}
示例 2:外部中断 1
EA = 1;
EX1 = 1;
IT1 = 1;
void INT1_ISR() interrupt 2
{
// 功能代码
}
五、速记口诀
总中断 EA 必开,EX0/EX1 分开关; IT 设为 1,下降沿最安全; 中断号记牢,0 是 INT0、2 是 INT1。
3、IO端口总结
一、51 有哪 4 个 IO 口?
P0、P1、P2、P3 共 4 个 8 位并行口
P0:P0.0 ~ P0.7
P1:P1.0 ~ P1.7
P2:P2.0 ~ P2.7
P3:P3.0 ~ P3.7
二、最重要特性(考点 + 实用)
1. P0 口
开漏输出,无内部上拉
字节地址:80H
输入时,先写入FF
读引脚时,先向锁存器写“1”
输出低电平:可以
输出高电平:必须外接上拉电阻
功能:通用 IO / 地址数据总线
2. P1 口
准双向口,带内部上拉
字节地址:90H
最常用、最简单,直接做 IO
功能:通用 IO
3. P2 口
准双向口,带内部上拉
字节地址:A0H
功能:通用 IO / 高 8 位地址总线
4. P3 口
准双向口,带内部上拉
字节地址:B0H
双功能口(IO + 第二功能)
常用第二功能:
引脚 第二功能 说明 P3.0 RXD 串口接收 P3.1 TXD 串口发送 P3.2 INT0 外部中断 0 P3.3 INT1 外部中断 1 P3.4 T0 定时器 0 外部输入 P3.5 T1 定时器 1 外部输入 P3.6 WR 外部写控制 P3.7 RD 外部读控制
四、4 个 IO 口对比总结表
端口 上拉电阻 功能 特点 P0 无 数据 / 地址总线 需上拉,驱动强 P1 有 通用 IO 最简单 P2 有 高地址总线 扩展用 P3 有 第二功能 中断、串口、定时器
五、一句话速记
P0 开漏,要上拉
P1 最简单,纯 IO
P2 同 P1,可做地址
P3 双功能,带中断串口
输入先写 1
171

被折叠的 条评论
为什么被折叠?



