单片机原理及技术(六)—— 中断系统的工作原理

目录

一、AT89S51中断技术概述

二、AT89S51中断系统结构

2.1 中断请求源

2.2 中断请求标志寄存器

2.2.1 TCON 寄存器

2.2.2 SCON 寄存器

三、中断允许与中断优先级的控制

3.1 中断允许寄存器 IE

3.2 中断优先级寄存器 IP

四、响应中断请求的条件

五、外部中断的触发方式选择

六、中断函数

6.1 中断系统应用举例


一、AT89S51中断技术概述

AT89S51是一款8位单片机,具有丰富的中断技术功能。中断技术是一种能够提高系统灵活性和响应速度的关键技术,它允许单片机在执行程序的过程中,根据外部或内部事件的发生而中断当前的程序执行,去执行相应的中断服务程序。

二、AT89S51中断系统结构

 AT89S51的中断系统结构图

2.1 中断请求源

AT89S51是一种8位微控制器,具有5个中断请求源。这些中断请求源是:外部中断0(INT0)、外部中断1(INT1)、定时器0中断请求(TF0)、定时器1中断请求(TF1)和串行口中断请求(RI/TI)。

外部中断0和外部中断1是外部引脚的中断请求源,可以通过设置和清除相关的寄存器来使能和禁用这些中断。

定时器0和定时器1中断请求是由定时器/计数器模块产生的。当定时器/计数器溢出时,会触发相应的中断请求。

串行口中断请求是由串行通信口接收和发送数据时产生的。当接收到数据时,会触发接收中断请求(RI);当发送完数据后,会触发发送中断请求(TI)。

2.2 中断请求标志寄存器

5个中断请求源的中断请求标志分别由特殊功能寄存器TCON和SCON的相应位锁存。

2.2.1 TCON 寄存器

TCON寄存器(Timer/Counter Control Register)是8051系列微控制器中的一个特殊功能寄存器,用于控制定时器、计数器以及外部中断的相关设置。

TCON寄存器是一个8位寄存器,其位的含义如下:

  • TF1 (定时器1溢出标志位):当定时器1计数溢出时,TF1位会被设置为1。在中断服务程序中,可以通过清除TF1位来复位溢出标志。
  • TR1 (定时器1启动/停止控制位):当TR1位为1时,定时器1启动;当TR1位为0时,定时器1停止。
  • TF0 (定时器0溢出标志位):当定时器0计数溢出时,TF0位会被设置为1。在中断服务程序中,可以通过清除TF0位来复位溢出标志。
  • TR0 (定时器0启动/停止控制位):当TR0位为1时,定时器0启动;当TR0位为0时,定时器0停止。
  • IE1 (外部中断1边沿触发标志位):当外部中断1检测到边沿触发时,IE1位会被设置为1。
  • IT1 (外部中断1触发类型控制位):用于设置外部中断1的触发类型。当IT1位为0时,外部中断1为低电平触发;当IT1位为1时,外部中断1为下降沿触发。
  • IE0 (外部中断0边沿触发标志位):当外部中断0检测到边沿触发时,IE0位会被设置为1。
  • IT0 (外部中断0触发类型控制位):用于设置外部中断0的触发类型。当IT0位为0时,外部中断0为低电平触发;当IT0位为1时,外部中断0为下降沿触发。

2.2.2 SCON 寄存器

SCON(Serial Control Register)寄存器是8051系列微控制器中的一个特殊功能寄存器,用于控制串行通信的相关设置。

