单片机c语言中断嵌套,关于单片机中断嵌套总结

描述

什么是单片机嵌套中断

所谓“中断”是处理事件的一个“过程”,这一过程一般是由计算机内部或外部某件紧急事件引起并向主机发出请求处理的信号,主机在允许的情况下响应请求,暂停正在执行的程序,保存好“断点”处的现场,转去执行中断处理程序,处理完中断服务程序后自动返回原断点处,继续执行原程序,这一处理过程称为“中断”。以AT89S52为例,中断系统含有8个中断源,共有6个中断矢量:定时/计数器0、1、2,INT0、INT1和UART。两级中断优先级,可实现两级中断嵌套。用户可以很方便的通过软件实现对中断的控制。既然系统含有8个中断源,就有可能出现数个中断源同时提出中断请求的情况,这样,设计人员必须事先根据它们的轻重缓急来为每个中断源确定CPU对其的响应顺序。然而,对于中断优先级寄存器IP来说,只可能设定两级优先,即控制位为1时对应的中断源为高级中断,反之,控制位为0时对应的为低级中断。

LinkedIn下图为一声光报警电路,当按下S1时,蜂鸣器发音;当按下S2时,停止发音,但LED发光。

1、利用中断工作方式编写完整的单片机汇编语言程序。

2、 按键S1和S2触发的先后顺序对此声光报警电路有什么影响?为什么?

34b23e8eee5c96d2ca9ace69f535afa2.png

1、完整程序:

ORG 0000H

AJM

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在STM32中,中断嵌套是指在处理一个中断时,能够中断当前中断处理程序处理更高优先级的中断。这是通过NVIC(Nested Vectored Interrupt Controller)来实现的。 要实现中断嵌套,首先需要配置每个中断的优先级。优先级较高的中断会在优先级较低的中断之前被处理。可以使用NVIC的相关函数来设置中断的优先级,例如`NVIC_SetPriority()`函数。 当一个中断请求发生时,中断控制器会根据中断的优先级来决定是否中断当前正在执行的中断处理程序。如果新中断的优先级高于当前中断的优先级,那么当前中断会被挂起,处理新中断,然后再返回到原来的中断处理程序。 在处理完高优先级中断后,中断控制器会自动恢复之前被挂起的低优先级中断,并继续执行原来的中断处理程序。 下面是一个示例代码,演示了如何在STM32中实现中断嵌套: ```c // 配置中断优先级 NVIC_SetPriority(USART1_IRQn, 1); // 设置USART1中断的优先级为1 NVIC_SetPriority(USART2_IRQn, 2); // 设置USART2中断的优先级为2 // 中断处理函数 void USART1_IRQHandler(void) { // 处理USART1中断 // 检查是否有更高优先级的中断发生 if (NVIC_GetPendingIRQ(USART2_IRQn)) { // 挂起当前中断,处理USART2中断 NVIC_SetPendingIRQ(USART2_IRQn); } // 继续执行原来的中断处理程序 } void USART2_IRQHandler(void) { // 处理USART2中断 // 继续执行原来的中断处理程序 } ``` 在上面的示例中,当USART1中断发生时,首先会处理USART1中断,然后检查是否有更高优先级的中断USART2发生。如果有,就挂起当前的USART1中断,处理USART2中断,然后再返回到原来的USART1中断处理程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值