单片机学习笔记---中断系统(含外部中断)

news2025/2/22 20:40:25

目录

中断介绍

中断优先级

中断嵌套

中断技术的优点

中断的结构

中断请求源

中断优先级

5个基本中断内部的结构

INT0和INT1

T0和T1

串口

中断寄存器

IE

TCON

中断优先级列表

中断号

中断响应的条件

代码编写实例分析

外部中断硬件电路分析


这一节我们主要是介绍中断系统,为什么要单独介绍中断系统?因为对于51单片机来说,那个中断的外设还是比较多的,像定时器、串口以及外部中断都比较多,所以我们先从全局来了解这个中断。

中断介绍

下面我们来了解一下中断,中断它是为了使这个单片机具有对外部或者内部随机发生的事件能够实时响应处理而设置的,所以中断功能的存在,很大程度上提高了单片机处理外部或者是内部事件的能力,所以中断它是非常重要的,它可以让单片机能够实时处理一些突发事件,比如说我们正常情况下在执行功能的时候,突然有紧急的事情需要处理,就可以利用这个中断来进行处理。处理完成这些突发事件之后,再回到之前的位置继续往下执行。

我们先来用生活当中的例子来给大家讲解中断的过程,这张图我们可以看一下生活中的实例。

比如,你在打开火烧一壶水,然后就去洗衣服,在洗衣服的过程当中,突然听到这个水壶发出了水开的报警声音,这个时候水壶正在开了,爆发出报警声音,这个时候你就要停止洗衣服的这个动作了,如果说你再继续往下洗衣服,那可能就会导致水壶烧干而引引发的一些火灾这些非常危险的一些事件,所以这个水开报警事件就相当于非常紧急突发的事件,那这个时候我们就要立刻停止手上的工作,停止洗衣服的这个动作,然后,转去什么去关火,完火之后,然后将开水灌入到暖水瓶当中,执行完成这个动作之后,又回到我们刚才洗衣服的地方,继续去洗你的衣服,这个过程我们就称为中断。

中断概念对于单片机来讲,它其实也是一样的,我们来看一下单片机手册上的官方介绍:

以下是中断程序的流程图:

这就是中断,那我们再来看一下这张图,也是中断的执行流程图,可以看一下。

首先主程序在往下执行,执行过程当中,突然有事件,突然发出了中断请求,在这个中断请求这里我们通常也称为断点。引起CPU去响应中断的这个中断源,就是引起CPU中断的这个根源,我们称为中断源,那比如说我们刚才举例的洗衣服,烧水那个生活当中的例子,水壶发出这个报警声,其实它就是中断源,因为是它引起我们CPU来中断,要执行一些中断的程序。 CPU响应之后,它就会转去执行这个中断程序了,我们假设是事件B,执行中断程序完成之后回过头,它会返回到断点的这个位置,也就是刚才我们中断的这个位置,然后继续往下执行这个主程序,这个过程就是中断。

中断优先级

在单片机当中,中断系统一般是允许有多个中断源的,当几个中断源同时向CPU发出请求中断的时候,要求为它服务的时候,这就存在CPU优先响应哪一个中断请求的问题。

假设我们有两个中断,也就两个中断1、中断2,这两个中断同时过来,那CPU要执行哪个?

中断源有优先的级别,CPU是根据它的级别来判断优先执行哪一个中断,优先级别越高的就优先执行,越低的就最后执行,比如在中断事件1和中断事件2同时过来之后,假设它的优先级1的优先级要高,2的优先级要低,同时过来之后,那这个CPU要响应哪?当然是响应优先级高的这个事件1,执行完事件1之后再来执行低优先级的中断事件,那等这个事件执行完成,才会继续回到主程序往下执行,这也就是中断优先级的响应。

这个优先级怎么来判别?

通常在这个单片机当中,它都有对应的默认的优先级别,当然也可以通过对应的寄存器来修改的优先级,对于51单片机来说,通常我们不去修改的寄存器的值,而是通过默认的优先级别进行。

中断嵌套

当我们CPU正在处理中断请求的时候,发生了另优先级比它还高的中断源请求,这个时候,它就有中断嵌套的问题。

