首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在8051中结束外部中断服务程序(ISR)

在8051中,结束外部中断服务程序(ISR)的方法是通过执行RET指令来返回到主程序。当外部中断触发时,8051会自动跳转到预定义的中断向量地址,执行相应的中断服务程序。在ISR中,我们可以处理中断事件,并在完成后使用RET指令返回到主程序继续执行。

以下是一个示例的8051外部中断服务程序的结束方法:

  1. 在中断服务程序的最后,添加RET指令,例如:ISR: ; 中断服务程序的代码 ; ... RET ; 结束中断服务程序,返回到主程序
  2. RET指令将从中断服务程序的堆栈中弹出返回地址,并将程序控制权返回到主程序的下一条指令。

需要注意的是,中断服务程序的编写需要遵循一些规则和约定,例如保存寄存器状态、清除中断标志等。具体的编写规范可以参考8051的相关文档或编程手册。

在腾讯云的产品中,与8051的外部中断服务程序相关的可能是物联网相关的产品,例如腾讯云物联网开发平台(Link IoT Edge)或腾讯云物联网套件(IoT Suite)。这些产品提供了丰富的物联网解决方案和工具,可以帮助开发者构建和管理物联网设备,并与云端进行数据交互和控制。您可以通过访问腾讯云官方网站获取更多关于这些产品的详细信息和介绍。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

TMS320C6000_TMS320F28035中文数据手册

通过示例定时器中断,MCBSP串口接收中断外部中断这三种中断实现过程,介绍如何实现中断各个寄存器的配置,中断向量表书写以及中断服务函数。最后提供一个简要的示例程序可供大家下载使用。...如果不够8条,可以用nop填充,(但nop 4算1条语句),如果服务程序过多,那么可以制作专门的中断服务程序,此时此表只起到跳转作用,这样CPU就可以正确寻址找到正确的中断服务入口。...int* )MUXH=0x7fff7dbf;//0111 1101 1011 1111 制作中断服务程序,将数据取出: interrupt void rint0_isr(void) {...比如,我们在定时器中断服务程序中,通过设置ISR的第12位,人工触发外部INT7的12号中断。...如果有,那么看看中断服务程序有没有执行到。如果中断只进来一次后就再也无法进入了,可以查看中断向量表是否能返回到原程序,如果不能返回,查看是否是8条语句。另外可以通过跟踪查看b irp语句是否被执行。

93130

FPGA 之 SOPC 系列(五)Nios II 软件使用与程序开发 I

NIOS Ⅱ 中断类型: NIosⅡ处理器提供以下中断类型:硬件中断异常和软件异常。软件异常又分为未定义指令、软件脚指令和其他异常。 硬件中断是由外部中断源通过处理器的32个中断输入请求硬件中断。...系统ISR保护现场; 系统ISR检测ctl1的PIE位,为0则进入软中断处理程序从11继续,否则由7继续; 系统ISR检测Ctl4,如果有中断申请,则转到硬中断处理和序,否则进入软中断处理程序;...硬中断处理程序将检测中断申请号,并检索中断向量表,跳转到用户中断处理程序; 用户中断处理程序做出具体的处理,最后返回系统ISR; 系统ISR恢复现场,并返回; 软中断处理程序进行陷井指令、模拟指令判断...alt_u32)); id:中断优先级,即所注册的ISR是为哪个中断优先级的中断服务的 Context,为所注册的ISR传递参数,可以是NULL; Handler,中断服务函数ISR的指针。...; context 是运行参数指针,将来作为第一个参数传给用户ISRIsr 是一个函数指针,指向用户ISR入口;如果注册成功,函数返回0,并允许全局中断及被服务中断;不成功返回非0值

89520

TT无人机扩展模块库分析(default.ino)补篇1