SCON寄存器是一个8位寄存器,其位的含义如下:

  • SM0/FE(串行通信模式选择/帧错误标志位):当SM0为0时,串行通信使用8位数据位;当SM0为1时,串行通信使用9位数据位;当FE为1时,表示接收到的数据帧中有错误。
  • SM1(串行通信模式选择):当SM1为0时,串行通信使用异步模式(波特率可变);当SM1为1时,串行通信使用同步模式(波特率固定)。
  • SM2(多机通信模式选择):当SM2为0时,串行通信使用单机模式(无多机通信);当SM2为1时,串行通信使用多机模式。
  • REN(串行通信接收使能):当REN为1时,允许串行接收器接收数据;当REN为0时,禁止串行接收器接收数据。
  • TB8(发送数据的第9位):当SM0为1时,TB8表示发送数据的最高位。
  • RB8(接收数据的第9位):当SM0为1时,RB8表示接收数据的最高位。
  • TI(发送中断标志):当发送数据完成时,TI将被置位为1。
  • RI(接收中断标志):当接收到数据时,RI将被置位为1。

注意:

  • TI和RI均需要手动清除。

三、中断允许与中断优先级的控制

3.1 中断允许寄存器 IE

IE(Interrupt Enable)寄存器是8051系列微控制器中的一个特殊功能寄存器,用于控制中断的相关设置。

IE寄存器是一个8位寄存器,其位的含义如下:

  • EA(全局中断使能):当EA为1时,允许所有中断;当EA为0时,禁止所有中断。
  • ET2(定时器2中断使能):当ET2为1时,允许定时器2中断;当ET2为0时,禁止定时器2中断。
  • ES(串行口中断使能):当ES为1时,允许串行口中断;当ES为0时,禁止串行口中断。
  • ET1(定时器1中断使能):当ET1为1时,允许定时器1中断;当ET1为0时,禁止定时器1中断。
  • EX1(外部中断1使能):当EX1为1时,允许外部中断1;当EX1为0时,禁止外部中断1。
  • ET0(定时器0中断使能):当ET0为1时,允许定时器0中断;当ET0为0时,禁止定时器0中断。
  • EX0(外部中断0使能):当EX0为1时,允许外部中断0;当EX0为0时,禁止外部中断0。

3.2 中断优先级寄存器 IP

在AT89S51微控制器中,中断优先级关系的两条基本规则如下:

  1. 低优先级可被高优先级中断,高优先级不能被低优先级中断。

  2. 任何一种中断(不管是高级还是低级)一旦得到响应,不会再被它的同级中断源所中断。如果某一中断源被设置为高优先级中断,在执行该中断源的中断服务程序时,则不能被任何其他中断源的中断请求所中断。

中断优先级寄存器(Interrupt Priority Register,IP)是一个8位寄存器,用于设置和存储中断的优先级。IP的各位的含义如下:

  • PX0(外部中断0中断优先级控制位):1——高优先级;0——低优先级。
  • PX1(外部中断1中断优先级控制位):1——高优先级;0——低优先级。
  • PS(串行口中断优先级控制位):1——高优先级;0——低优先级。
  • PT1(定时器T1中断优先级控制位):1——高优先级;0——低优先级。
  • PT0(定时器T0中断优先级控制位):1——高优先级;0——低优先级。

在同时收到几个同一优先级的中断请求时,哪一个中断请求能优先得到响应,取决于内部的查询顺序。这相当于在同一个优先级内还同时存在另一个辅助优先级结构,其查询顺序如下表所示。

四、响应中断请求的条件

  1. 总中断允许开关接通,即IE寄存器中的中断总允许位EA=1。

  2. 该中断源发出中断请求,即该中断源对应的中断请求标志为“1”。

  3. 该中断源的中断允许位=1,即该中断被允许。

  4. 无同级或更高级中断正在被服务。

满足以上条件后,中断控制器会将中断请求转发给CPU,CPU暂停当前任务的执行,保存现场信息后执行中断服务程序来处理中断请求。

五、外部中断的触发方式选择

外部中断的触发方式选择包括电平触发和负跳变触发。

电平触发在电平触发方式下,中断源的中断请求只要保持在特定电平上,中断就会被触发。通常,电平触发可以分为高电平触发和低电平触发两种方式。

  • 高电平触发:当中断源的信号电平保持高电平时,中断触发。
  • 低电平触发:当中断源的信号电平保持低电平时,中断触发。

