> 自媒体 > 科技科学 > 【STC8A8K64D4开发板】第2-4讲:外部中断(INT0~INT4)
【STC8A8K64D4开发板】第2-4讲:外部中断(INT0~INT4)
来源:电子友人章
2023-04-09 18:51:27
379
管理
学习目的学习中断的相关概念。掌握外部中断配置及中断优先级配置的程序设计。掌握中断服务程序的编写。中断相关概念什么是中断

中断系统是为使 CPU 具有对外界紧急事件的实时处理能力而设置的。

CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生); CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断。

中断机制能让紧急的事情得到及时的响应,从而大大的提高了程序的实时响应能力。

中断优先级

单片机通常会有多个中断源,当多个中断源同时发出中断请求时,CPU应该先响应哪一个中断?

为了解决这个问题,单片机规定了中断优先级,各个中断可以根据事情的轻重缓急分配不同的优先级。这样,当多个中断源同时发出中断请求时,优先级高的中断能先被响应,优先级高的中断执行完成之后再去执行优先级低的中断请求。

STC8A8K64D4除INT2、INT3、定时器2、定时器 3和定时器 4外,其他中断均有4级中断优先级可设置。

高优先级的中断请求可以打断低优先级的中断,反之,低优先级的中断请求不可以打断高优先级的中断。当两个相同优先级的中断同时产生时,将由查询次序(自然优先级)来决定系统先响应哪个中断。

中断嵌套

当CPU响应某一中断时,若有优先级更高的中断源发出中断请求,则CPU会中断正在进行的中断服务程序,并保护现场,响应更高优先级的中断,高优先级的中断处理完成后,再继续进行被中断的中断服务程序,这个过程称为中断嵌套。如果发出新的中断请求的中断源的优先权级别与正在处理的中断源同级或更低时,CPU不会响应这个中断请求,直至正在处理的中断服务程序执行完以后才会去处理新的中断请求。

中断的开启和关闭

单片机的中断通常可以开启和关闭,用户通过编程可以控制中断的开启和关闭,这样,用户就可以根据自己的需求使用相应的中断。

使用STC单片机时,用户可以用关总中断允许位(EA/IE.7)或相应中断的允许位屏蔽相应的中断请求,也可以用打开相应的中断允许位来使CPU响应相应的中断申请, 每一个中断源可以用软件独立地控制为开中断或关中断。

STC8A8K64D4外部中断

STC8A8K64D4单片机有5个外部中断INT0~INT4,如下表所示。

表1:STC8A8K64D4外部中断

GPIO

外部中断

中断号

说明

P3.2

INT0

0

外部中断0,支持上升沿和下降沿中断,中断优先级可配置为0、1、2、3。

P3.3

INT1

2

外部中断1,支持上升沿和下降沿中断,中断优先级可配置为0、1、2、3。

P3.6

INT2

10

外部中断2,只支持下降沿中断,中断优先级只能为最低优先级0。

P3.7

INT3

11

外部中断3,只支持下降沿中断,中断优先级只能为最低优先级0。

P3.0

INT4

16

外部中断4,只支持下降沿中断,中断优先级可配置为0、1、2、3。

读者在使用这些外部中断的时候,要注意下面两点:

中断触发方式:INT0和INT1支持上升沿和下降沿触发中断,而INT2、INT3和INT4仅支持下降沿触发中断。对于INT0和INT1,触发方式通过TCON寄存器中的IT0位和IT1位配置,如外部中断0:IT0=0:上升沿或下降沿均可触发外部中断0。IT0=1,下降沿触发外部中断0。

这里,我们可以看到INT0和INT1是无法配置为单独的上升沿触发中断的,这一点也是编程时需要特别注意的事项。

中断优先级:INT0、INT1和INT4的中断优先级是可配置的,可配置的优先级别为0~3,而INT2和INT3的中断优先级是固定的,只能是0。软件设计外部中断应用步骤

外部中断的应用流程如下图所示,其中配置外部中断对应的IO为输入和开启GPIO的上/下拉电阻在前文已经讲解过,这里不再赘述。本节,我们重点描述外部中断初始化和中断服务程序的编写。

图6:跳线帽短接

