c语言中中断服务子程序与其他子程序的区别

在单片机c51中如果一个中断服务子程序并在mai.c(主函数在其中)文件中而在另一个c文件中,那么这个中断服务子程序需要在头文件中进行声明吗?
以上的表述可能不明确,先另行表述:
我想问的问题是中断服务子程序与其他子程序的区别。主要是:当中断服务子程序与主函数不在同一个文件中时,中断服务子程序是否需要在主函数所在的文件中进行声明。

中断是单片机的一个重要功能,中断子程序专为执行中断功能,它是在发生中断后,自动执行的,不需要主程序调用;普通子函数要主程序调用才能执行。

汇编里的区别:
普通子函数用RET返回;中断子程序用RETI返回,RETI返回时要清除中断标志的;
普通子函数调用时直接进入函数入口地址,中断函数在中断发生时先进中断入口
03H、08H、13H、18H、23H后随即写一个跳转指令,再跳转到相应语句。

C语言区别:
普通子函数用的是C语言里的主函数调用子函数的方法,子函数可以有参数,有返回值;中断函数没有参数,没有返回值;
中断函数的写法也不一样,以80c51为例:
void INT0() interrupt 0 using 1
{

}

interrupt 0不是是外部中断0引发的中断,必须写; using 1
表示在中断函数里用第一组寄存器R0-R7.这个可以省略。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-10-13
“并在mai.c(主函数在其中)文件中而在另一个c文件中 ” 完全无法理解你这句话啥意思

最好是声明。 这种语法要求跟你怎么用这个函数完全没关系的, 无论是什么函数只要你用到了最好就是先声明本回答被提问者采纳
第2个回答  2009-07-24
中断服务子程序只需添加关键字 interrupt 0/1/2/3/4/5,且不能有返回参数及输入参数,其他使用方法同普通子程序一样.
第3个回答  2009-07-19
要, #include" "这相当于文件包含 只需头文件

中断服务子程序和中断请求子程序有什么区别?
2、过程不同 RET是从子程序返回,返回到LCALL或ACALL指令下一条指令处继续执行程序。RETI是从中断服务子程序返回,返回到中断时的断点处继续执行程序,断点未知。

主函数中,没有调用中断子程序,中断子程序为什么能被执行?何时执行?_百...
1.子程序调用是预先安排好的,程序中断是随机发生的;2.调用子程序,是为主程序服务的,而中断程序与主程序的程序毫无关系;3.子程序是由调用指令给出目标地址,中断是通过隐指令获得中断服务程序的入口地址 看到这个,大概意思应该是:中断程序不同于子程序,不需要主函数main调用就能执行。中断服务程序...

在单片机中子程序与中断服务程序的异同点。
差别:⑴ 中断请求信号可以由外部设备发出,是随机的;子程序调用却是由软件编排好的。⑵ 中断响应后由固定的矢量地址转入中断服务程序,而子程序地址由软件设定。⑶ 中断响应是受控的,其响应时间会受一些因素影响;子程序响应时间是固定的。

单片机C语言程序,看不懂,求讲解
该子程序是在硬件产生中断的时候,跳转到相应中断入口后,再跳转到这个中断服务程序的。请注意函数后面的“interrupt x”声明,这是C51的扩展内容。“用示波器测波形是测p1.0引脚,为什么是这个引脚,怎么确定的?p1_0不是个变量名吗?”P1_0这个符号在前面的头文件 t89c51cc02.h 中有定义。至于“...

reti和ret有什么区别?
RET与RETI在编程语言中体现为不同指令,如在汇编语言中,RET为POP指令用于从栈顶弹出数据并执行,RETI为POP后再执行中断服务程序的下一条指令。在高级编程语言如C语言中,通常通过函数调用与返回实现类似功能,而中断处理则由操作系统或硬件特定API提供。理解RET与RETI的区别对于编写高效、可靠的程序至关...

μC\/OS 中,中断服务子程序为何要用汇编语言来写
为了安全,因为C语言不是原子性语言会出错

单片机汇编指令中RETI和RET的区别
在单片机汇编指令中,RETI和RET有着显著的区别。首先,它们的作用和触发条件不同。RETI,即中断返回指令,当一个中断发生后,会自动清零优先级,确保其他中断可以正常响应。而RETI替换为RET可能导致问题,因为RET是用于子程序返回,返回到上一级调用指令的后续位置,而非中断点。这就意味着,初次运行可能不...

用c语言写interrupt类型函数出现error C2061错误
vc6.0不支持,interrupt 不是标准的关键字,它用来指明一个中断服务子程序也就是(ISR);使用它的时候,注意两点,中断服务子程序,不能返回值;中断服务子程序,不能传递参数。所以,你写的返回值,和参数都才是void.主要用于嵌入式系统开发。你换个tc,试试。VC6.0是不支持的。

疑惑…单片机进入中断后不能执行调延时程序?中断服务程序里已写延时程序...
通常在中断子程序中是不调用延时子程序的,这样会增加中断处理时间,如果有其它低级中断了,就会延误响应中断了。所以,中断子程序中不要写调用延时子程序,中断子程序也不要写得过长,处理过多的任务,要尽快处理后及时返回,如果中断一次有很多任务需要执行完全,可以在中断子程序中设置一个标志位,在主...

求c语言的老师傅回答!!
可以访问端口,所用的函数如楼上所说:outport和outportb是向端口输出,inport和inportb是从端口读入;也可以调用DOS中断,这也经常会用到吧:setvect设定中断号和服务子程序,中断服务程序形如void interrupt inter_service(……),注意在硬件上还要向0x20和0x21发送控制字,等等等等……对于ISA设备,可以...

相似回答