我们来说明一下,假设我们主程序在执行中断事件A,突然有个中断事件过来,那我们要响应这个中断事件B,在执行这个中断事件B的时候,突然又有中断的事件C,而C优先级比B的优先级还要高,那这个时候,它就在这个地方要暂停中断优先级B,要去转去执行优先级高的事件C,然后执行完成之后,再回到这个地方继续往下执行中断服务程序B,执行完了之后,再回到主程序来继续往下执行。

这叫做中断嵌套中断嵌套。

那对于51单片机来说,通常这种的很少,对于一些高端的,像STM32,或者是DSP之类的这种高级的一些单片机来说,那中断是更加的复杂,所以在这些单片机里面,通常都会存在一些中断嵌套,经常会遇到。

对于51大来说这种很少,基本上就是处理中断处理完又回到主程序来。

中断技术的优点

随着计算机技术的应用,人们发现了中断技术不仅解决了快速主机与慢速IO设备的数据传输问题,而且还有这些优点:

  1. 分时操作

CPU它可以分时为多个IO设备进行服务,提高了计算机的利用率,通过中断可以进行实现分时操作。比如说我们在使用定时器的时候,定时不同时间,并且执行不同的时间,这就可以进行分时操作。

  1. 实时响应

因为我们使用了中断,当我们事件过来之后,肯定要响应中断了,然后执行完中断之后,再回到我们主程序继续执行,这是个实时响应的功能。

  1. 可靠性高

CPU具有处理设备故障,以及掉电等突发事件的能力,可以让这个系统可靠性可以大大的提高。

在任何的一款单片机当中,中断基基本上是必不可少的,所以中断这一块大家一定要认真的去学习。

中断的结构

下面我们来看一下这个中断的结构。

中断请求源

我们知道STC89系列51单片机提供了8个中断的请求,请求8个

它们分别是外部中断就是INT0外部中断0),INT1(外部中断1INT3外部中断2,以及INT3外部中断3)。

另外还有定时器0定时器1还有定时器2以及串口。

这些中断总共是8个中断的请求源,这里是指STC一些增强型的一些单片机,它具备这些中断员,也就最多8个。

