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

news2024/9/22 15:49:54

目录

一、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中断
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

KubeSphere核心实战_kubesphere部署redis02_创建redis现指定存储卷_配置外网访问服务---分布式云原生部署架构搭建048

然后我们再去看一下服务,这里,这里就是刚刚我们创建 redis工作负载的时候,给咱们自动生成了一个服务,可以看到这个服务, his-redis-后面有乱码是自动生成的,如果我们想弄一个有意义的,好看的,可以删除了自己创建 比如我们删除掉自动生成的服务,注意不要删除工作负载 点击确定…

文书智能助手

背景 司法、医疗等行业存在着大量的文书&#xff0c;一份文书或者卷宗少则几十页&#xff0c;多则几万页。在查看和检查这些文书时&#xff0c;会遇到大量的信息。当需要查询进一步的详细内容时&#xff0c;往往需要选择一下文字&#xff0c;然后再在各种系统中 查询详细的信息…

ES与MySQL数据同步实现方式

1.什么是数据同步: 1.Elasticsearch中的酒店数据来自于mysql数据库&#xff0c;因此mysql数据发生改变时&#xff0c;Elasticsearch也必须跟着改变&#xff0c;这个就是Elasticsearch与mysql之间的数据同步 2.数据同步实现方式&#xff1a; 常见的数据同步方案有三种&#x…

2020 位示图

假设某计算机的字长为32位&#xff0c;该计算机文件管理系统磁盘空间管理采用位示图&#xff08;bitmap&#xff09;&#xff0c;记录磁盘的使用情况。若磁盘的容量为300GB&#xff0c;物理块的大小为4MB&#xff0c;那 么位示图的大小为&#xff08; &#xff09;个字。 要计…

【SQL】仅出现一次的最大数据

目录 题目 分析 代码 题目 MyNumbers 表&#xff1a; ------------------- | Column Name | Type | ------------------- | num | int | ------------------- 该表可能包含重复项&#xff08;换句话说&#xff0c;在SQL中&#xff0c;该表没有主键&#xff09;。…

一个轻量级的数据库条件检索引擎,专门设计来简化后端查询逻辑的开发,专注高级查询的只读 ORM 工具(附源码)

前言 在软件开发过程中&#xff0c;后端开发者经常面临着复杂多变的数据库查询需求。产品经理和项目经理可能会频繁地提出新的查询条件&#xff0c;要求支持各种模糊查询、直接查询&#xff0c;甚至需要在用户界面上提供下拉列表等元素&#xff0c;以增强用户体验。 然而&…

进阶SpringBoot之 Druid 数据源

Druid 是开源平台上一个数据库连接池实现&#xff0c;具备日志监控功能 Druid 可以很好的监控 DB 连接池和 SQL 的执行情况&#xff0c;天生就是针对监控而生的 DB 连接池 Maven 仓库 pom.xml 文件导入 Durid 的 jar 包 <!-- Druid依赖 --><dependency><grou…

前端视角解决chrome/firefox浏览器访问国家税务局发票查验平台验证码获取提示”网络异常,请稍后再试“解决方法

目录 问题描述问题原因解决办法 问题描述 chrome等浏览器访问国家税务局发票查验平台时获取验证码提示”网络异常&#xff0c;请稍后再试“&#xff0c;安装根证书、信任根证书也无效 问题原因 使用开发者工具查看执行过程&#xff0c;点击获取验证码后ajax请求地方税务局的…

嵌入式AI快速入门课程-K510篇 (一)

嵌入式AI快速入门课程-K510篇 手册属性 属性描述类别嵌入式AI开发文档名嵌入式AI快速入门手册-K510篇当前版本1.0适用型号DongshanPI-Vision编辑百问科技文档编辑团队审核韦东山 更新记录 更新日期更新内容更新版本2023/11/09文档大纲编写完毕V1.0 文章目录 嵌入式AI快速入门课…

如何培养单元测试的习惯?怎样才算一个好的单元测试?

你是怎么编写单元测试的呢&#xff1f;很多人的做法是先把所有的功能代码都写完&#xff0c;然后&#xff0c;再针对写好的代码一点一点地补写测试。 在这种编写测试的做法中&#xff0c;单元测试扮演着非常不受人待见的角色。你的整个功能代码都写完了&#xff0c;再去写测试…

C语言:顺序表的实现和通迅录项目实现

顺序表 1、顺序表的概念及结构 1.1 线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中⼴泛使⽤的数据结构&#xff0c;常⻅的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&…

openstack基本操作

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

python语言day9 正则表达式 和 xpath 解析html

正则表达式&#xff1a; 正则表达式的语法&#xff1a; 元字符&#xff1a; \D \d \w \W . [ ] 量词&#xff1a; ? * 惰性匹配&#xff1a; 玩儿(?P<name>.*?)游戏&#xff1a; 匹配到第一个游戏结束&#xff0c;name 匹配的文本。 玩儿(?P<na…

分享cesium的风场开源网站

首先是有在二维地图上的一个风场效果&#xff0c;通过canvas进行的绘制&#xff0c;例如leaflet开源地图上就能够根据数据生成风场的效果图。 最近mapbox里的大神分享了如何在cesium上实现风场的效果&#xff0c;并在github上进行了开源&#xff0c;开源地址: https://github.…

SSL Pining 问题解决方案

实战案例 为了能够更好的复现 SSL Pining 场景&#xff0c;我们对一个 App&#xff08;https:app4.scrape.center&#xff09;进行抓包&#xff0c;这个 App 包含了 SSL Pining 的相关设置&#xff0c;如果我们将手机的代理设置为抓包软件提供的代理服务&#xff0c;那么这个 …

Windows 11上RTX 4090深度学习与大模型微调环境安装指南

【本文原作者&#xff1a;擎创科技资深产品专家 布博士】 在安装深度学习及大模型微调环境时&#xff0c;经历了多次反复操作&#xff08;如CUDA、cuDNN、PyTorch的安装与卸载&#xff09;。为了避免走弯路&#xff0c;总结了以下步骤&#xff1a; 步骤 1&#xff1a;显卡驱动…

【轨物方案】直流电源屏物联网解决方案,让在线监测更简单!

流屏是保证各类变电站、水力、火力发电厂正常、安全运行的电源设备&#xff0c;也是其它使用直流设备用户(如石化、矿山、铁路、医院等)的直流电源&#xff0c;是电力系统的重要组成部分。同时直流屏在变配电中&#xff0c;发挥着很大的作用&#xff0c;它在很大程度上影响着配…

Waymo第六代无人驾驶技术亮相:更少传感器,更高效率

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【系统分析师】-综合知识-数据库基础

1、给定关系模式 R < U &#xff0c;F >&#xff0c; U {A&#xff0c;B&#xff0c;C&#xff0c;D &#xff0c;E} &#xff0c; F {B→A &#xff0c;D→A &#xff0c;A→E &#xff0c;AC→B }&#xff0c;则 R 的候选关键字为&#xff08;CD&#xff09;&#xff…

76、docker-harbor

一、docker-harbor 私有仓库部署和管理&#xff1a; docker-harbor 私有仓库部署和管理&#xff1a; harbor&#xff1a;开源的企业级的docker仓库软件。 仓库&#xff1a;私有仓库、公有仓库。私有仓库。 docker-harbor&#xff1a;是有图形化的&#xff0c;页面UI展示的一…