引脚34设置为输入上拉 接下来是一个中断函数 attachInterrupt()函数是用于为Arduino开发板设置和执行ISR中断服务程序)用的 ISR中断服务程序)顾名思义就是中断Arduino...注意 在ISR中断服务程序)函数中,delay()函数是不工作的,而且millis()函数返回值也不再增长。在ISR中断服务程序)运行期间Arduino开发板接收到的串口数据也可能丢失。...另外ISR函数里所使用的变量应声明为volatile类型。详情请见以下”关于ISR中断服务程序)”部分。 使用中断 中断很适合执行那些需要不断检查的工作,比如检查一个引脚上连接的按键开关是否被按下。...而使用中断,就可以确保这个转瞬即逝的脉冲信号可以很好的被Arduino开发板检测到并执行相应任务。 关于ISR中断服务程序) 对于Arduino开发板来说,ISR中断服务程序)是一种特殊的函数。...语法 attachInterrupt(digitalPinToInterrupt(pin), ISR, mode); 参数 pin: 中断引脚号 ISR: 中断服务程序名 mode:中断模式 中断模式(

1.1K20

计算机中断浅析

中断的类型 中断通常分为以下几类: 硬件中断:由外部硬件设备(键盘、鼠标、网络接口等)触发。 软件中断:由软件指令触发,例如系统调用。...中断服务程序(Interrupt Service Routine, ISR):特定中断的处理程序,用于处理具体的中断请求。...通过中断控制器、中断向量表和中断服务程序的协同工作,计算机系统能够高效、灵活地响应各种中断请求。理解和优化中断设计对于提高计算机系统的性能和可靠性至关重要。...以下是详细的解释: 中断消耗CPU资源的原因 上下文切换: 当中断发生时,CPU必须保存当前执行任务的状态(寄存器值、程序计数器等),然后跳转到中断处理程序。...中断处理程序执行: 中断处理程序(Interrupt Service Routine, ISR)是专门用于处理中断事件的代码。当中断发生时,CPU会执行对应的ISR

17610

【RT-Thread笔记】裸机系统与多线程系统

1、轮询系统 轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情,大概的伪代码具体代码清单 1-1所示: int main(void) { /...足见,轮询系统只适合顺序执行的功能代码,当有外部事件驱动时,实时性就会降低。 2、前后台系统 相比轮询系统,前后台系统是在轮询系统的基础上加入了中断。...外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断在这里我们称为前台, main 函数里面的无限循环我们称为后台,大概的伪代码见代码清单 1-2所示: int flag1 = 0; int...void ISR2(void) { /* 置位标志位 */ flag2 = 2; /* 如果事件处理时间很短,则在中断里面处理 如果事件处理时间比较长,在回到后台处理 */ DoSomething2...(); } 在顺序执行后台程序的时候,如果有中断来临,那么中断会打断后台程序的正常执行流,转而去执行中断服务程序,在中断服务程序里面标记事件,如果事件要处理的事情很简短,则可在中断服务程序里面处理,如果事件要处理的事情比较多

81930

【RT-Thread笔记】裸机系统与多线程系统

1、轮询系统 轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情,大概的伪代码具体代码清单 1-1所示: int main(void) { /...足见,轮询系统只适合顺序执行的功能代码,当有外部事件驱动时,实时性就会降低。 2、前后台系统 相比轮询系统,前后台系统是在轮询系统的基础上加入了中断。...外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断在这里我们称为前台, main 函数里面的无限循环我们称为后台,大概的伪代码见代码清单 1-2所示: int flag1 = 0; int...void ISR2(void) { /* 置位标志位 */ flag2 = 2; /* 如果事件处理时间很短,则在中断里面处理 如果事件处理时间比较长,在回到后台处理 */ DoSomething2...(); } 在顺序执行后台程序的时候,如果有中断来临,那么中断会打断后台程序的正常执行流,转而去执行中断服务程序,在中断服务程序里面标记事件,如果事件要处理的事情很简短,则可在中断服务程序里面处理,如果事件要处理的事情比较多

71730

中断的一点思考

8259A在收到CPU的INTA信号后,将优先级最高的那个中断请求在ISR寄存器(In-Service Register,简称ISR)中对应的bit置1,表示该中断请求已得到CPU的服务,同时IRR寄存器中的相应位被清零重置...否则,ISR寄存器中的相应位就一直保持为1,直到8259A显示地收到来自于CPU的EOI命令。 打住,各位看官读到这里,能回答如下问题吗? 1.    在执行中断处理程序时,中断一直是关闭着的吗?...当一个中断服务结束后,CPU可利用中断结束命令EOI通知8259A,以便复位ISR中的相应位。因此当调用handle_IRQ_event()时,即使开中断,该条中断线的中断也是关闭的。...另外一个问题:     当idle运行时,发生外部中断A,中断处理程序A将一个进程P1唤醒,并设置了调度标志need_resched,在中断处理程序A还没有结束前,又有一高优先级的外部中断B发生,响应B...,当中断处理程序B结束后,内核进行调度,选择中断A所唤醒的进程P1运行,此后,产生许多可运行的进程,致使idle不能很快再运行。

1.3K20

关于ISR

欢迎关注VxWorks567 转发,请标明出处! 硬件通过中断外部事件告诉系统,因此如果处理中断,就是RTOS的重中之重。ISR中断服务程序中断处理程序,就是用来响应中断的。...当硬件触发中断时,ISR就会立即执行。 在大多数架构里,所有中断使用同一个栈。这个中断栈是在系统启动时初始化,其尺寸由宏ISR_STACK_SIZE定义。...下文是默认值,可以在BSP中再重新定义 CPU ISR_STACK_SIZE AM29XXX 10000 COLDFIRE 1000 I960 1000 MC680X0 1000 MIPS 5000 PPC...另外,还可以通过INCLUDE_PROTECT_INTERRUPT_STACK,打开中断栈的溢出保护。 ? 使用命令isrShow(),可以查看已安装的所有ISR ?...Tag默认表示的是中断向量vector,而这个vector是中断号通过宏INUM_TO_IVEC()转换得到的 /* ARM */ #define IVEC_TO_INUM(intVec) ((int

1.5K20

Linux 内核如何处理中断

中断服务程序(interrupt service routine)(ISR)。...中断服务程序ISR)是一个小的程序,用来处理具体的数据,其具体的处理方式依赖于造成中断请求(IRQ)的原因。之前正在运行的进程在中断服务程序ISR)运行结束前都会被中断。...接下来会调用在内核启动时设备驱动注册的对应的中断服务程序ISR)。 软件中断 当你在播放一个视频时,音频和视频是同步播放是相当重要的,这样音乐的速度才不会变化。...这是最严重的中断,终止将会调用系统的终止异常处理程序结束造成异常的进程。 动手实践 中断请求按照高级可编程中断控制器(APIC)中的优先级高低排序(0是最高优先级)。...中断描述表(interrupt descriptor table)(IDT)中记录了中断请求(IRQ)和中断服务程序ISR)的对应关系。Linux 中定义了从 0 到 256 的 IRQ 向量。