实验步骤解压“…第3部分:配套例程源码”目录下的压缩文件“实验2-4-1:外部中断”,将解压后得到的文件夹拷贝到合适的目录,如“DSTC8”(这样做的目的是为了防止中文路径或者工程存放的路径过深导致打开工程出现问题)。双击“…extintproject”目录下的工程文件“extint.uvproj”。点击编译按钮编译工程,编译成功后生成的HEX文件“extint.hex”位于工程的“…extintProjectObject”目录下。打开STC-ISP软件下载程序,下载使用内部IRC时钟,IRC频率选择:24MHz。程序运行后,按下按键KEY1触发外部中断3,中断服务函数中翻转指示灯D1的状态(由亮变灭或由灭变亮)。按下按键KEY2触发外部中断2,中断服务函数中翻转指示灯D2的状态(由亮变灭或由灭变亮)注意事项:

因为按键存在抖动,因此一次按键可能会多次触发中断,即指示灯状态会翻转多次。

中断优先级抢占实验注:本节的实验是在“实验2-4-1:外部中断”的基础上修改,本节对应的实验源码是:“实验2-4-2:中断优先级抢占”。实验内容配置INT0(P3.2用杜邦线连接到触摸按键电路):上升/下降沿触发中断,中断优先级为优先级1,中断服务函数中翻转指示灯D2状态。配置INT3(P3.7连接到按键KEY1):下降沿中断,中断优先级为最低优先级0,中断服务函数中翻转指示灯D1状态,并延时5秒。这里延时5秒是为了在INT3中断退出前有足够的时间去按下触摸按键触发INT0,演示INT0抢占INT3,方便我们理解中断优先级抢占。切记,实际应用的时候不能在中断服务函数中进行长延时。代码编写编写INT0的初始化和中断服务函数

外部中断0的触发方式配置为上升/下降沿触发中断,中断优先级配置为1,代码清单如下。

代码清单:外部中断0初始化函数