对于普通系列的51单片机来说,比如说8051系列的,STC89 C51/C52之类的,都具备共有就是8051内核的51单片机均有的5个中断源是INT0外部中断0),INT1(外部中断1和定时器0定时器1,以及串口这五个中

就是说只要是51单片机,这五个中断源是必不可少的,至于INT3T2(外部中断2),INT3(外部中断3)以及定时器2这些是根据你芯片的外设有没有增加,比如说STC90系列的,或者是一些更高级的,增强型的,它可能会增加几个资源,这些增加的资源的使用方法跟这些是完全一样的,所以我们这里重点是学习基本的这五个。

中断优先级顺序

所有的中断都具备4个中断优先级。 基本型只有2个(高级和低级)。用户可以用关总中断允许位EA这个控制寄存器,它能够控制我们的总中断或者是相应的中断允许屏蔽位,屏蔽我们所有中断请求。也可以用打开相应的中断,允许CPU响应相应的中断申请,其中,有些中断源是可以用软件独立的控制开中断或者是关中断的,每中断的优先级可以通过软件来设置。

高优先级的中断级可以打断低优先级的中断,反之低优先级的中断请求是不可以打断高优先级的中断,这个在前面我们也说了。 当两个相同优先级的中断同时产生的时候,它会通过查询次序来决定系统响应哪一个中断,因为在这些中断里面它固定会有顺序的,我们这里也列出来了。

它的优先级如上图中的箭头方向,从下到上优先级变高,这是固定的。

当然也可以通过寄存器来修改它的优先级,既然可以修改优先级,那肯定有可能会把这两个,比如说我们外部中断0和定时器0设置为相同的优先级,如果是相同的优先级同时发生,那我们CPU要响应哪一个?它会根据我们默认的这个顺序,比如说外部中断0它是最高,那就响应这个。这是优先级相同的情况下的响应顺序。

当然我们通常不会去操作优先级顺序的寄存器,我们会按照它默认的优先级的顺序来使用它。

5个基本中断内部的结构

下面,我们来具体看一下51单片机5个中断内部的结构。

INT0和INT1

首先我们来看一下这个INT0,INT0对应的是P32口这个附加功能,它可以通过TCON寄存器的IT0这一位来进行选择。

IT0在芯片手册上的解释:

如果是说将这个IT0这一位设置为0,就选择的是低电平触发,经过非门变成1。

如果是将IT0设置为1的话,它是选择下降沿触发,下降沿触发之后流入到我们的IE0(中断标志)。

IE0在芯片手册上的解释:

比如说我们外部有信号,那来了下降沿之后,那如果说我们配置了IT0=1,来了下降沿的话,它就会让这个IE01,这就是中断的标志,说明来了中断的事件。

来了中断事件,但它还不会连到我们的CPU,它要通过IE和IP以及后面的一系列操作联络到我们的CPU,所以IE这一块也要进行设置,IE是包括了对应的外部中断的一些寄存器的设置。比如,EX0是外部中断0的中断选择,如果是说我们要使能这个外部中断的话,那EX0就要为1,也就是这个开关要闭合。

这里的开关闭合上的话,那信号就可以过来,然后,紧接着是EA总中断,前面即使全部配置好,但这个中断不打开的话,那中断的信号也是流入不到我们的CPU的,所以这个总中断也要设置为1,设置为1的话,这个中断信号就可以流入到CPU了。

默认IP是用来设置中断优先级的,这里我们就不设置,默认它是以连到这个0,连到0的话,通过我们前面说的这个中断的默认的顺序表来进行响应哪一个先出发。它就会直接流入到我们的CPU,从而触发我们的中断。

同理,我们的外部中断1也是一样的。  

外部中断1是连接到P3.3引脚。

T0和T1

T0对应的是我们的P3.4口,T1对应的是P3.5口

我们这个定时器它是16位,后续的定时器/计数器部分我们会介绍,如果是我们使用的16位模式的话,计数到65536就会产生溢出(因为2的16次方等于65536,如果是从0开始计数,计数到65535,如果再往下计到65536就溢出)溢出的话就会有溢出的中断请求,TF0就是中断请求的标志,发出了溢出TF0就会自动置1,如果说我们开启了对应的中断,比如说ET0,和它后面的总中断开启了,然后,PT0这里也默认是已经连到了0,然后传入到我们的CPU,这样就会发出中断的请求,也就是定时器的溢出请求。

那同理我们的T1也是一样的。

串口

然后下面是串口RX和TX,有发送和接收两个引脚,对应P3.0和P3.1引脚的附加功能。

RX(接收数据) TX(发送数据)

RX对应到RI,是SCON上的位,TX对应的是TI。 RI和TI后面是一个或门,当这两个有为1,也就相当于有发送完成或者是接收完成标志之一的话,它会发出中断请求,如果说我们开启了串口的中断功能,并且把总中断给使能,它也会向CPU发送中断请求,或者是发送中断请求,或者是接收完成中断请求这么一个信号给我们的CPU。 当串口接收完一帧串行数据的时候,RI(接收完成中断请求的标志)和,发送完成一帧数据之后,TI(发送完成的标志)都会自动置1。

也就是说这一块它是我们单片机自动完成的。

前面是我们用来设置中断的请求的条件。

然后,后面的这一块也是我们要设置的中断的开关。

这里总中断是适用于我们所有的中断,只要把总中断打开,前面我们全部配置好之后才能传入到我们的CPU。

如果说你前面配置好之后总中断没有打开,依然是不能完成这个中断请求的,单片机不会进入到中断服务程序执行。

中断寄存器

下面我们来看一下中断相关的寄存器。

IE

我们分析这个中断结构的时候,这里就需要我们配置这个IE。

如果说你使用的是外部中断就要对EX0和EX1进行配置。

如果你使用定时器的话,那你要对这个ET0和ET1进行配置。

如果说你是使用串口,那你要对这个ES进行配置.

这些分别都是IE的这个寄存器的某位:

对应关系:

EA是外部的总中断,也就是CPU的中断允许位,我们也称之为总中断,当我们前面把外设的一些中断的条件选择好之后,最终我们还要开启这个总中断EA,如果EA不开启,你即使前面配置好,依然是不会产生中断,进入中断的触发程序的,所以,这一块一定要注意,我们在前面结构图当中也给大家分析了EA这一块的作用。

然后ES是对应到串行口的中断允许位,如果说我们要使用串行通讯,也就串口通信的话,要使用中断,那我们就要将这个ES置1,把它的使能开关给打开。

然后ET1和ET0对应到定时计数器,T0和T1的中断允许位。 如果说我们要使用这个定时计数的功能,那我们要对这个ET1和ET0进行选择,也就是它的使能开关要打开,它是个允许的开关。

EX1和EX0是外部中断0和外部中断1的允许位,我们要使用外部中断的话,我们也要把它的开关给使能。

TCON

那现在我们再看一下中断请求标志TCON。

中断请求标志这个TCON里面就是对触发方式还有定时器的一些方面的设置。

TCON是8位的寄存器,首先我们从低4位看起。

IT0是外部中断0的触发方式控制位,它这个值有0和1的选择,如果是0的话,那我们默认是设置为低电平触发方式。而我们将这个值设置为1的话,它是选择为下降沿触发方式,下降沿就是说从我们高电频变为低电频这时刻,它就会触发中断。  

通常我们使用外部中断的话,都是使用下降沿触发,也就将这个IT0或者IT1设置为1。 然后我们再来看一下IE0,它是外部中断的请求标志位,IE1也是中断请求标志位。这些中断标请求标志位是由单片机内部自动去完成。

比如,我们配置好外部中断的触发方式之后,假设IT0设置为下降沿触发,那外部来了一个下降沿脉冲到P3.2引脚,就会触发外部中断INT0发出中断请求,IE0它自动会设置为高电平。它是自动完成的,不需要我们人为的去设置,IE1也是同样的道理。

IT1跟IT0一样的。

然后就是TR0和TR1,它是定时器的初值的设置,这个在后面我们介绍这个定时器的时候会对这个TR0和TR1进行讲解。   

然后这里有个TF0和TF1,它是属于定时计数器T0和T1的溢出中断请求标志,它也是自动去完成的,当我们定时计数器计数满的时候并发生溢出的时候,这个请求标志它会自动置1,这个在前面我们其实已经分析过。

中断优先级列表

接下来我们再看一下后面的中断优先级。

前面我们说了同一个优先级的中断申请可能不止一个,这个时候就有中断优先级的排队的问题。比如说两个中断过来之后,优先执行哪一个,那就根据中断的优先级执行。

如果说你不通过寄存器修改中断优先级的话,默认它会按照图中的优先次序来排列。

中断号

然后在我们编写中断的时候,它有中断的中断号,在这张图当中也给大家列出来了。

这个中断号有什么作用?

这个中断号就是指引CPU执行程序的时候,定位到哪一个中断。

如果说我们外部中断0触发引起中断的话,那你中断号必须是0。如果你这里写1,那即使你前面程序都配置好,那它也不会进入到你这个写1的这个程序当中来的,这里一定要注意。

中断号一定要记住!中断号是绝对不能搞错,你搞错了,程序是进入不了你的中断服务程序的。

中断响应的条件

接着我们来看一下中断响应的条件。 主要有3个条件,只有同时满足才能触发中断。

1.首先只有发出了中断请求,CPU才会有可能响应,所以,这个中断请求必须得满足,就是说要有中断源产生。比如我们生活当中的例子,我们水开发出报警声,那它就产生中断请求。

2.那我们要去执行它,我们首先要满足将中断源相关的一些中断允许位打开,只有打开了中断请求才能过来,才能到我们CPU这里来。

3.最后就是CPU的开中断,也就是总中断要打开,前面你这个配置好了,你这个总中断不打开的话,一样是不能响应的,这一点要注意。

满足这三个条件,CPU就能产生中断,就触发中断响应执行。

代码编写实例分析

然后我们以外部中断0为例来介绍一下中断如何来使用。

根据前面说的这三个条件,首先我们要打开总中断。

当然打开总中断这个顺序都无所谓。

然后,我们选择它的EX0是用来开启外部中断的功能的允许位,我们要给允许外部中断进来。

然后,IT0是用来设置触发方式,如果我们设置为1的话,那是选择下降沿触发,也就是说外部来了下降沿,那我们就会触发这个中断。

进入中断的时候,我们有中断服务程序,中断服务程序这个函数跟我们普通的函数不一样,它增加了interrupt这个关键字。

这个关键字是51单片机特有的中断关键字,不能写错,写错了也是进入不了中断函数的。然后非常重要的一点就是这个中断号,中断号前面我们也说了,外部中断0是对应的是0。

然后后面的using 1这个可以不写,现在基本上不写这一块,可以把它给忽略掉.

中断函数通常都是没有返回值的,所以是void空类型。

当然中断函数里面也是没有入口参数的。

以上就是关于中断系统的相关介绍了,后面会继续讲到它的具体使用。

外部中断硬件电路分析

下面我们来介绍一下硬件。

其实外部中断是属于单片机内部的资源,所以,我们重点是介绍连接到外部中断的引脚的一些电路。

前面我们在介绍独立按键的时候说过,K3和K4是连接在P32和P33引脚。

而且P32和P33正好是我们连接的是外部中断INT0和INT1。

所以如果说我们对K3或者K4按键进行操作的时候,P32和P33就会收到对应的信号。

比如我们配置了外部中断0(使用的是P32引脚)下降沿的触发方式。默认独立按键是接了GND的,也就是低电平有效。并且默认P32有上拉电阻,所以P32默认是高电平。

那当按键K3按下的时候,那这个GND就输入到P32引脚了,所以按下的时候P32就是低电频。从高电平到低电平,它就有下降沿。

所以当我们配置为下降沿触发的时候,按键一按下,它就会触发外部中断,因此可以通过这个按键来模拟这个外部中断的触发的功能。 同理,K4也就是P33,它是属于外部中断1的功能,所以,我们也可以通过K4来编写外部中断1的触发的程序。

我们可以通过按键来触发这些外部中断的话,那我们要如何观察?

我们这里使用了指示灯,当我按键按下的时候触发外部中断,我就让对应的LED点亮。

LED模块我们前面好几节讲的挺多了,这里就不再赘述。

以上就是外部中断系统硬件电路的解释。

下节我们开始学习定时器!

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

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

相关文章

spring boot yaml文件中如何设置duration对象值

Spring Boot对表示持续时间有专门的支持。如果您公开java.time.Duration属性,则应用程序对应Duration类型的属性有以下格式可用: long类型的常规表示(使用毫秒作为默认单位,除非指定了DurationUnit)java.time.Duration 使用的标准ISO-8601格式其中值和单…

echarts绘制2D地图

简介 此案例需要用到世界地图json数据,我把json文件放到我的资源中,有需要的自行下载。 安装插件 // 安装echats npm install echarts --save项目中引用 1,引入安装的echarts插件 import * as echarts from echarts;2,引入世…

Pyecharts炫酷散点图构建指南【第50篇—python:炫酷散点图】

文章目录 Pyecharts炫酷散点图构建指南引言安装Pyecharts基础散点图自定义散点图样式渐变散点图动态散点图高级标注散点图多系列散点图3D散点图时间轴散点图笛卡尔坐标系下的极坐标系散点图 总结: Pyecharts炫酷散点图构建指南 引言 在数据可视化领域,…

一些整洁代码的原则

1. 改善if判断 当代码中出现大量防卫代码的时候(Guard Code),需要考虑是否可以改造成fail fast的模式完成。 但是给出的建议是,不要过分使用防卫代码 2. 无用代码,just delete it! 作者给出结论的前提是&…

Java常用

文章目录 基础基础数据类型内部类Java IOIO多路复用重要概念 Channel **通道**重要概念 Buffer **数据缓存区**重要概念 Selector **选择器** 关键字final 元注解常用接口异常处理ErrorException JVM与虚拟机JVM内存模型本地方法栈虚拟机栈 Stack堆 Heap方法区 Method Area (JD…

C#拆分字符串,正则表达式Regex.Split 方法 vs String.Split 方法

目录 一、使用的方法 1.使用Split(String, String)方法 2.String.Split 方法 二、源代码 1.源码 2.生成效果 使用正则表达式可以拆分指定的字符串。同样地,使用字符串对象的Split方法也可以实现此功能。使用字符串对象的Split方法可以根据用户选择的拆分条件&…

2024年【A特种设备相关管理(电梯)】考试总结及A特种设备相关管理(电梯)模拟考试题库

题库来源:安全生产模拟考试一点通公众号小程序 A特种设备相关管理(电梯)考试总结是安全生产模拟考试一点通生成的,A特种设备相关管理(电梯)证模拟考试题库是根据A特种设备相关管理(电梯&#x…

操作系统基础:虚拟内存【上】

🌈个人主页:godspeed_lucip 🔥 系列专栏:OS从基础到进阶 🐹1 虚拟内存的基本概念🦓1.1 总览🦓1.2 传统存储管理方式的缺点🦓1.3 局部性原理🦓1.4 虚拟内存🦝1…

spring boot 使用 Kafka

一、Kafka作为消息队列的好处 高吞吐量:Kafka能够处理大规模的数据流,并支持高吞吐量的消息传输。 持久性:Kafka将消息持久化到磁盘上,保证了消息不会因为系统故障而丢失。 分布式:Kafka是一个分布式系统&#xff0c…

Swift Vapor 教程(查询数据、插入数据)

上一篇简单写了 怎么创建 Swift Vapor 项目以及在开发过程中使用到的软件。 这一篇写一个怎么在创建的项目中创建一个简单的查询数据和插入数据。 注:数据库配置比较重要 先将本地的Docker启动起来,用Docker管理数据库 将项目自己创建的Todo相关的都删掉…

TQ15EG开发板教程:在VIVADO2023.1 以及VITIS环境下 检测DDR4

打开VIVADO2023.1 创建一个新的工程,设置工程名称和地址 选择RTL工程,勾选不添加文件 搜索15eg,选择xqzu15eg-ffrb1156-2-i 完成创建工程 添加设计模块 设置模块名称 在模块中添加mpsoc器件 双击器件进行配置 若有配置文件预设可以直接导入配…

ChatGPT的探索与实践-应用篇

这篇文章主要介绍在实际的开发过程当中,如何使用GPT帮助开发,优化流程,文末会介绍如何与618大促实际的业务相结合,来提升应用价值。全是干货,且本文所有代码和脚本都是利用GPT生成的,请放心食用。 场景一&…

Windows10 安装 OpenSSH 配置 SFTP服务器

1、下载 https://github.com/PowerShell/Win32-OpenSSH/releases 2、默认安装 3、创建用户 4、修改配置文件 C:\ProgramData\ssh\sshd_config# 最后一行后面加入 ForceCommand internal-sftp# 设置用户登录后默认目录 Match User sftpuser ChrootDirectory C:\SFTP# Disable…

(CVPR-2021)RepVGG:让 VGG 风格的 ConvNet 再次伟大

RepVGG:让 VGG 风格的 ConvNet 再次伟大 Title:RepVGG: Making VGG-style ConvNets Great Again paper是清华发表在CVPR 2021的工作 paper链接 Abstract 我们提出了一种简单但功能强大的卷积神经网络架构,它具有类似 VGG 的推理时间主体&…

自学网安-IIS服务器

部署环境:win2003 配置环境:winxp ip:10.1.1.2 win2003 ip:10.1.1.1 开始安装 双击“应用程序服务器” 双击“Internet 信息服务(IIS)” 勾选万维网服务,确定然后下一步 查看端口号;netstat …

vue2学习笔记(2/2)

vue2学习笔记(1/2) vue2学习笔记(2/2) 文章目录 1. 初始化脚手架2. 分析脚手架&render函数文件结构图示及说明main.jsindex.htmlApp.vueSchool.vueStudent.vue 关于不同版本的Vue修改默认配置vue.config.js配置文件 3. ref属…

【数据结构与算法】——单链表的原理及C语言实现

数据结构与算法——链表原理及C语言实现 链表的原理链表的基本属性设计创建一个空链表链表的遍历(显示数据)释放链表内存空间 链表的基本操作设计(增删改查)链表插入节点链表删除节点链表查找节点增删改查测试程序 链表的复杂操作…

当人工智能遇上教育,会擦出怎样的火花?

在这个时代,科技的风暴正以前所未有的速度席卷全球。其中,人工智能,这个被誉为21世纪的“科技之星”,正悄然改变着我们的生活。但是,当人工智能遇上传统教育领域时,你猜会发生什么? 有人说&…

element-ui button 组件源码分享

element-ui button 源码分享,基于对源码的理解,编写一个简单的 demo,主要分三个模块来分享: 一、button 组件的方法。 1.1 在方法这块,button 组件内部通过暴露 click 方法实现,具体如下: 二、…