2.4K40

中断控制器8259

中断控制器的作用 中断控制器相当于一个代理,我们外部设备产生的中断事件不会直接通过INTR总线进入CPU,而是先发送给中断控制器,中断控制器再转交给CPU,中断控制器的主要作用如下: 管理和控制可屏蔽中断...信号线上的中断会被屏蔽 IRR:中断请求寄存器,宽度为8位,用来接收没有IMR屏蔽掉的中断,等待处理的中断队列 PR:优先级仲裁器,用来找出优先级更高的中断 ISR中断服务寄存器,宽度8位,用来保存正在处理的中断...中断处理程序完成以后需要进行哪些扫尾工作? 如果中断结束通知(EOI)是自动模式,则不需要人工介入,因为CPU在向8259A获取向量号的INTA中,8259A会自动将中断ISR对应的BIT置0。...如果中断结束通知(EOI)是手动模式,中断处理程序结束的位置必须要向8259A发送此通知,8259A在收到EOI通知以后会自动将ISR中对应的BIT置0。...,需要中断处理程序结束处向芯片的主从片发送EOI信号,1表示自动结束中断

1.4K10

中断程序要注意哪些方面?

为了在中断处理结束后能够使进程准确地返回到中断点,系统必须保存当前处理机程序状态字PSW和程序计数器PC等的值。 (2)分析中断原因,转去执行相应的中断处理程序。...6、(可忽略)C51编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容,具体如下: 在程序开始处对ACC、B、DPH、DPL和PSW入栈,结束时出栈。...中断函数未加using n修饰符的,开始时还要将R0~R1入栈,结束时出栈。 中断函数加using n修饰符,则在开始将PSW入栈后还要修改PSW中的工作寄存器组选择位。...其次它可使中断服务程序的结构简单,不容易出错。中断程序中放入的东西越多,他们之间越容易起冲突。简化中断服务程序意味着软件中将有更多的代码段,但可把这些都放入主程序中。...下面的代码就使用了__interrupt关键字去定义了一个中断服务程序(ISR),请评论一下这段代码的。

