51 单片机中断控制寄存器 TCON

在 51 单片机中,中断控制寄存器 TCON(Timer/Counter Control Register,定时器 / 计数器控制寄存器)主要用于控制定时器 / 计数器的启动、停止以及外部中断的触发方式等。它既可以按字节寻址,也可以按位寻址,其字节地址为 88H。下面详细介绍 TCON 寄存器的各个位。

TCON 寄存器的位分布

位序号位名称功能描述
D7TF1定时器 / 计数器 1 溢出标志位
D6TR1定时器 / 计数器 1 运行控制位
D5TF0定时器 / 计数器 0 溢出标志位
D4TR0定时器 / 计数器 0 运行控制位
D3IE1外部中断 1 请求标志位
D2IT1外部中断 1 触发方式控制位
D1IE0外部中断 0 请求标志位
D0IT0外部中断 0 触发方式控制位

各位功能详细解释

定时器 / 计数器相关位
  • TF1(D7):定时器 / 计数器 1 溢出标志位。当定时器 / 计数器 1 产生溢出时,硬件会自动将 TF1 置为 1。如果中断允许,会触发定时器 / 计数器 1 的中断。在中断服务程序中,需要软件将 TF1 清 0;如果不使用中断方式,也可以通过查询 TF1 的状态来判断定时器 / 计数器 1 是否溢出。
  • TR1(D6):定时器 / 计数器 1 运行控制位。当 TR1 = 1 时,启动定时器 / 计数器 1;当 TR1 = 0 时,停止定时器 / 计数器 1。可以通过软件对 TR1 进行置位或清零操作来控制定时器 / 计数器 1 的启动和停止。
  • TF0(D5):定时器 / 计数器 0 溢出标志位。功能与 TF1 类似,当定时器 / 计数器 0 产生溢出时,硬件将 TF0 置为 1。若使用中断方式,在中断服务程序中需软件清 0;若采用查询方式,则通过查询 TF0 状态判断溢出情况。
  • TR0(D4):定时器 / 计数器 0 运行控制位。当 TR0 = 1 时,启动定时器 / 计数器 0;当 TR0 = 0 时,停止定时器 / 计数器 0。可通过软件控制 TR0 来启停定时器 / 计数器 0。
外部中断相关位
  • IE1(D3):外部中断 1 请求标志位。当外部中断 1(INT1,P3.3 引脚)有中断请求时,硬件会将 IE1 置为 1。若中断允许,CPU 响应中断后,硬件会自动将 IE1 清 0(对于下降沿触发方式)。
  • IT1(D2):外部中断 1 触发方式控制位。当 IT1 = 0 时,外部中断 1 为低电平触发方式,即只要 P3.3 引脚为低电平,就会触发中断;当 IT1 = 1 时,外部中断 1 为下降沿触发方式,只有当 P3.3 引脚的电平从高电平变为低电平时,才会触发中断。
  • IE0(D1):外部中断 0 请求标志位。功能与 IE1 类似,当外部中断 0(INT0,P3.2 引脚)有中断请求时,硬件将 IE0 置为 1。CPU 响应中断后,硬件会自动将 IE0 清 0(对于下降沿触发方式)。
  • IT0(D0):外部中断 0 触发方式控制位。当 IT0 = 0 时,外部中断 0 为低电平触发方式;当 IT0 = 1 时,外部中断 0 为下降沿触发方式。

示例代码

以下是一个简单的示例代码,展示了如何使用 TCON 寄存器配置外部中断 0 为下降沿触发方式:

#include <reg51.h>

// 定义一个 LED 引脚
sbit LED = P1^0;

// 外部中断 0 的中断服务函数
void External0_ISR() interrupt 0 {
    LED = ~LED;  // 翻转 LED 的状态
}

void main() {
    IT0 = 1;    // 设置外部中断 0 为下降沿触发方式
    IE0 = 0;    // 清外部中断 0 请求标志位(可省略,初始值一般为 0)
    EX0 = 1;    // 使能外部中断 0
    EA = 1;     // 全局中断使能

    while(1) {
        // 主循环可以执行其他任务
    }
}

在这个示例中,通过 IT0 = 1; 将外部中断 0 设置为下降沿触发方式。当 P3.2 引脚出现下降沿信号时,会触发外部中断 0,进而执行外部中断 0 的中断服务函数 External0_ISR(),在该函数中会翻转 P1.0 引脚连接的 LED 的状态。同时,EA = 1; 开启全局中断使能,EX0 = 1; 使能外部中断 0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值