负跳变触发负跳变触发方式也称为边沿触发,是在中断源的信号发生负跳变(从高电平到低电平)时才触发中断。负跳变触发方式具有以下两种方式:

  • 负跳变上升沿触发(Falling-Edge Triggered):当中断源的信号从高电平变为低电平时,中断触发。
  • 负跳变下降沿触发(Rising-Edge Triggered):当中断源的信号从低电平变为高电平时,中断触发。

六、中断函数

在C51中,中断函数是用来处理中断事件的特殊函数。当发生中断时,CPU会暂时中止当前的程序执行,转而执行中断函数。中断函数完成后,CPU会返回到原来的位置继续执行。

C51中,中断函数的定义方式如下:

void interrupt_function() interrupt [interrupt_number]
{
    // 中断处理逻辑
    // ...
}

其中,interrupt_function是中断函数的名称,interrupt_number是中断的编号。

常见的中断编号包括:

例如,下面的代码定义了一个外部中断0的中断函数:

void ext_interrupt0() interrupt 0
{
    // 外部中断0处理逻辑
    // ...
}

在使用中断函数前,需要进行中断的初始化设置。例如,开启中断、设置中断优先级等。

下面是一个简单的示例,展示了如何使用定时器0中断函数进行定时操作:

#include <reg51.h>

void timer0_interrupt() interrupt 1
{
    // 定时器0中断处理逻辑
    // ...
}

void main()
{
    // 初始化定时器0
    TMOD = 0x01;  // 设置定时器0为模式1
    TH0 = 0xFC;   // 定时器0高字节初值
    TL0 = 0x66;   // 定时器0低字节初值
    ET0 = 1;      // 允许定时器0中断
    EA = 1;       // 允许总中断

    // 启动定时器0
    TR0 = 1;

    while (1)
    {
        // 主循环逻辑
        // ...
    }
}

在上面的代码中,首先定义了一个定时器0中断函数timer0_interrupt。然后,在main函数中进行了定时器的初始化设置,包括设置定时器模式、初值等。最后,通过ET0 = 1开启了定时器0中断,并通过EA = 1开启了总中断。在主循环中处理其他逻辑。

当定时器0中断发生时,C51会自动跳转到timer0_interrupt函数执行中断处理逻辑,完成后返回到原来的执行位置继续执行主循环。

6.1 中断系统应用举例

在AT89S51单片机的P1口上接有8只LED。在外部中断0输入引脚INTO (P3.2)接有一只按钮开关k1。要求将外部中断0设置为电平触发。程序启动时,P1口上的8只LED全亮。每按一次按钮开关kl,使引脚INTO接地,产生一个低电平触发的外中断请求,在中断服务程序中,让低4位的LED与高4位的LED交替闪烁5次。然后从中断返回,控制8只LED再次全亮,其原理电路如下图所示。

利用中断控制8只LED交替闪烁一次的电路示意图 

程序代码:

#include <reg51.h>
#define uchar unsigned char
void Delay (unsigned int i){              //延时函数Delay(),i为形式参数,不能赋初值
    unsigned int j;
    for(;i > 0;i--)
    for (j=0;j<333;j++)                   //晶体振荡器为12MHz,j的选择与晶体振荡器频率有关
    {;}                 //空函数
}
void main( ){
    EA=1;         //总中断允许
    EX0=1;        //允许外部中断0中断
    IT0=1;        //选择外部中断0为跳沿触发方式
    Wh1le(1){
    P1=0;
    }
void int0( ) interrupt 0 using 1{        //外中断0的中断服务函数
    uchar m;
    EX0=0;                               //禁止外部中断0中断
    for(m=0;m<5;m++){
        P1=0xf0;
        Delay(400);
        P1=0x0f;
        Delay(400);
    }
    EX0=1;                               //中断返回前,打开外部中断0中断
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/870780.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入理解java web分层架构的高内聚低耦合

​ 在软件开发中&#xff0c;构建一个高效、可维护且可扩展的应用系统一直是开发者追求的目标。分层架构和依赖注入&#xff08;IOC&#xff09;是实现这一目标的重要策略。本文将深入探讨三层架构的高内聚特性、低耦合的设计原则&#xff0c;以及如何通过IOC&#xff08;控制反…

FPGA开发——在线调试工具Signal Tap的使用

一、简介 在我们进行FPGA进行开发时通常都会经历代码编写&#xff0c;仿真&#xff0c;下板验证等过程。使用FPGA进行开发的小伙伴都知道&#xff0c;在代码编写时往往花费不了太长的时间&#xff0c;下板验证更是。在开发中占绝大部分时间的是仿真&#xff0c;有时候编写代码只…

基于Python的火车票售票系统/基于django的火车购票系统

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&…

Ubuntu虚拟机服务器的搭建

01.VMware安装 略。 02.Ubuntu虚拟机安装 略。 03.配置Ubuntu虚拟机网络 参考视频&#xff1a; Ubutu虚拟机网络配置&#xff08;桥接&#xff09;https://www.bilibili.com/video/BV1bG411V72A/?spm_id_from333.999.0.0&vd_sourced1fd4bcc46805ab35cc8bbb5a8bf318f…

解决springboot中Aspect注解不生效问题

如下图所示&#xff0c;配置了一个注解类型的Aspect&#xff0c;结果一直不生效 运行结果可以看到&#xff0c;其他非注解类型的Aspect都顺利执行了&#xff0c;但是这个注解的切面就是没有执行 当时也在网上搜了半天&#xff0c;包括在启动类增加配置&#xff0c;接口都要加上…

HTTPS通讯全过程

HTTPS通讯全过程 不得不说&#xff0c;https比http通讯更加复杂惹。在第一次接触https代码的时候&#xff0c;不知道为什么要用用证书&#xff0c;公钥是什么&#xff1f;私钥是什么&#xff1f;他们作用是什么&#xff1f;非对称加密和对称加密是啥&#xff1f;天&#xff0c;…

深度学习设计模式之外观模式

文章目录 前言一、介绍二、特点三、详细分析1.核心组成2.代码示例3.优缺点优点缺点 4.使用场景 总结 前言 外观模式是结构型设计模式&#xff0c;定义一个高层接口&#xff0c;用来访问子系统中的众多接口&#xff0c;使系统更加容易使用。 一、介绍 外观设计模式&#xff08…

一文掌握 Web 测试:功能、界面、兼容与安全的综合测试指南!

随着Web技术的不断演进&#xff0c;测试除了对应用的功能性、界面美观性、跨平台兼容性的基本要求外、安全性和性能的要求也逐步增高。因此&#xff0c;全面、系统的测试思维和策略成为了保证Web应用高质量的关键因素。本篇文章将从功能测试、界面测试、兼容性测试和安全测试四…

transformer-explainer

安装和启动 找到这个项目&#xff0c;然后装好了。 这个项目的目的如名字。 https://github.com/poloclub/transformer-explainerTransformer Explained: Learn How LLM Transformer Models Work with Interactive Visualization - poloclub/transformer-explainerhttps:/…

BVS:多强联手,李飞飞也参与的超强仿真数据生成工具,再掀数据狂潮 | CVPR 2024

BEHAVIOR Vision Suite&#xff08;BVS&#xff09;是一个新型工具包&#xff0c;旨在系统评估和全面理解计算机视觉模型。研究人员能够在场景、对象和相机级别控制各种参数&#xff0c;有助于创建高度定制的数据集。 来源&#xff1a;晓飞的算法工程笔记 公众号 论文: BEHAVIO…

Java基础开发之编译异常和运行异常

一、getProperties()方法 1.System类提供一个getProperties()方法用来**当前系统的全部属性&#xff0c;它会返回一个Properties对象&#xff0c;也封装了系统的全部属性&#xff0c;这些属性的存在是以键值对的形式。 2.getProperties()方法使用例子&#xff1a; public cl…

springboot粮仓管理系统的设计与实现论文源码调试讲解

第3章 系统分析 本文作者在确定了研究的课题之后&#xff0c;从各大数字图书馆下载文献来阅读&#xff0c;并了解同类型的网站具备的大致功能&#xff0c;然后具体事务具体分析&#xff0c;得出本系统要研究的具体功能与性能。虽然分析系统这一阶段性工作主要是确定功能&#…

Java二十三种设计模式-状态模式(20/23)

本文深入探讨了状态模式&#xff0c;一种允许对象根据其内部状态变化而改变行为的软件设计模式。文章从定义、组成部分、实现方式、使用场景、优缺点分析、与其他模式的比较&#xff0c;到最佳实践和建议&#xff0c;全面介绍了状态模式的各个方面。通过Java语言的实现示例和实…

如何高效搜集知乎热门话题? 掌握这五种搜索技巧

本文将深入探讨如何高效地在知乎平台上挖掘热门话题&#xff0c;通过揭秘五大实用搜索技巧&#xff0c;帮助内容创作者、市场分析师快速捕捉网络热点&#xff0c;提升内容相关性和曝光率。掌握这些技巧&#xff0c;让你的文章或产品始终站在潮流前沿。 一、为何关注知乎热门话…

Ropdump:针对二进制可执行文件的安全检测工具

关于Ropdump Ropdump是一款针对二进制可执行文件的安全检测工具&#xff0c;该工具基于纯Python开发&#xff0c;是一个命令行工具&#xff0c;旨在帮助广大研究人员检测和分析二进制可执行文件中潜在的ROP小工具、缓冲区溢出漏洞和内存泄漏等安全问题。 功能介绍 1、识别二进…

Python实现水果忍者(开源)

一、整体介绍&#xff1a; 1.1 前言&#xff1a; 游戏代码基于Python制作经典游戏案例-水果忍者做出一些改动&#xff0c;优化并增加了一些功能。作为自己Python阶段学习的结束作品&#xff0c;文章最后有源码链接。 1.2 Python主要知识&#xff1a; &#xff08;1&#xf…

网络安全-防火墙初步认识。

文章目录 1. 防火墙是什么&#xff1f;2. 防火墙的工作原理是什么&#xff1f;3. 防火墙的分类有哪些&#xff1f;4. 实战4.1 防火墙管理和实验介绍4.2 防火墙命令行初体验实验目标&#xff1a;实验步骤&#xff1a; 4.3 防火墙Web初体验实验目标&#xff1a;实验步骤&#xff…

canvas实现图片矩形截图,矩形旋转后的截图,旋转后的截图摆正显示

一、效果图 二、主要代码 获取矩形框中地方的截图数据 1、先获取矩形四点在画布上的实际坐标值&#xff1b; 2、计算矩形此时实际的宽和高&#xff0c;便于设置后期临时矩形的宽和高&#xff1b; 3、可能矩形旋转了一定的角度&#xff0c;我们新建一个临时的画布tempCanvas&am…

mkv怎么改成mp4?3种mkv转mp4格式方法的介绍

mkv怎么改成mp4&#xff1f;将MKV格式视频转换为MP4格式&#xff0c;能显著提升兼容性&#xff0c;让视频在更多设备、平台上流畅播放。无论是智能手机、平板电脑、智能电视还是网页浏览器&#xff0c;MP4格式都具备广泛的支持&#xff0c;从而扩大视频的传播范围和受众群体。这…

【Hadoop】核心组件深度剖析:HDFS、YARN与MapReduce的奥秘

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《大数据前沿&#xff1a;技术与应用并进》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Hadoop简介 2、Hadoop生态系统概览 二、Hadoo…