3.2K30

MQX中断系统深度解析(一)

中断请求 某一中断源要CPU为它服务时,会向CPU发出中断请求信号,中断控制器获取中断源的中断相量号,并通过识别中断相量号将对应的硬件中断源模块的中断状态寄存器中的中断标志位置位,以使CPU知道到底是何种中断请求来了...中断检测 CPU在每条指令结束时候都会检测中断请求或者异常,在指令周期的中断周期中,CPU将会检测系统是否存在中断请求,若有中断请求,则CPU会暂停当前执行的任务,去对中断事件进行响应,若没有中断请求,...,通过中断相量号在中断相量表中找到中断对应的中断服务例程,也就是我们常说的ISR,执行中断处理服务程序ISR,在中断结束后,在将之前保存的内容恢复到内部寄存器,从而使中断前后程序的执行现场没有任何变化。...MQX的中断服务例程分为内核ISR和用户ISR两个相对独立的部分,内核ISR与处理器相关,位于MQX安装包的源码目录下PSP文件夹,是汇编文件dispatch.s,用于实现硬件中断到用户ISR的映射,用汇编语言实现...KSDK的中断相量表可以参考startup_MKV46F15.s文件,vectors.c几乎把所有的中断相量都设为内核ISR,除过复位相量,以及系统服务调用,和可挂起系统调用这两个异常不经过_int_kernel_isr

995110

linux系统编程之基础必备(一):计算机体系结构一点基础知识