/******************************************************************************功能描述:外部中断0初始化,外部中断0的引脚:P3.2,INT0可以配置为:上升沿或下降沿均可触发外部中断(IT0=0):下降沿触发外部中断(IT0=1)参 数:无返 回 值:无*******************************************************************************/void ext_int0_init(void){INT0_Enable(); //使能INT0中断IT0 = 0; //上升沿或下降沿均可触发外部中断0//设置INT0的中断优先级为1,即设置PX0H PX0 = 0 1,本例中INT3优先级设置为0,所以INT0可以抢占INT3IP |= 0x01;IPH &= ~0x01;//设置INT0的中断优先级为0,即设置PX0H PX0 = 0 0,本例中INT3优先级设置为0,INT0和INT3优先级相//同,无法抢占//IP &= ~0x01;//IPH &= ~0x01;}

INT0中断服务函数中翻转指示灯D2状态,由指示灯D2的状态即可判断INT0有没有触发,代码清单如下。

代码清单:外部中断0中断服务函数

/**************************************************************************功能描述:外部中断0的中断服务程序参 数:无返 回 值:无***************************************************************************/void ext_int0_isr (void) interrupt 0{//可以在这里加入自己的应用代码,但是注意:中断服务函数中占用的时间尽可能的短led_toggle(LED_2);}外部中断3的初始化函数和中断服务函数

外部中断3只支持下降沿触发,中断优先级只能是最低优先级0(优先级低于前面配置的外部中断0),因此,INT0可以抢占INT3。

代码清单:外部中断3初始化函数

/********************************************************************************功能描述:外部中断3初始化,外部中断3的引脚:P3.7参 数:无返 回 值:无*********************************************************************************/void ext_int3_init(void){//使能INT3中断,注意:开启外部中断3中断的情况下,还需要开启总中断“EA=1”,中断才能起作用INT3_Enable();}

INT3中断服务函数中翻转指示灯D1状态,并延时5秒,以方便演示中断抢占,代码清单如下。

代码清单:外部中断3中断服务函数

/***********************************************************功能描述:外部中断0的中断服务程序参 数:无返 回 值:无************************************************************/void ext_int3_isr (void) interrupt 11{led_toggle(LED_1); //翻转用户指示灯D1delay_ms(5000); //延时5秒,这是为了方便延时中断抢占,实际应用时不要在中断服务函数中执行长延时}主函数

主函数中配置外部中断0的引脚P3.2和外部中断3的引脚P3.7为准双向输入,接着调用外部中断0和3的初始化函数ext_int0_init()和ext_int3_init()完成外部中断0和3 的初始化,之后开启总中断即可。

代码清单:主函数

/**************************************************************************功能描述:主函数入口参数:无返 回 值:int类型**************************************************************************/int main(void){P2M1 &= 0x3F; P2M0 &= 0x3F; //设置P2.6、P2.7为准双向口(指示灯D1和D2)P3M1 &= 0x7F; P3M0 &= 0x7F; //设置P3.7为准双向口(KEY1)P3M1 &= 0xFB; P3M0 &= 0xFB; //设置P3.2为准双向口(外部中断0,用杜邦线连接到触摸按键电路//如果按键电路上没有外部上拉电阻,需要开启GPIO的片内上拉。//开发板的按键电路设计了上拉电阻,因此,无需开启片内上拉// P_SW2 |= 0x80; //将EAXFR位置1,以访问在XDATA区域的扩展SFR// P3PU |= 0x80; //开启P3.7的上拉电阻// P_SW2 &= 0x7F; //将EAXFR位置0,恢复访问XRAMext_int0_init(); //初始化外部中断0ext_int3_init(); //初始化外部中断3EA = 1; //允许总中断while(1){}}硬件连接

本实验需要使用LED指示灯D1、D2和按键KEY1以及触摸按键电路,用跳线帽短接复用引脚的指示灯D1、D2和按键KEY1(INT3),用杜邦线将双排针J14上的针P32连接到双排针J26上的针TOUCH上(INT0)。

图6:跳线帽短接

实验步骤解压“…第3部分:配套例程源码”目录下的压缩文件“实验2-4-2:中断优先级抢占”,将解压后得到的文件夹拷贝到合适的目录,如“DSTC8”(这样做的目的是为了防止中文路径或者工程存放的路径过深导致打开工程出现问题)。双击“…extint_priproject”目录下的工程文件“extint_pri.uvproj”。点击编译按钮编译工程,编译成功后生成的HEX文件“extint_pri.hex”位于工程的“…extintProjectObject”目录下。打开STC-ISP软件下载程序,下载使用内部IRC时钟,IRC频率选择:24MHz。程序运行后,按下按键KEY1触发外部中断3,可以观察到指示灯D1状态改变。5秒内即INT3还未退出的情况下按下触摸按键,可以观察到指示灯D2状态改变。这说明由于程序中配置的INT0的优先级高于INT3的优先级,高优先级的中断可以抢占低优先级的中断。注意事项:

因为按键存在抖动,因此一次按键可能会多次触发中断,即指示灯状态会翻转多次。

0
点赞
赏礼
赏钱
0
收藏
免责声明:本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本网证实,对本文以及其中全部或者 部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。 凡本网注明 “来源:XXX(非本站)”的作品,均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对 其真实性负责。 如因作品内容、版权和其它问题需要同本网联系的,请在一周内进行,以便我们及时处理。 QQ:617470285 邮箱:617470285@qq.com
相关文章
想买适合跑长途的汽车,可以看看这5款,底盘稳、油耗低、安全..
在现今这个快节奏的时代,旅行的方式多种多样,高铁和飞机肯定是其中最为..
长安、吉利、长城谁会率先完成新能源转型?
新能源汽车在2023年逐渐成为市场主流。根据乘联会发布的统计数据,2023年..
五菱高管:谁都想成为雷军 但全世界只有一个雷军
【CNMO科技消息】近日,上汽通用五菱品牌事业部副总经理周金开在微博上宣..
电车近30天8起失火,新能源货车警惕“风火轮”【物流商用车】..
文 / 现代物流报全媒体记者 朱睿颖5月11日,天津一小区一辆哪吒新能源汽..
华为首款豪华旗舰轿车实拍图曝光 目标BBA
除了问界、智界之外,华为还会推出一个汽车系列,这个系列就是享界。如今..
中国本部团队研发:东风本田第二款量产电车e:NS2官图发布..
快科技4月11日消息,东风本田发布了旗下第二款电动车e:NS2的官图,该车将..
6米8载货车越来越火,这5款大牌车型你更喜欢谁?
【卡车之家 原创】随着国家对轻卡“大吨小标”的治理和“计轴收费”政策..
盘点2023年度最推荐的5款跑车,凯越450勉强上榜忍者400跌落神坛..
哈喽大家好,我是机车界Ling更新本期来盘点2023年度最推荐的5款跑车凯越4..
新车|预计8月上市/车长超5米,大众ID.7 S实车曝光,全新纯电轿车..
文:懂车帝原创 史景旭[懂车帝原创 产品] 日前,我们从相关渠道获得了上..
关于作者
无根草(普通会员)
文章
347
关注
0
粉丝
2
点击领取今天的签到奖励!
签到排行

成员 网址收录40329 企业收录2981 印章生成187044 电子证书796 电子名片49 自媒体20954

@2022 All Rights Reserved 浙ICP备19035174号-7
0
0
分享
请选择要切换的马甲:

个人中心

每日签到

我的消息

内容搜索