当前位置: 首页 > article >正文

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。


http://www.kler.cn/a/577052.html

相关文章:

  • Qt 实现会转动风扇效果
  • 探秘 C 语言:编程世界的基石与传奇
  • 【统计至简】【入门测试1】给定数据矩阵X,如何求其质心、中心化数据、标准化数据、格拉姆矩阵、协方差矩阵、相关系数矩阵
  • 在Windows系统上安装和配置Redis服务
  • [c语言日寄]结构体:内存对齐
  • 【贪心算法1】
  • OkHttp 连接池模块原理深度剖析
  • 软考高项笔记 1.1.1 信息
  • 详解常用集合和映射中的线程安全问题
  • 元组(Tuple)详解——c#
  • Android Studio 创建项目同步失败
  • Oxidized收集H3C交换机网络配置报错,not matching configured prompt (?-mix:^(<CD>)$)
  • 三、零基础学习TypeScript——JavaScript和TypeScript数据类型区别
  • [Lc6_模拟] 替换所有的问号 | 提莫攻击 | Z 字形变换 | 外观数列
  • Django在处理模型录入时间差8小时的问题
  • Python3 爬虫 爬虫中间件
  • 数据结构链式表
  • CEF在MFC上的示例工程
  • 国产编辑器EverEdit - 宏功能介绍
  • VPS加装前置代理全解析