(这个地址由体系结构定义),于是CPU从这个地址开始取指令(或者说跳转到这个地址),执行中断服务程序(ISR,InterruptService Routine),完成中断处理之后再返回先前被打断的地方执行后续指令...比如某种体系结构规定发生中断时跳转到地址0x00000010执行,那么就要事先把一段ISR程序加载到这个地址,ISR程序是内核代码的一部分,在这段代码中首先判断是哪个设备引发了中断,然后调用该设备的中断处理函数做进一步处理...设备驱动程序通常是内核里的一组函数,通过读写设备寄存器实现对设备的初始化、读、写等操作,有些设备还要提供一个中断处理函数供ISR调用。      ...CPU在产生中断或异常时不仅会跳转到中断或异常服务程序,还会自动切换模式,从用户模式切换到特权模式,因此从中断或异常服务程序可以跳转到内核代码中执行。...可以说read,write这样的系统调用的底层实现都是利用了这3条汇编指令,系统调用只是进入内核程序的一个接口,内核调用内核函数(中断异常服务程序,实现各种普通文件操作的内核函数,各种设备驱动程序

1.3K50

一文讲透计算机的“中断

详细的思维导图如下: image.png 中断分类 image.png 1 外部中断 1、可屏蔽中断:通过INTR线向CPU请求的中断,主要来自外部设备硬盘,打印机,网卡等。...,处理结束后返回到陷阱指令的下一条指令。...系统调用,程序调试功能等。 尽管我们平时写程序时似乎并没有设下陷阱,那是因为平常所用的高级语言对底层的指令进行了太多层的抽象封装,已看不到底层的实现,但其实是存在的。...当有多个中断请求时,IRR寄存器中多位将会置1,相当于维持了一个请求中断的队列。 3、ISR:In_Service Register,中断服务寄存器,正在进行处理的中断ISR对应的位值为1。...3、上一步得到的段基址加上段描述符中的段内偏移量得到的地址变为中断服务程序的地址。

1.1K21

C语言嵌入式系统编程修炼之软件架构篇

中断服务程序 中断是嵌入式系统中重要的组成部分,但是在标准C中不包含中断。...许多编译开发商在标准C上增加了对中断的支持,提供新的关键字用于标示中断服务程序(ISR),类似于__interrupt、#program interrupt等。...当一个函数被定义为ISR的时候,编译器会自动为该函数增加中断服务程序所需要的中断现场入栈和出栈代码。...中断服务程序需要满足如下要求: (1)不能返回值; (2)不能向ISR传递参数; (3) ISR应该尽可能的短小精悍; (4) printf(char * lpFormatString,…)函数会带来重入和性能问题...硬件驱动模块 一个硬件驱动模块通常应包括如下函数: (1)中断服务程序ISR (2)硬件初始化 a.修改寄存器,设置硬件参数(UART应设置其波特率,AD/DA设备应设置其采样速率等); b.将中断服务程序入口地址写入中断向量表

2.1K80

FreeRTOS例程2-任务挂起恢复与使用中断遇到的坑!

注意,任务挂起是没有FromISR版本的,所以在中断中貌似就不可以使用任务挂起了。 程序验证 在上个例程的基础上,增加一个按键检测任务和外部中断函数,用来测试任务挂起与恢复。...NVIC_Init(&NVIC_InitStructure); //配置 } //外部中断4服务程序 void EXTI4_IRQHandler...NVIC_Init(&NVIC_InitStructure); //配置 } //外部中断4服务程序 void EXTI4_IRQHandler...如果一个被分配了高于configMAX_SYSCALL_INTERRUPT_PRIORITY优先级的中断服务例程(ISR)调用了一个ISR安全的FreeRTOS API函数,那么下面的断言将失败。...*/ #define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 0xf /* 可以被任何中断服务程序使用的最高中断优先级,它可以调用来中断安全的

2.7K30

理解操作系统的中断和系统调用

按照来源,中断可分为两类: 硬件中断(Hardware Interrupts):这是由外部硬件设备生成的,例如键盘输入、鼠标移动等。...当中断发生时,CPU会暂停正在执行的任务,保存其状态,然后执行一个称为中断处理程序(Interrupt Service Routine, ISR)的特殊程序,这个程序会处理中断请求。...二、系统调用(System Calls) 系统调用是运行在用户模式的程序请求操作系统内核提供服务的一种方式,比如文件操作、进程控制、网络访问等。...在 Unix 和类 Unix 系统( Linux)中,以下是一些常见的系统调用: 文件操作: open():打开或创建文件 read():读取文件内容 write():写入文件内容 close():关闭打开的文件...lseek():移动文件的读/写指针 进程管理: fork():创建新的子进程 exit():结束进程 wait():暂停父进程,直到子进程结束 exec():在当前进程上下文中执行新的程序 内存管理

86021

Linux中断机制:硬件处理,初始化和中断处理

不同的外部设备、不同的体系结构、不同的OS其中断实现机制都有差别,本文对应的OS为linux3.4版本,外部设备为PCI设备、系统为X86。...概览 中断让外设能够通知CPU他需要获得服务(让CPU执行指定的中断服务例程ISR)。为了达到这个目的,首先要为中断执行做好准备,完成初始化相关的操作。...3、 使用request_irq号为该中断号指定一个服务例程; 完成了以上的初始化操作,在外设中断到来的时候,为该中断指定的ISR(Interrupt Service Routines)就能得到执行,这个执行过程大致如下...并把IF/TF位清零屏蔽可屏蔽中断;至此,CPU完成了中断处理程序执行环境的建立。...从实现中可以看到,该函数从FIRST_EXTERNAL_VECTOR(外设中断的起始vector号,通常是0x20) 到first_system_vector(外部中断结束vector号,通常是254,

7.9K31

C++一分钟之-嵌入式编程与裸机开发

C++提供了多种内存管理工具,new和delete,但在嵌入式环境中,更推荐使用静态分配或手动管理堆栈,以避免运行时错误。 易错点:动态内存分配不当可能导致内存泄漏或碎片化。...手动管理内存,使用链表来跟踪已分配的内存块。...中断处理 嵌入式系统经常需要处理外部事件,这通常通过中断服务例程(ISR)实现。C++的函数指针和模板可以简化ISR的定义和管理。 易错点:ISR中不应执行耗时操作,否则可能影响系统的响应时间。...避免方法: 将复杂逻辑从ISR中移除,仅在ISR中设置标志位。 使用任务或线程在主循环中处理这些标志位。...避免方法: 使用适当的优化级别(-Os用于小代码量)。 保持代码清晰,优先考虑可读性和可维护性。 结论 C++在嵌入式编程与裸机开发中提供了强大的功能,但同时也带来了额外的复杂性和潜在的陷阱。

10210
领券